Gunicorn과 Nginx를 사용하여 플라스크를 손쉽게 배포할 수 있습니다!

소개하다.


Flask 응용 프로그램을 만든 후 사람들이 그것을 보길 원할 수도 있습니다.이 자습서는 Gunicorn을 사용하여 Linux 서버 Nginx에 Flask 애플리케이션을 배치하는 방법을 보여 줍니다.

요구 사항

  • 이 자습서에는 서버 사용Debian
  • Nginx
  • 구니코엔
  • 파이프
  • 이 과정의 첫 번째 단계는 pip를 설치하는 것이다.
    $ sudo apt update
    
    $ sudo apt install python3-pip
    
    가상 환경을 설정하려면 pipenv를 사용하십시오.
    $ pip3 install pipenv
    
    버전 검사를 통해 pipenv가 제대로 설치되었는지 확인합니다.
    $ pipenv --version
    pipenv, version 11.9.0
    
    항목을 저장할 항목 디렉토리를 만듭니다./var/www/ 좋은 자리예요.
    $ sudo mkdir /var/www/myproject
    
    이 디렉터리의 기본 권한은 루트로 설정됩니다.
    $ ls -ld /var/www/myproject
    drwxr-xr-x 2 root root 4096 Jan 27 12:37 /var/www/myproject/
    
    사용자와 그룹의 권한을 사용자 이름과 그룹 www 데이터로 변경합니다.
    $ sudo chown -R $USER:www-data /var/www/myproject
    
    권한이 사용자 이름brandon과 그룹 이름www-data으로 변경되었는지 확인합니다.
    $ ls -ld /var/www/myproject
    drwxr-xr-x 2 brandon www-data 4096 Jan 27 12:37 /var/www/myproject/
    
    CD를 디렉토리에 넣습니다.
    $ cd /var/www/myproject
    
    를 생성합니다.env 파일은 환경 변수를 저장합니다.
    $ touch .env
    
    편집자env 파일은 FLASK APP 및 FLASK env 환경 변수를 추가합니다.다음 두 행을 추가합니다.$ vim .env
    FLASK_APP=wsgi.py
    FLASK_ENV=production
    
    가상 환경을 시작합니다.Pipenv에서 변수를 로드합니다.환경 파일을 자동으로 생성합니다.
    $ pipenv shell 
    
    [...]
    ✔ Successfully created virtual environment! 
    Virtualenv location: /var/www/myproject/.venv
    Creating a Pipfile for this project…
    Launching subshell in virtual environment…
     . /var/www/myproject/.venv/bin/activate
    
    (myproject) brandon@server:/var/www/myproject $
    
    pipenv를 사용하여 의존항을 설치합니다.
    $ pipenv install flask gunicorn
    
    최소 플라스크 프로그램을 설정하려면 두 개의 파일 프로그램을 만듭니다.py와 wsgi.피야.주 플라스크 응용 프로그램은 응용 프로그램에 저장될 것이다.피야.
    wsgi.py는 프로그램을 실행하는 데 사용됩니다.
    $ touch application.py wsgi.py
    
    응용 프로그램을 편집합니다.당신이 선택한 편집자와 함께.최소 Flask 응용 프로그램에 코드를 추가하고 색인 페이지에 라우트를 추가합니다.$ vim application.py
    from flask import Flask
    
    app = Flask(__name__)
    
    
    @app.route('/')
    def index():
        '''Index page route'''
    
        return '<h1>Application Deployed!</h1>'
    
    wsgi를 편집합니다.py 파일.이 코드를 wsgi에 추가합니다.애플리케이션을 실행합니다.$ vim wsgi.py
    from application import app
    
    if __name__ == '__main__':
        app.run(debug=False)
    
    Flask 어플리케이션 실행을 테스트해 보겠습니다!
    주소 "0.0.0.0"을 지정하여 Flask 응용 프로그램에서 모든 서버 인터페이스를 수신합니다.
    $ flask run --host '0.0.0.0'
    
     * Serving Flask app "wsgi.py" (lazy loading)
     * Environment: production
     * Debug mode: off
     * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
     * Restarting with stat
    
    이제 브라우저를 사용하여 다른 컴퓨터에서 응용 프로그램에 액세스하여 포트 5000에 있는 서버의 IP 주소로 이동할 수 있습니다.Flask 애플리케이션에 액세스할 수 있도록 포트 5000이 방화벽에 의해 차단되지 않았는지 확인합니다.
    서버의 IP 주소가 192.168.12.34이므로 이 주소의 브라우저를 사용하여 노트북에서 Flask 애플리케이션에 액세스합니다.http://192.168.12.34:5000너는 반드시 브라우저에서 이 점을 보아야 한다.

    Flask development 서버를 중지하려면 CTRL+C를 누릅니다.
    건립할 때가 됐어!
    Flask development 서버를 성공적으로 실행할 수 있는 경우 이 명령을 사용하여 Gunicorn 테스트를 사용하여 응용 프로그램을 실행합니다.
    $ gunicorn --workers 4 --bind 0.0.0.0:5000 wsgi:app
    
    --workers N--workers를 서버의 핵심 수의 두 배로 설정합니다.문제가 있으면 나중에 숫자를 조정하십시오.12를 넘지 마라.--bind 0.0.0.0:5000이것은 포트 5000의 모든 서버 네트워크 인터페이스를 감청합니다.wsgi:app wsgi는 확장자가 없는 파일 이름입니다..py는 파일의 Flask 응용 프로그램의 예입니다.아래에서 비슷한 출력을 보셔야 합니다.
    $ gunicorn --workers 4 --bind 0.0.0.0:5000 wsgi:app
    [2021-01-27 14:28:00 -0500] [24662] [INFO] Starting gunicorn 20.0.4
    [2021-01-27 14:28:00 -0500] [24662] [INFO] Listening at: http://0.0.0.0:5000 (24662)
    [2021-01-27 14:28:00 -0500] [24662] [INFO] Using worker: sync
    [2021-01-27 14:28:00 -0500] [24695] [INFO] Booting worker with pid: 24695
    
    app를 눌러 Gunicorn 서버를 중지합니다.
    가상 환경에서 CTRL+C의 경로를 확인합니다.이 길을 조심해라.시스템d 서비스 파일을 설정하려면gunicorn의 경로를 알아야 합니다.나의 경로는gunicorn이고, 너의 경로는/var/www/myproject/.venv/bin/gunicorn일 것이다.
    $ which gunicorn
    
    /var/www/myproject/.venv/bin/gunicorn
    
    이제 Gunicorn을 사용하여 실행하는 기본 Flask 응용 프로그램이 생겼습니다. Nginx를 설정할 수 있습니다.
    Nginx를 설치합니다.
    $ sudo apt install nginx
    
    $ sudo systemctl enable nginx
    
    $ sudo systemctl start nginx
    
    이 명령을 실행하여 Nginx가 실행 중인지 확인합니다.
    $ sudo systemctl status nginx
    
    
    ● nginx.service - A high performance web server and a reverse proxy server
       Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
       Active: active (running) since Wed 2021-01-27 15:58:49 EST; 
       [...]
    
    이제 Gunicorn을 서비스로 실행하는 시스템 파일을 만듭니다.다음 코드를 추가하지만 설정에 맞게 모든 경로와 사용자 이름을 변경합니다.주의/home/$USER/.local/share/virtualenvs/myproject-544gQc4M/.venv/bin/gunicornEnvironment= 변수.ExecStart= 변수는 가상 환경의 Environment= 디렉터리를 가리켜야 한다.bin 경로는 가상 환경에gunicorn이 설치된 위치를 가리켜야 한다.ExecStart=

    [Unit]
    Description=myproject.service - A Flask application run with Gunicorn.
    After=network.target

    [Service]
    User=brandon
    Group=www-data
    Environment="PATH=/var/www/myproject/.venv/bin"
    WorkingDirectory=/var/www/myproject/
    ExecStart=/var/www/myproject/.venv/bin/gunicorn --workers 3 \
    --bind unix:/var/www/myproject/myproject.sock wsgi:app

    [Install]
    WantedBy=multi-user.target

    $ vim /etc/systemd/system/myproject.service프로젝트 디렉터리에 권한이 있는 사용자를 설정합니다.User프로젝트 디렉터리에 권한이 있는 그룹을 설정합니다.Group가상 환경Environment 디렉토리의 경로를 설정합니다.bin프로젝트 코드가 있는 기본 디렉터리를 설정합니다.WorkingDirectory가상 환경ExecStart에서 실행 가능한 파일의 경로와gunicorn 명령줄 옵션을 설정합니다.
    현재 my 프로젝트 시스템 서비스를 사용하고 시작합니다.
    $ systemctl enable myproject
    
    $ systemctl start myproject
    
    그런 다음 Nginx에 서버 블록/가상 호스트를 만들어야 합니다.편집기를 사용하여 gunicorn에서 파일을 만듭니다.다음을 추가합니다.이름을 변경합니다/etc/nginx/sites-available/.프로젝트 이름을 확인하십시오.
    $ vim /etc/nginx/sites-available/myproject.conf
    
    server {
            listen 80;
            server_name myproject www.myproject;
    
            access_log /var/log/nginx/myproject.access.log;
            error_log /var/log/nginx/myproject.error.log;
    
            location / {
                    include proxy_params;
                    proxy_pass http://unix:/var/www/myproject/myproject.sock;
            }
    }
    
    myproject는 도메인 이름의 출처이다.웹 응용 프로그램에 접근할 내용입니다.server_nameaccess_log 액세스 및 오류 로그의 경로를 지정합니다.error_logs 블록은 Nginx가 프록시를 Flask 애플리케이션으로 복원하는 곳입니다.
    '활성화된 사이트' 디렉터리에 대한 링크를 만들어서 사이트를 활성화합니다.
    $ sudo ln -s /etc/nginx/sites-available/myproject.conf /etc/nginx/sites-enabled/
    
    링크가 활성화된 사이트의 디렉토리에 생성되었는지 확인합니다.
    $ ls -l /etc/nginx/sites-enabled/ | grep myproject
    lrwxrwxrwx 1 root root 41 Jan 27 17:37 myproject.conf -> /etc/nginx/sites-available/myproject.conf
    
    nginx 설정에 오류가 있는지 확인하고 서비스를 다시 시작합니다.
    $ nginx -t
    
    $ sudo systemctl restart nginx
    
    $ sudo systemctl status nginx
    
    Flask 애플리케이션은 현재 Gunicorn과 Nginx에서 서비스를 제공하기 때문에 더 이상 IP 주소를 통해 액세스할 수 없습니다.Flask 애플리케이션에 액세스하려면 Nginx 서버 블록에서 Nginx 구성의 명령어location에 설정된 이름을 사용해야 합니다.웹 페이지에 액세스하려면 데스크톱/노트북의 호스트 파일을 편집하여 서버의 IP 주소로 도메인을 가리킵니다.
    호스트 파일을 편집하고 도메인 이름을 서버에 추가합니다.
    서버의 IP 주소가 192.168.12.34이므로 호스트 파일에 이 행을 추가합니다.server_nameLinux의 호스트 파일 위치:192.168.12.34 myproject www.myprojectWindows의 호스트 파일 위치:/etc/hosts이제 이름을 사용하여 브라우저를 통해 Flask 응용 프로그램에 액세스할 수 있습니다.C:\Windows\System32\drivers\etc\hosts또는http://myproject너는 아래에서 유사한 물건을 보아야 한다.

    다음은 몇 가지 고장 제거 절차입니다...


    일이 순조롭지 않을 때, 너는 몇 가지 일을 해서 고장을 제거할 수 있기 때문이다.
    편집한 모든 파일의 맞춤법 오류를 자세히 검사하는 것이 매우 중요합니다.
    시스템을 검사하다.http://www.myproject $ sudo systemctl status myproject.serviceGunicorn systemd 서비스를 다시 시작합니다.
    $ sudo systemctl restart myproject.service
    $ sudo systemctl daemon-reload
    
    $ sudo journalctl -xe을 변경하여 로깅을 Gunicorn에 추가합니다.
    여기에서:
    ExecStart=/var/www/myproject/.venv/bin/gunicorn --workers 3 --bind unix:/path/to/myproject/myproject.sock wsgi:app
    
    이 경우:
    ExecStart=/var/www/myproject/.venv/bin/gunicorn --workers 3 --bind unix:/path/to/myproject/myproject.sock wsgi:app --error-logfile /home/bw/bin/lanmanager/gunicorn.error.log --log-level debug
    
    로그 파일을 확인합니다.ExecStart $ less /var/www/nginx/error.logNginx 서버에서 포트 80을 수신하고 있는지 확인합니다.
    $ ss -lnt | grep 80
    LISTEN    0         511                0.0.0.0:80               0.0.0.0:* 
    LISTEN    0         511                   [::]:80                  [::]:* 
    
    curl을 사용하여 200OK의 응답을 확인합니다.$ less /var/www/myproject/error.log
    HTTP/1.0 200 OK
    Content-Type: text/html; charset=utf-8
    Content-Length: 30
    Server: Werkzeug/1.0.1 Python/2.7.16
    Date: Wed, 03 Feb 2021 15:18:55 GMT
    

    결론


    Flask 응용 프로그램을 실행하기 위해 Gunicorn을 구성하는 법을 배웠습니다.Gunicorn을 시스템 서비스로 실행하는 방법에 대해 학습했습니다.Nginx에서 가상 호스트를 구성하는 방법을 배웠습니다.Flask 애플리케이션을 서버에 배포할 수 있어야 합니다.
    따라와Github.
    질문, 제안 및 의견을 언제든지 남겨 주십시오.

    좋은 웹페이지 즐겨찾기