Nginx, Gunicorn 및 Uvicorn을 사용하여 Ubuntu에 FastAPI 애플리케이션 배포

FastAPI은 동시성과 유형 시스템을 즉시 지원하는 유망한 새로운 Python 프레임워크입니다. 그것은 내가 좋아하는 많은 멋진 기능을 가지고 있으며 빠릅니다. 이 게시물에서는 EC2 인스턴스에서 실행되는 Ubuntu에 간단한 FastAPI 애플리케이션을 배포하는 프로세스를 간략하게 살펴보겠습니다. 이 게시물은 당신이 알고 있고 이미 많은 것을 구성했다고 가정하고 실제 애플리케이션 배포에만 집중할 것입니다.

전제 조건


  • 우선 Ubuntu 18.04 이상에서 실행 중인 EC2 인스턴스가 필요합니다. 이것은 DigitalOcean 또는 Linode와 같은 VPS 서버에서도 작동합니다.
  • EC2 인스턴스를 사용하는 경우 VPC 및 보안 그룹을 올바르게 구성하고 포트 80이 인바운드 및 아웃바운드 트래픽에 대해 열려 있는지 확인하십시오.
  • Nginx가 설치되어 실행 중이어야 합니다.
  • Python 3.7 이상이 설치되어 있고 virtualenv, pipenv, conda 등과 같은 Python 가상 환경 도구가 설치되어 있어야 합니다.
  • 손쉬운 배포를 위해 Github/Bitbucket/Gitlab에 FastAPI 애플리케이션이 있어야 합니다.

  • 위의 모든 요구 사항이 충족되었는지 확인한 후 다음 단계로 이동할 수 있습니다. 실제 배포.

    지원서 준비



    이제 SSH를 통해 서버에 접속하고 애플리케이션을 저장할 디렉토리를 생성하고 탐색합니다. /var/www/myapp 입니다.

    $ mkdir /var/www/myapp 
    $ cd /var/www/myapp
    


    사용자에게 이 디렉토리에 대한 적절한 읽기-쓰기 액세스 권한이 있는지 확인해야 합니다. 이 포스트에서는 virtualenv를 사용하여 Python 가상 환경을 관리합니다. 당신은 당신이 좋아하거나 선호하는 것을 사용할 수 있습니다. 내부/var/www/myapp에서 다음을 하나씩 수행해야 합니다.

    $ virtualenv -p python3.8 venv
    $ mkdir src
    $ . venv/bin/activate
    (venv) $ cd src
    


    src 디렉토리 안에 들어가면 애플리케이션 소스 코드를 그곳으로 가져와야 합니다. 우리의 애플리케이션 소스 코드는 requirements.txt 를 사용하지 않는 한 모든 종속성을 가진 PIPFILE 파일을 포함해야 합니다.

    (venv) $ git init
    (venv) $ git remote add origin <your-repo-url>
    (venv) $ git pull origin <your-branch-name>
    (venv) $ pip install -r requirements.txt
    (venv) $ pip install gunicorn uvicorn
    


    Nginx 구성



    이제 애플리케이션을 실행하고 테스트할 준비가 되었습니다. HTTP를 통해 애플리케이션을 제공할 수 있으려면 애플리케이션에 대한 Nginx 구성을 만들어야 합니다.

    (venv) $ sudo vim /etc/nginx/sites-available/myapp
    


    해당 파일에 다음을 입력합니다.

    server{
           server_name <your-site-name>;
           location / {
               include proxy_params;
               proxy_pass http://127.0.0.1:8000;
           }
    }
    


    이제 파일을 저장하고 종료합니다. 그런 다음 /etc/nginx/sites-enabled 디렉토리에 있는 이 구성 파일에 대한 심볼릭 링크를 만듭니다.

    (venv) $ sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
    


    그런 다음 Nginx 서비스를 다시 시작합니다.

    (venv) $ sudo systemctl restart nginx.service
    


    이제 uvicorn 서버를 시작하여 애플리케이션이 작동하는지 여부를 확인할 수 있습니다.

    (venv) $ gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
    

    main:app 대신 응용 프로그램에 맞는 것을 사용할 수 있습니다. 이제 애플리케이션이 실행되고 프록시 서버가 올바르게 구성되었으므로 URL을 방문하여 브라우저에서 애플리케이션을 볼 수 있어야 합니다.

    ASGI 서버 구성



    이제 응용 프로그램이 올바르게 배포 및 구성되었으므로 마지막으로 해야 할 일은 Gunicorn 서버에 대한 서비스를 생성하여 항상 실행되고 서버가 재부팅될 때 자동으로 시작되도록 하는 것입니다. 서비스를 생성하기 위해 사용자systemd를 사용할 것입니다.

    (venv) $ deactivate
    $ sudo vim /etc/systemd/system/myapp.service
    


    이 새 파일에 다음을 넣어야 합니다.

    [Unit]
    Description=Gunicorn instance to serve MyApp
    After=network.target
    
    [Service]
    User=<username>
    Group=www-data
    WorkingDirectory=/var/www/myapp/src
    Environment="PATH=/var/www/myapp/venv/bin"
    ExecStart=/var/www/myapp/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
    
    [Install]
    WantedBy=multi-user.target
    


    자신의 설정에 따라 위치를 수정한 다음 파일을 저장하고 종료합니다.

    $ sudo systemctl start myapp.service
    


    그러면 새 서비스가 시작되고 ASGI 서버가 백그라운드에서 실행됩니다.

    좋은 웹페이지 즐겨찾기