Flask 애플리케이션 서버 배포 가이드

서버 구성 및 배포

포트 및 보안 그룹

서버 포트는 특정 애플리케이션과의 통신을 위한 엔드포인트 역할을 합니다.

IP 주소    --> 컴퓨터
포트      --> 애플리케이션 A
포트      --> 애플리케이션 B
포트      --> 애플리케이션 C

주요 포트:
- 22: SSH
- 3306: MySQL
- 6379: Redis
- 80: HTTP 기본 포트
- 443: HTTPS

원격 서버 접속

XShell 또는 다른 SSH 클라이언트를 사용하여 서버에 접속합니다.

코드 동기화 (Git)

git init
git remote add origin https://github.com/xxx.git
git add .
git commit -m "프로젝트 초기화"
git branch -M main
git push -u origin main

Python 3.9.5 설치

1. GCC 설치:

yum install gcc -y

2. Python 의존성 패키지 설치:

yum install zlib zlib-devel -y
yum install bzip2 bzip2-devel -y
yum install ncurses ncurses-devel -y
yum install readline readline-devel -y
yum install openssl openssl-devel -y
yum install xz lzma xz-devel -y
yum install sqlite sqlite-devel -y
yum install gdbm gdbm-devel -y
yum install tk tk-devel -y
yum install mysql-devel -y
yum install python-devel -y
yum install libffi-devel -y

3. Python 소스 코드 다운로드 및 설치:

yum install wget -y
wget https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tgz
tar -xvf Python-3.9.5.tgz
cd Python-3.9.5
./configure
make all
make install

4. 설치 확인 및 pip 설정:

python3 --version
pip3.9 config set global.index-url https://pypi.douban.com/simple/

가상 환경 설정

1. virtualenv 설치:

pip3.9 install virtualenv

2. 가상 환경 생성:

mkdir /envs
virtualenv /envs/nb --python=python3.9

3. 패키지 설치:

source /envs/nb/bin/activate
pip install flask pymysql dbutils
# 또는 requirements.txt 사용
pip install -r requirements.txt

uWSGI 설정

1. uWSGI 설치:

source /envs/nb/bin/activate
pip install uwsgi

2. 구성 파일 생성 (nb_uwsgi.ini):

[uwsgi]
socket = 127.0.0.1:8001
chdir = /data/www/day28/
wsgi-file = app.py
callable = app
processes = 1
virtualenv = /envs/nb/

3. 실행 및 관리:

uwsgi --ini nb_uwsgi.ini
# 백그라운드 실행: uwsgi --ini nb_uwsgi.ini &
# 프로세스 확인: ps -ef|grep nb_uwsgi
# 종료: kill -9 [PID]

Nginx 구성

1. Nginx 설치:

yum install nginx -y

2. 구성 파일 수정 (/etc/nginx/nginx.conf):

user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    
    upstream flask {
        server 127.0.0.1:8001;
    }
    
    server {
        listen 80;
        
        location /static {
            alias /root/data/www/day28/static;
        }
        
        location / {
            uwsgi_pass flask;
            include uwsgi_params;
        }
    }
}

3. 서비스 관리:

systemctl start nginx
systemctl stop nginx
systemctl restart nginx
systemctl enable nginx

Shell 스크립트

재시작 스크립트 (reboot.sh):

#!/bin/bash
echo "-------------------- uWSGI 프로세스 --------------------"
ps -ef | grep nb_uwsgi.ini | grep -v grep
sleep 0.5
echo "-------------------- 종료 진행 --------------------"
ps -ef | grep nb_uwsgi.ini | grep -v grep | awk '{print $2}' | xargs kill -9
sleep 0.5
/envs/nb/bin/uwsgi --ini nb_uwsgi.ini &
echo "-------------------- 시작 완료 --------------------"
ps -ef | grep nb_uwsgi.ini | grep -v grep

실행 권한 부여:

chmod 755 reboot.sh
./reboot.sh

MySQL 데이터베이스 설정

1. MariaDB 설치:

yum install mariadb-server mariadb -y

2. 서비스 관리:

systemctl start mariadb
systemctl enable mariadb

3. 데이터베이스 및 사용자 설정:

mysql -u root -p
CREATE DATABASE day28db DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
CREATE USER 's5'@'%' IDENTIFIED BY 'qwe123..';
GRANT ALL PRIVILEGES ON day28db.* TO 's5'@'%';
FLUSH PRIVILEGES;

Redis 설치 및 구성

1. Redis 설치:

yum install redis -y

2. 구성 파일 수정 (/etc/redis.conf):

bind 0.0.0.0
requirepass qwe123..

3. 서비스 관리:

systemctl start redis
systemctl enable redis

4. Python Redis 클라이언트 설치:

pip install redis

태그: flask uwsgi nginx MySQL Redis

9월 27일 03:37에 게시됨