웹사이트 검색

Rocky Linux에서 Nginx 및 Gunicorn과 함께 Flask를 설치하는 방법


이 페이지에서

  1. 전제 조건
  2. 종속성 설치
  3. 사용자 설정
  4. Python 가상 환경 설정\n
  5. Flask 및 Gunicorn 설치
  6. 첫 번째 Flask 애플리케이션 만들기\n
  7. Gunicorn 및 Supervisord 설정
  8. Nginx 역방향 프록시 설정\n
  9. 결론

Flask는 최신 웹 애플리케이션 및 API(Application Programming Interface) 개발을 위해 Python으로 작성된 마이크로프레임워크입니다. Werkzeug 툴킷과 Jinja2 템플릿을 기반으로 합니다. Flask는 복잡한 아키텍처를 사용하는 대신 코어 확장이 쉽고 코드가 적기 때문에 배우기 쉬운 작은 웹 프레임워크입니다. Flask에는 ORM이 포함되어 있지 않지만 여전히 URL 라우팅 및 템플릿 엔진과 같은 멋진 기능이 있습니다.

Gunicorn 또는 "Green Unicorn"은 프리포크 작업자 모드가 있는 WSGI HTTP 서버입니다. Rubys Unicorn 프로젝트에서 포팅되었습니다. Gunicorn은 여러 웹 프레임워크와 결합할 수 있으며 서버 리소스가 가볍고 빠릅니다. Gunicorn은 애플리케이션과 웹 서버 사이에 있으므로 Gunicorn을 Nginx 및 Apache2와 같은 웹 서버와 페어링할 수 있습니다.

이 튜토리얼에서는 Rocky Linux 서버에서 Gunicorn 및 Nginx를 사용하여 Flask Python 웹 프레임워크를 설치하고 구성하는 방법을 보여줍니다. 또한 Python Flask 애플리케이션을 관리하기 위한 프로세스 관리자로 Supervisord를 설정하는 방법도 배웁니다.

전제 조건

이 자습서를 완료하려면 다음 요구 사항 중 일부가 필요합니다.

  • A Rocky Linux 서버 - Rocky Linux v8 또는 v9 - 데스크톱 또는 서버를 모두 사용할 수 있습니다.\n
  • sudo 루트 관리자 권한이 있는 루트가 아닌 사용자.\n
  • 로컬 개발을 위한 더미 도메인 이름.\n

종속성 설치

첫 번째 단계에서는 Flask 웹 프레임워크를 설치하고 배포하는 데 사용할 일부 패키지 종속성을 설치합니다. 여기에는 Python Pip, Nginx 및 Supervisord가 포함됩니다.

이러한 모든 패키지 종속성은 Rocky Linux 리포지토리에서 사용할 수 있으며 DNF 명령을 통해 쉽게 설치할 수 있습니다.

먼저 EPEL 저장소가 시스템에 설치되어 있는지 확인하십시오. 또는 아래의 dnf 명령을 통해 설치하고 활성화할 수 있습니다.

sudo dnf install epel-release

이제 아래 dnf 명령을 사용하여 Python 패키지 python3-pippython3-develGCC 컴파일러를 설치합니다. 이 패키지는 Python 패키지를 설치하는 데 사용됩니다.

sudo dnf install python3-pip python3-devel gcc

설치를 확인하라는 메시지가 표시되면 y를 입력하고 ENTER를 눌러 계속 진행합니다.

다음으로 아래의 또 다른 dnf 명령을 실행하여 Nginx 웹 서버와 Supervisord 패키지를 설치합니다. 여기서 Nginx는 Flask 프로젝트의 리버스 프록시로 사용되며, Supervisord는 Flask 애플리케이션 프로세스를 관리하는 데 사용됩니다.

sudo dnf install nginx supervisor

y를 입력하고 ENTER를 눌러 설치를 확인합니다.

이제 아래의 systemctl 명령을 통해 Nginx 서비스를 시작하고 활성화합니다. 그런 다음 Nginx 서비스가 실행 중인지 확인합니다.

sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx

다음과 같은 출력이 표시됩니다. Nginx 서비스가 활성화되고 시스템 부팅 시 자동으로 실행됩니다. 그리고 Nginx 서비스의 상태가 실행 중입니다.

그리고 Supervisord 서비스의 경우 다음 명령을 실행하여 시작하고 활성화합니다. 그런 다음 감독 서비스의 상태를 확인하여 실행 중인지 확인합니다.

sudo systemctl start supervisord
sudo systemctl enable supervisord
sudo systemctl status supervisord

Supervisord 서비스가 활성화되고 시작할 때 자동으로 실행되는 것을 볼 수 있습니다. 그리고 감독 서비스의 상태가 실행 중입니다.

사용자 설정

패키지 종속성을 설치한 후 이제 Flask 프로젝트를 실행하는 데 사용할 새 사용자를 설정합니다.

다음 명령을 실행하여 새 사용자를 만들고 암호를 설정합니다. 이 예에서는 새 사용자 Alice를 생성합니다.

새 비밀번호를 생성하라는 메시지가 표시되면 비밀번호를 입력하고 반복합니다.

sudo useradd -m -s /bin/bash alice
sudo passwd alice

이제 다음 명령을 실행하여 사용자 alice를 wheel 그룹에 추가하여 사용자가 sudo 명령을 실행할 수 있도록 합니다.

sudo usermod -aG wheel alice

마지막으로 새 사용자로 로그인하고 sudo 명령을 실행하여 루트 권한을 확인합니다. 프롬프트가 표시되면 비밀번호를 입력하십시오.

su - alice
sudo su

Rocky Linux 시스템의 루트 셸이 표시되어야 합니다.

Python 가상 환경 설정

이 단계에서는 Flask 웹 프레임워크용 Python 가상 환경을 설정합니다.

다음 명령을 사용하여 사용자로 로그인합니다.

su - alice

다음 mkdir 명령을 사용하여 새 Flask 설치 디렉터리 /var/www/myflask를 만듭니다.

sudo mkdir -p /var/www/myflask

아래 명령을 사용하여 Flask 설치 디렉터리의 소유권 및 권한을 변경합니다. 소유권은 권한이 755인 Alice 사용자에게 있어야 합니다.

sudo chown -R alice:alice /var/www/myflask
sudo chmod 755 /var/www/myflask

이제 작업 디렉터리를 Flask 설치 디렉터리 /var/www/myflask로 이동하고 아래의 python 명령을 통해 새 Python 가상 환경을 만듭니다.

cd /var/www/myflask
python3 -m venv myenv

새 디렉토리 myenv가 생성된 것을 볼 수 있습니다.

다음으로 다음 명령을 사용하여 Python 가상 환경을 활성화합니다. 활성화되면 프롬프트 형식이 (myenv [email 와 같이 변경된 것을 볼 수 있습니다.

source myenv/bin/activate

가상 환경에서 비활성화하려면 다음 명령을 실행해야 합니다.

deactivate

Flask 및 Gunicorn 설치

Flask를 설치하기 전에 가상 환경에 있는지 확인하십시오. 또는 다음 명령을 실행하여 로그인할 수 있습니다.

su - alice
cd /var/www/myflask
source myenv/bin/activate

이제 아래의 pip 명령을 통해 Flask와 Gunicorn을 설치합니다. 이렇게 하면 시스템 전체가 아닌 가상 환경에 Flask 및 Gunicorn이 설치됩니다.

pip3 install flask gunicorn

Flask 및 Gunciron이 설치되면 Flask 웹 프레임워크를 사용하여 첫 번째 애플리케이션을 만들 준비가 된 것입니다.

첫 번째 Flask 애플리케이션 만들기

Flask 애플리케이션 생성을 시작하기 전에 Python 가상 환경에 있는지 확인하십시오.

원하는 편집기를 사용하여 새 Python 파일 myflask.py를 만듭니다. 이 예에서는 nano 편집기를 사용합니다.

nano myflask.py

이제 다음 스크립트를 파일에 추가하십시오.

# myflask.py
from flask import Flask, render_template  # importing the render_template function

app = Flask(__name__)
# route to index page
@app.route("/")
def hello():
    return render_template('index.html')

if __name__ == "__main__":
    app.run(host='0.0.0.0')

파일을 저장하고 완료되면 편집기를 종료하십시오.

다음으로 정적 파일을 위한 새 디렉터리 템플릿을 만들고 그 위에 새 index.html 파일을 만듭니다.

mkdir -p templates
nano templates/index.html

다음 HTML 스크립트를 파일에 추가하십시오.

<html>
    <body>
        <h1><center>Hello Flask - Rocky Linux!</center></h1>
    </body>
</html>

파일을 저장하고 완료되면 편집기를 종료하십시오.

이제 아래 명령을 사용하여 Python Flask 스크립트 myflask.py를 실행합니다. 이렇게 하면 개발 모드에서 Flask 애플리케이션이 실행되고 기본 포트 5000으로 서버 IP 주소가 실행됩니다.

python3 myflask.py

다음은 비슷한 출력입니다.

다음으로 다른 터미널을 열고 아래 curl 명령을 실행하여 Flask 애플리케이션에 액세스합니다. 생성한 index.html 파일의 스크립트가 표시됩니다.

curl localhost:5000

이제 Ctrl+c를 눌러 Flask 애플리케이션을 종료합니다.

Gunicorn 및 Supervisord 설정

이 단계에서는 Gunicorn 및 Supervisord를 사용하여 Flask 애플리케이션을 설정합니다. 이를 통해 Supervisord 프로세스를 통해 관리 및 제어 가능한 Python 애플리케이션을 실행하고 관리할 수 있습니다.

Flask 애플리케이션의 동일한 디렉터리 내에 새 Python 파일 uwsgi.py를 만듭니다. 이 예에서 디렉토리는 /var/www/myflask여야 합니다.

nano wsgi.py

다음 Python 스크립트를 파일에 추가합니다.

# import myflask Flask application
from myflask import app

if __name__ == "__main__":
    app.run(debug=True)

파일을 저장하고 완료되면 편집기를 종료하십시오.

이제 다음 gunicorn 명령을 실행하여 Flask 애플리케이션을 시작하고 Gunicorn의 구성을 확인합니다. 이제 애플리케이션이 포트 8000이 있는 Gunicron에서 실행 중이어야 합니다.

gunicorn -w 4 --bind 0.0.0.0:8000 wsgi:app

다음은 gunicorn 명령의 출력입니다.

그런 다음 웹 브라우저를 열고 서버 IP 주소와 포트 8000(예: http://192.168.5.100:8000/)을 방문합니다. Flask 애플리케이션의 index.html 페이지가 표시되어야 합니다.

이 시점에서 Flask 애플리케이션은 오류 없이 Gunicorn과 함께 실행됩니다. 이제 터미널로 돌아가서 Ctrl+c를 눌러 gunicorn 프로세스를 종료하고 Supervisord 프로세스 관리자 구성을 시작할 수 있습니다.

다음 nano 명령을 통해 Flask 애플리케이션 /etc/supervisord.d/flaskapp.ini에 대한 새 Supervisord INI 파일 구성을 만듭니다. 구성은 /etc/supervisord.d 디렉토리에 저장해야 합니다.

sudo nano /etc/supervisord.d/flaskapp.ini

파일에 다음 구성을 추가합니다. 그리고 애플리케이션의 세부 경로, 사용자 및 그룹, 로그 경로를 변경해야 합니다.

이 구성을 사용하면 Flask 애플리케이션이 Gunicorn이 생성할 UNIX 소켓에서 실행됩니다. 이 유닉스 소켓은 또한 Nginx 리버스 프록시와 상호 작용하는 데 사용됩니다.

[program:myflask] 
command=/bin/bash -c 'source /var/www/myflask/myenv/bin/activate; gunicorn -w 3 --bind unix:/var/www/myflask/ipc.sock wsgi:app'
directory=/var/www/myflask
user=alice
group=www-data
autostart=true
autorestart=true
stdout_logfile=/var/www/myflask/myflask.log
stderr_logfile=/var/www/myflask/error.log

파일을 저장하고 완료되면 편집기를 종료하십시오.

이제 아래의 systemctl 명령을 실행하여 Supervisord 서비스를 다시 시작하고 새로운 변경 사항을 적용하십시오. 그런 다음 Supervisord 상태를 확인하고 서비스가 실행 중인지 확인합니다.

sudo systemctl restart supervisord
sudo systemctl status supervisord

아래 스크린샷에서 Supervisord가 Flask 애플리케이션에 대한 새로운 추가 구성으로 실행 중인 것을 볼 수 있습니다.

마지막으로 이제 아래의 supervisorctl 명령을 통해 Flask 애플리케이션 프로세스를 확인할 수 있습니다. 상태가 OK인 myflask라는 프로세스가 하나 있는 것을 볼 수 있습니다.

sudo supervisorctl status

Nginx 역방향 프록시 설정

이 단계에서는 Supervisord 프로세스 관리자에서 실행되는 Flask 애플리케이션의 리버스 프록시로 Nginx를 설정하는 방법을 배웁니다. 역방향 프록시용으로 새 Nginx 서버 블록을 만들고 Flask 애플리케이션용 로컬 도메인 이름을 사용합니다.

다음 nano 편집기를 사용하여 새 Nginx 서버 블록 구성 /etc/nginx/conf.d/flaskapp.conf을 만듭니다.

sudo nano /etc/nginx/conf.d/flaskapp.conf

파일에 다음 구성을 추가합니다. 그리고 도메인 이름 www.myflask.local을 로컬 개발 도메인으로 변경해야 합니다.

server {
    listen 80;
    server_name www.myflask.local;

    location / {
        include uwsgi_params;
        proxy_pass http://unix:/var/www/myflask/ipc.sock;
    }
}

파일을 저장하고 완료되면 편집기를 종료하십시오.

다음으로 Nginx 구성을 확인하여 구성이 올바른지 확인합니다. 그런 다음 Nginx 서비스를 다시 시작하여 새 변경 사항을 적용합니다.

sudo nginx -t
sudo systemctl restart nginx

이제 기본 HTTP 포트에서 실행되는 Nginx 리버스 프록시를 통해 Flask 애플리케이션에 액세스할 수 있습니다.

이제 로컬 컴퓨터에서 nano 편집기를 사용하여 /etc/hosts 파일을 편집합니다.

sudo nano /etc/hosts

아래와 같이 도메인 이름이 "www.myflask.local"인 Ubuntu 머신 IP 주소를 정의합니다.

192.168.5.28 www.myflask.local

파일을 저장하고 닫습니다.

이제 웹 브라우저를 열고 주소 표시줄에 Flask 프로젝트 도메인 이름(예: http://www.myflask.local)을 입력합니다. 그리고 Python Flask 프로젝트의 인덱스 페이지를 가져와야 합니다.

결론

축하합니다! Rocky Linux 서버에 Gunicorn 및 Nginx와 함께 Python Flask 웹 프레임워크를 성공적으로 설치했습니다. 또한 첫 번째 Python Flask 프로젝트를 만들고, Python 가상 환경을 설정하고, Flask 프로젝트에 대한 Supervisord 프로세스 관리를 설정하는 방법을 배웠습니다.