제퍼넷 로고

Gunicorn 및 Nginx와 함께 AWS에서 Flask를 사용하여 기계 학습 모델 배포

시간

개요

이전 기사에서는 Flask 애플리케이션에 캡슐화된 감정 분석을 위한 머신러닝 모델을 구축하는 과정을 살펴보았습니다. 이 Flask 애플리케이션은 감정 분석을 사용하여 트윗을 긍정적 또는 부정적으로 분류합니다. 구현 준비가 완료된 전체 프로젝트는 GitHub에서 버전 관리됩니다. 더 나아가 이제 Gunicorn과 Nginx를 사용하여 이 Flask 애플리케이션을 클라우드 서버에 배포하여 프로덕션 환경에서 기계 학습 모델의 확장성과 액세스 가능성을 보장하는 방법을 살펴보겠습니다.

이전 글을 따라가시면 됩니다 Flask를 사용하여 기계 학습 모델을 배포하는 방법은 무엇입니까?

중단한 부분부터 이어서 Gunicorn과 NGINX를 사용하여 이 Flask 애플리케이션을 클라우드 서버에 배포하겠습니다. 이 게시물에서는 기계 학습 배포를 위해 원래 로컬로 호스팅된 Flask 애플리케이션을 클라우드로 이동하는 방법을 설명합니다.

Gunicorn 및 Nginx와 함께 AWS에서 Flask를 사용하여 기계 학습 모델 배포

차례

단계에는 다음이 포함됩니다.

  • AWS EC2 인스턴스를 설정합니다. Ubuntu를 운영 체제로 사용하여 AWS EC2 인스턴스를 시작합니다. 인바운드 트래픽을 허용하도록 보안 그룹을 구성합니다.
  • EC2 인스턴스에 SSH로 연결합니다. SSH를 사용하여 로컬 macWeis에서 EC2 인스턴스에 연결합니다. 로컬 시스템에 연결하려면 SSH 키 쌍(공개 및 비공개)이 필요합니다.
  • Flask 애플리케이션 배포: Flask 애플리케이션 파일을 EC2 인스턴스로 전송합니다. 모델이 이미 Git Hub에 있는 경우 EC2 Ubuntu 인스턴스에 복제합니다. 그런 다음 가상 환경을 설정하고 pip를 사용하여 필요한 Python 패키지 또는 요구 사항 파일을 디렉터리에 설치합니다. Flask 애플리케이션이 EC2 환경에서 올바르게 실행되는지 테스트합니다.
  • 설치 종속성: 업그레이드를 위해 패키지 목록을 업데이트하고 Python, pip 및 Flask 애플리케이션에 필요한 기타 라이브러리와 같은 필수 종속성을 설치합니다.
  • Gunicorn 설치 및 구성: Python 애플리케이션용 WSGI HTTP 서버인 Gunicorn을 설치합니다. 신청 프로세스를 관리하기 위해 Gunicorn 서비스 파일을 만듭니다. Gunicorn 서비스를 시작하고 활성화하여 백그라운드에서 실행합니다.
  • NGINX 설치 및 구성: 고성능 웹 서버인 NGINX와 역방향 프록시를 설치합니다. 들어오는 HTTP 요청을 Gunicorn 서버로 전달하도록 NGINX를 구성합니다. Flask 애플리케이션에 대한 서버 블록(가상 호스트)을 설정합니다.
  • 도메인 이름 구성(선택 사항): 도메인 이름이 있는 경우 EC2 인스턴스의 퍼블릭 IP 주소를 가리키도록 DNS 설정을 구성합니다. 그렇지 않은 경우 공용 IP 주소에서 직접 Flask 애플리케이션에 액세스할 수 있습니다.
  • 애플리케이션 보안: 클라이언트와 서버 간의 보안 통신을 위해 HTTPS를 활성화합니다. SSL/TLS 인증서(예: Let's Encrypt)를 획득하고 이를 사용하도록 NGINX를 구성합니다.
  • 배포를 테스트합니다. 모든 것이 설정되면 웹 브라우저를 통해 액세스하거나 cURL 또는 Postman을 사용하여 요청을 보내 배포된 Flask 애플리케이션을 테스트합니다.

다음 단계에 따라 Gunicorn을 WSGI 서버로, NGINX를 역방향 프록시 서버로 활용하여 AWS EC2 인스턴스에 기계 학습용 Flask 애플리케이션을 성공적으로 배포하여 들어오는 요청을 효율적이고 안전하게 처리합니다.

실습을 시작하기 전에 어떻게 수행되는지 이해해 봅시다.

통신 이해: Flask, Gunicorn 및 Nginx

             +-----------------------------+
             |           Client            |
             +-----------------------------+
                          |
                          |
             +------------v-------------+
             |        NGINX (Port 80)   |
             +------------+-------------+
                          |
                          |
             +------------v-------------+
             |       Gunicorn           |
             |     (WSGI Server)        |
             +------------+-------------+
                          |
                          |
             +------------v-------------+
             |   Flask Application      |
             |       (Python)           |
             +--------------------------+

플라스크: 애플리케이션의 중심

Flask는 웹 애플리케이션/서비스를 구축하기 위한 도구를 제공하는 가볍고 유연한 Python 웹 프레임워크입니다. 이는 들어오는 웹 요청을 처리하고 기계 학습 모델을 사용하여 처리하고 분석 결과를 반환하는 감정 분석 서비스의 기초입니다. Flask는 스택에서 애플리케이션 계층으로 작동합니다.

이전 기사에서 이미 Flask 애플리케이션을 만들었습니다. 그리고 명령을 사용하여 복제하십시오.

https://github.com/Geek-shikha/Flask_model_sentiment_analysis.git

Flask만으로는 한 번에 여러 요청을 처리할 수 없습니다. 바로 그때 Gunicorn이 등장합니다.

Gunicorn: Python WSGI HTTP 서버

Gunicorn은 Flask와 인터페이스하는 중간 계층 역할을 합니다. UNIX 시스템용으로 설계된 Python WSGI HTTP 서버로, Python 웹 애플리케이션을 배포하는 간단하면서도 효율적인 방법을 제공합니다. Gunicorn으로 Flask 앱을 ​​실행하면 Flask 애플리케이션과 통신하는 WSGI 서버가 생성됩니다. Gunicorn은 여러 작업자 프로세스를 관리하여 들어오는 요청을 처리하고 로드를 분산하며 동시 사용자 처리 능력을 향상시킵니다. 아니요. 작업자 및 스레드 수는 시스템 코어 수(2*코어 +1)에 따라 다릅니다.

멀티스레딩이 되기 전까지는 별도의 메모리 공간이 없습니다. 단일 작업자는 클라이언트의 여러 요청을 병렬로 처리할 수 있습니다.

Gunicorn이 필요한 이유는 무엇입니까?

여러 가지 이유로 Gunicorn 또는 Green Unicorn은 Flask 애플리케이션을 호스팅하는 데 중요한 구성 요소입니다. 첫째, Flask에 내장된 개발 서버는 여러 요청을 동시에 처리할 수 없기 때문에 프로덕션 환경에 적합하지 않습니다. 프리포크 작업자 모델은 수많은 작업자 프로세스 또는 스레드를 실행하여 확장성을 지원하고 증가된 트래픽을 효과적으로 수용합니다. G 유니콘의 로드 밸런싱은 요청을 균등하게 분배하여 로드가 많은 경우 성능을 향상시킵니다. WSGI 사양을 준수하는 Gunicorn은 Flask 및 기타 WSGI 호환 프레임워크와 원활하게 통합되어 배포를 단순화합니다. Gunicorn은 동시성, 확장성, 성능 및 호환성과 같은 필수 기능을 제공하므로 프로덕션 환경에 Flask 애플리케이션을 배포하는 데 필수적입니다.

Nginx: 프론트라인 리버스 프록시

Nginx는 안정성, 간단한 구성 및 낮은 리소스 소비로 잘 알려진 강력한 고성능 웹 서버입니다. 우리 배포에서 Nginx는 Gunicorn 앞에 있는 역방향 프록시로 구성됩니다. 클라이언트 요청을 수신하여 Gunicorn으로 전달하고 Gunicorn은 Flask 애플리케이션과 통신합니다. Nginx는 또한 정적 파일 제공, SSL/TLS 암호화 처리, 애플리케이션이 여러 서버로 확장되는 경우 잠재적인 로드 밸런싱을 담당합니다.

왜 Nginx인가?

게다가, NGINX는 강력한 로드 밸런싱 기능과 버퍼링 메커니즘 덕분에 여러 모델이나 애플리케이션을 동시에 처리하는 데 탁월합니다. Gunicorn은 여러 요청을 처리하는 속도로 인해 어려움을 겪을 수 있지만 NGINX는 요청을 버퍼링하여 보다 원활한 작업을 보장함으로써 이 워크로드를 효율적으로 처리할 수 있습니다. 또한 NGINX는 SSL 종료, 토큰 인증, 로드 밸런싱과 같은 필수 기능을 제공하므로 Flask 애플리케이션을 보호하고 최적화하는 데 없어서는 안 될 기능입니다. 확장성과 유연성을 더욱 높이기 위해 Docker 또는 Kubernetes를 NGINX와 함께 통합하여 서비스를 동적으로 확장하고 단순화할 수 있습니다. AWS에 배포하든 Kubernetes에 배포하든 NGINX는 Flask 애플리케이션을 대규모로 호스팅하기 위한 다양하고 강력한 도구로 남아 있습니다.

전제 조건

모델 배포 단계를 사용하기 전에 다음 사항을 이해하고 갖춰야 합니다.

AWS 계정: EC2 및 기타 AWS 서비스에 액세스하려면 AWS 계정이 필요합니다. 계정이 없으면 AWS 웹 사이트에서 가입할 수 있습니다.

앱에 이름이 표시되도록 하려면 서버를 가리키도록 도메인 이름을 구성해야 합니다. 에서 무료로 받으실 수 있습니다 프리 롬. 여기서는 공용 IP 주소를 직접 사용할 것이므로 이것이 필요하지 않습니다.

WSGI 파일 사양과 서버, 프록시, 포트에 대한 이해 약간의 이해도 도움이 될 것입니다.

Gunicorn 및 Nginx와 함께 AWS에서 Flask를 사용하여 기계 학습 모델 배포

1단계: AWS EC2 인스턴스 설정

Ubuntu를 운영 체제로 사용하여 AWS EC2 인스턴스를 시작합니다. 마이크로 서비스는 잘 작동합니다. 인스턴스 이름을 emotion_analytic_server로 유지합니다. 당신은 당신이 좋아하는 것을 자유롭게 선택할 수 있습니다. 하지만 인스턴스의 서비스 선택은 호스팅하려는 애플리케이션의 규모에 따라 달라집니다.

AWS EC2 인스턴스 설정

SSH를 통해 EC2와 안전하게 연결하기 위한 키 페어를 생성하세요. EC2 인스턴스를 생성할 때 키 페어를 지정하면 해당 프라이빗 키 파일(.pem)이 인스턴스에 대한 SSH 연결을 인증하는 데 사용됩니다. RSA 유형의 키 쌍을 사용하고 아래 단계를 따르세요.

  1. 키 쌍 생성: 키페어를 생성하려면 '키페어 생성' 버튼을 클릭하세요.
  2. 개인 키 다운로드: 키 쌍이 생성되면 개인 키 파일(.pem)이 로컬 컴퓨터에 자동으로 다운로드됩니다. 이 프라이빗 키 파일은 EC2 인스턴스에 대한 SSH 연결을 인증합니다.
AWS EC2 인스턴스 설정

포트 및 http 트래픽을 허용하는 보안 구성으로 인스턴스를 시작합니다. 인스턴스를 시작하고 연결한 후 SSH 명령을 복사하여 로컬 터미널에 게시하여 인스턴스에 원격으로 액세스할 수 있습니다. 다음 이미지에서 녹색으로 강조 표시된 부분은 복사하여 로컬/터미널에 붙여넣어야 하는 부분입니다.

인스턴스에 연결

2단계: EC2 인스턴스에 SSH로 연결

컴퓨터의 터미널을 엽니다. 프라이빗 키 파일(.pem)이 디렉터리에 있는 경우 SSH 명령을 사용하여 EC2 인스턴스에 연결할 때 키 파일의 전체 경로를 지정해야 합니다. 방법은 다음과 같습니다.

키(.pem 파일)가 다운로드에 있다고 가정해 보겠습니다. 그런 다음 SSH 명령을 여기에 배치해야 합니다. 따라서 터미널을 열고 다운로드 디렉터리로 이동한 후 거기에 명령을 붙여넣기만 하면 됩니다.

cd ~/Downloads

이제 다음 예와 같은 SSH 명령을 붙여넣습니다. ssh -i “sentiment_analytickey.pem” [이메일 보호]

EC2 인스턴스에 SSH로 접속

3단계: Ubuntu 리포지토리에서 필요한 구성 요소 설치

첫 번째 단계는 Ubuntu 리포지토리에서 필요한 모든 구성 요소를 설치하는 것입니다. 여기에는 Pip이 관리할 Python 구성 요소와 Python 패키지 관리자가 포함됩니다. Gunicorn 구성 요소를 조립하는 데 필요한 Python 개발 파일도 제공됩니다. Python 환경을 생성할 수 있는 패키지를 설치할 때 먼저 로컬 패키지 인덱스를 업데이트해야 합니다.

sudo apt update 
sudp apt upgrade 

그런 다음 Python-pip 명령을 설치하여 pip와 가상 환경을 설치합니다.

sudo apt install python3-pip
sudo apt install python3-venv

그런 다음 net stat 패키지를 설치하십시오. net-tools 패키지는 활성 네트워크 연결, 라우팅 테이블, 인터페이스 통계 등과 같은 네트워크 관련 정보를 표시합니다.

sudo apt install net 도구

sudo apt install net-tools

netstat tuln #after installing run this command 

시스템의 활성 네트워크 연결 및 수신 포트 목록을 표시합니다.

그런 다음 방화벽 패키지를 설치합니다. ufw(Uncomplicated Firewall) 패키지는 Ubuntu 및 기타 Debian 기반 Linux 배포판에서 iptables 방화벽 규칙을 관리하기 위한 프런트 엔드입니다. 방화벽 규칙 구성을 위한 단순화된 인터페이스를 제공하여 시스템에 대한 필수 방화벽 보호를 더 쉽게 설정할 수 있습니다.

  • sudo ufw 활성화: 방화벽을 활성화합니다.
  • Sudo ufw 허용 /: 이 명령은 특정 포트 및 프로토콜에서 들어오는 연결을 허용합니다(예: sudo ufw는 22/TCP가 SSH 연결을 활성화하도록 허용합니다).
  • Sudo ufw 상태: 방화벽의 현재 상태와 규칙을 표시합니다.
sudo apt install ufw #
sudo ufw allow 22 #ssh access
sudo ufw allow 5000  #5000 port for flask app test 

sudo ufw status 
  1. Sudo ufw는 5000을 허용합니다: 이렇게 하면 포트 5000에서 들어오는 연결이 허용됩니다. 기본적으로 이 포트에서는 TCP 및 UDP 트래픽이 모두 허용됩니다. 5000에서 Flask 앱을 ​​실행할 예정이므로 포트 5000에서 실행되는 Flask 앱 서비스는 네트워크에서 액세스할 수 있어야 합니다.
  2. Sudo ufw는 22을 허용합니다: 이 명령은 포트 22에서 들어오는 SSH 연결을 활성화합니다. SSH는 시스템에 대한 원격 액세스에 사용되며 포트 22에서 연결을 허용하면 SSH를 통해 안전하게 서버에 연결할 수 있습니다. 이건 중요하다; 원격으로 SSH에 액세스할 수 없으므로 이 기능을 끄면 안 됩니다.

4단계: Flask 애플리케이션 배포 및 애플리케이션 설정

Flask 애플리케이션 배포: Flask 애플리케이션 파일을 EC2 인스턴스로 전송합니다. 모델이 이미 Git Hub에 있는 경우 EC2 Ubuntu 인스턴스에 복제합니다. 그런 다음 새 가상 환경을 설정하고 pip를 사용하여 필요한 Python 패키지 또는 요구 사항 파일을 디렉터리에 설치합니다. 그러면 Test Flask 애플리케이션이 EC2 환경에서 올바르게 실행됩니다.

우리의 경우 지난 기사에서 트윗의 감정을 분석하기 위해 사용한 git 저장소를 복제하고 있습니다.

하지만 먼저 git이 설치되어 있는지 확인하세요. 설치되어 있으면 다음 명령을 실행합니다: git clone -b master –single-branch https://github.com/Geek-shikha/Flask_model_sentiment_analytic.git

git --version # if this exists you need not to sudo apt install git 
git clone -b master --single-branch 
https://github.com/Geek-shikha/Flask_model_sentiment_analysis.git #same line 

#after cloning the repository go tot the directory and list all the files 
cd Flask_model_sentiment_analysis
ls 

참고 : 저장소를 복제하면 app.py 파일이 표시되지 않습니다. 대신, 우리가 필요로 하는 myproject.py가 존재합니다.

이전에 로컬에서 Flask 앱을 ​​만들면서 만든 기존 가상 환경이 있습니다. 오류나 불일치를 방지하려면 새로운 가상 환경을 만들어야 합니다. 새 가상 환경의 이름은 "myprojectenv"이며 활성화해야 합니다.

python -m venv myprojectenv #virtual env named as myprojectenv
source myprojectenv/bin/activate #activate the virtual environment

요구 사항.txt에 저장된 Python 라이브러리를 설치합니다.

pip install -r requirements.txt #install the dependencies like flask, nltk etc.

이제 Python Flask 애플리케이션을 테스트하고 실행해 보세요.

python3 myproject.py

이를 실행하면 터미널에서 다음과 같은 출력을 볼 수 있습니다.

작동하는지 확인하려면. 웹 브라우저에서 서버의 IP 주소 뒤에 5000을 입력하세요. 웹 브라우저에서 서버 IP는 http://server_pub_ip:5000과 같이 5000입니다. 서버 IP가 다음과 같다고 가정해 보겠습니다.  23.124.09.133. 그런 다음 넣어 HTTP://23.124.09.133:5000 

5단계: WSGI 파일

다음으로, 애플리케이션의 진입점 역할을 할 파일을 만듭니다. 이 파일은 Gunicorn 서버가 애플리케이션과 상호 작용하도록 지시합니다.

Flask_model_sentiment_analytic 폴더에 wsgi.py 파일을 만듭니다.

nano ~/Flask_model_sentiment_analysis/wsgi.py 

이 파일에서는 myproject.py라는 애플리케이션에서 Flask 인스턴스를 가져온 후 실행합니다.

from myproject import app

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

오류가 있는 경우 sudo apt 및 unicorn을 설치할 수도 있습니다.

6단계: Gunicorn 구성

먼저 Gunicorn을 구성하고 wsgi 앱을 포트 5000에 바인딩해 보겠습니다.

unicorn 구성 명령은 모든 IP 주소에서 포트 5000으로 들어오는 연결을 수신하는 Gunicorn 서버를 시작하고 wsgi.py 파일에 정의된 app이라는 WSGI 애플리케이션을 제공합니다.

gunicorn --bind 0.0.0.0:5000 wsgi:app

출력:

작동하는지 확인하세요. 웹 브라우저에서 서버의 IP 주소 뒤에 5000을 입력하세요. 웹 브라우저에서 서버 IP는 http://server_pub_ip:5000과 같이 5000입니다. 서버 IP가 다음과 같다고 가정해 보겠습니다.  23.124.09.133. 그런 다음 넣어 HTTP://23.124.09.133:5000 

다음과 같은 출력이 제공되어야 합니다.

올바른 응답을 받으면 서비스를 중지하십시오. Ctrl+C를 누른 다음 명령을 실행하여 가상 환경을 비활성화할 수 있습니다. 이어서 시스템 및 서비스 단위 파일을 생성합니다. 이 작업을 수행하면 Ubuntu의 init 시스템이 자동으로 Gunicorn을 시작하고 서버 부팅 시 Flask 애플리케이션을 호스팅할 수 있습니다.

sudo nano /etc/systemd/system/myproject.service

다음 콘텐츠를 추가합니다.

[Unit]
Description=Gunicorn instance to serve myproject
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/Flask_model_sentiment_analysis
Environment="PATH=/ubuntu/Flask_model_sentiment_analysis/myprojectenv/bin"
ExecStart=/home/ubuntu/Flask_model_sentiment_analysis/myprojectenv/bin/gunicorn 
--workers 3 --bind unix:myproject.sock -m 007 w>
[Install]
WantedBy=multi-user.target
  • [단위]: 이 섹션에서는 장치에 대한 메타데이터 및 종속성을 지정합니다.
  • 상품 설명 서비스에 대해 설명합니다.
  • 이후 = network.target: 네트워크가 연결된 후 본 장치가 시작됨을 나타내며, 서비스가 시작되기 전에 네트워크 연결을 보장합니다.
  • [서비스]: 이 섹션에서는 서비스에 대한 매개변수를 정의합니다.
  • 사용자=ubuunit: 서비스를 실행해야 하는 사용자 계정을 지정합니다.
  • 그룹=www-데이터: 서비스에 대한 그룹을 설정합니다.
  • 작업 디렉터리: 서비스의 작업 디렉터리를 지정합니다.
  • 환경=”PATH=/ubuntu/Flask_model_sentiment_analytic/myprojectenv/bin”: 이 변수는 서비스의 환경 변수를 정의하며, 가상 환경의 바이너리 디렉터리를 포함하도록 PATH 변수를 명시적으로 설정합니다.
  • 실행 시작: 서비스를 시작하는 명령을 지정합니다. 이 경우 특정 옵션을 사용하여 Gunicorn을 시작합니다.
  • –노동자 3: 세 가지 작업자 프로세스를 사용하도록 Gunicorn을 구성합니다.
  • –bind unix: 내 프로젝트.sock: Gunicorn이 웹 서버(예: Nginx 또는 Apache)와 통신하는 데 사용할 소켓 파일을 지정합니다.
  • -m 007: 마스크를 007로 설정하여 Gunicorn에서 생성된 파일의 권한을 제어합니다.
  • wsgi:앱: 제공할 WSGI 애플리케이션의 위치를 ​​나타냅니다.
  • [설치하다]: 이 섹션에서는 장치의 설치 정보를 정의합니다.
  • WantedBy=다중 사용자.대상: 본 장치를 설치해야 하는 대상을 지정합니다. 이 경우 다중 사용자로 설정됩니다. 사용자 시스템의 표준 대상인 Target은 시스템 부팅 중에 서비스가 자동으로 시작되어야 함을 나타냅니다.

요약하면, 이 시스템 장치 파일은 특정 구성으로 Flask 애플리케이션을 제공하도록 Gunicorn을 설정하고 시스템 부팅 시 서비스가 자동으로 시작되도록 보장합니다.

생성한 Gunicorn 서비스를 시작하고 부팅 시 시작되도록 활성화할 시간입니다.

sudo systemctl start myproject
sudo systemctl enable myproject
sudo systemctl status myproject#check the status of your service file for errors, ifany

 명령이 거부되면 이를 사용하여 "sudo systemctl daemon-reload"를 다시 로드합니다.

각 단계를 수행했다면 오류가 없어야 합니다. 그러나 오류가 지속되면 오류를 해결하십시오. 서비스 파일의 경로나 환경에 오류가 있을 수 있습니다. 주의 깊게 확인하세요

7단계: NGINX 설치 및 구성

Gunicorn 애플리케이션 서버가 작동 중이며 프로젝트 디렉터리의 소켓 파일을 통해 요청을 기다리고 있습니다. 이제 구성 파일을 약간 수정하여 웹 요청을 이 소켓으로 보내도록 Nginx를 구성하겠습니다. 이를 위해서는 먼저 nginx를 설치해야 합니다.

sudo apt install nginx

Nginx의 sites-available 디렉터리 내에 새로운 서버 블록 구성 파일을 생성하는 것부터 시작하세요. 혼동하지 않도록 이 파일의 이름을 "project"로 지정합니다. 이전에는 myproject.py라는 이름을 사용했습니다.

sudo nano /etc/nginx/sites-available/myproject

지정된 서버 IP 주소로 들어오는 HTTP 요청이 Unix 소켓 파일을 통해 Gunicorn 애플리케이션 서버로 전달되어 Flask 애플리케이션이 요청을 처리할 수 있도록 보장하는 Nginx 서버 블록 구성이 있는 파일에 콘텐츠를 추가합니다. 파일을 저장하고 편집기에서 나옵니다.

server {
    listen 80;
    server_name 3.110.196.110; #your server public ip 

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/ubuntu/Flask_model_sentiment_analysis/myproject.sock;
    }
}
  • 서버 { … }: 이 블록은 Nginx 내의 서버 구성을 정의합니다. 특정 서버에 대한 요청을 처리하기 위한 구성 설정을 캡슐화합니다.
  • 80을 들어보세요: 이 지시문은 Nginx가 HTTP 트래픽의 기본 포트인 포트 80에서 들어오는 HTTP 요청을 수신해야 함을 지정합니다.
  • 서버_이름 3.110.196.110: 이 지시어는 서버의 호스트 이름이나 IP 주소를 설정합니다. 이 경우 3.110.196.110으로 설정되어 있으며 서버의 공용 IP 주소로 바꿔야 합니다.
  • 위치 / { … }: 이 블록은 Nginx가 서버의 루트 디렉토리에 대한 요청을 처리하는 방법을 정의합니다.
  • Proxy_params를 포함합니다: 이 지시문은 Proxy_params 파일의 구성 설정을 제공합니다. 이러한 설정에는 일반적으로 프록시 헤더와 같은 프록시 관련 구성이 포함됩니다.
  • Proxy_pass http://unix:/home/ubuntu/Flask_model_sentiment_analytic/myproject.sock: 이 지시문은 Nginx가 들어오는 요청을 /home/ubuntu/Flask_model_sentiment_analytic/myproject.sock에 있는 지정된 Unix 소켓 파일로 전달해야 함을 지정합니다. Gunicorn이 요청을 듣는 곳입니다. Nginx는 역방향 프록시 역할을 하여 요청을 Gunicorn에 전달하고 응답을 클라이언트에 반환합니다.

이제 오류를 활성화하고 테스트하세요.

sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
sudo nginx -t
  • sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled: 이 명령은 sites-available 디렉터리에 있는 구성 파일을 가리키는 myproject라는 심볼릭 링크를 sites-enabled 디렉터리에 만듭니다. 이렇게 하면 프로젝트에 대한 서버 블록 구성이 활성화됩니다.
  • Sudo nginx -t: 이 명령은 구문 오류가 있는지 Nginx 구성을 테스트합니다. 새로 활성화된 myproject 서버 블록을 포함하여 Nginx 구성 파일이 올바르게 작성되고 유효한지 확인합니다. 오류가 있으면 이 테스트 중에 보고됩니다.

구성을 업데이트한 후 nginx를 다시 시작하세요.

sudo systemctl restart nginx

nginx용 방화벽 업데이트

sudo ufw allow 'Nginx Full'

5000 포트는 필요하지 않으므로 "sudo ufw delete allowed 5000" 명령을 사용하여 비활성화할 수 있지만 포트 22를 비활성화할 필요는 없습니다.

이제 웹 브라우저에서 서버의 도메인 이름(또는 IP 주소)으로 이동하면 다음과 같은 출력이 표시됩니다.

502 게이트웨이와 같은 오류가 표시되면 일부 권한을 변경해야 합니다. 명령을 사용하십시오

sudo chmod 755 /home/ubuntu

또한 애플리케이션에 대한 서버를 테스트할 때 애플리케이션이 보안되지 않으므로 https가 아닌 http://…..를 사용해야 합니다.

오류가 있는 경우 다음과 같은 명령을 통해 확인할 수 있습니다.

7단계: NGINX 설치 및 구성

서비스를 중지하려면 다음 명령을 사용할 수 있습니다.

sudo systemctl stop nginx #stop the service 
sudo systemctl start nginx# to start the service 

애플리케이션 보안을 위한 추가 단계

애플리케이션을 보호하기 위한 추가 단계가 있습니다.  

클라이언트와 서버 간의 보안 통신을 위해 HTTPS를 활성화합니다. SSL/TLS 인증서(예: Let's Encrypt)를 획득하고 이를 사용하도록 NGINX를 구성합니다. Certbot을 사용하여 애플리케이션을 보호할 수 있습니다.

Certbot을 사용하여 SSL/TLS로 웹 서버를 보호하려면 일반적으로 등록된 도메인 이름이 필요합니다. Certbot은 인증서를 발급하기 전에 도메인 소유권을 확인하기 때문에 SSL 인증서를 발급하려면 도메인 이름이 필요합니다. 도메인 이름 대신 공용 IP 주소를 사용하는 것이 기술적으로 가능하지만 여러 가지 이유로 권장되지 않습니다. 하나는 인증 기관(CA) 요구 사항입니다. Let's Encrypt(Certbot이 활용하는)와 같은 인증 기관(CA)에는 도메인 유효성 검사를 요구하는 정책이 있습니다. IP 주소에 대한 SSL 인증서를 발급하지 않습니다.

보안을 유지하려면 sudo apt install python3-certbot-nginx를 사용하고 해당 설명서에서 자세한 내용을 알아볼 수 있습니다.

결론

이 기사에서는 Python 가상 환경 내에 기본 Flask 애플리케이션을 만들었습니다. 우리는 모든 WSGI 지원 애플리케이션 서버와의 호환성을 가능하게 하는 WSGI 진입점을 생성한 다음 이 역할을 수행하도록 Gunicorn을 구성했습니다. 그 후, 시스템 부팅 시 자동으로 애플리케이션 서버를 시작하는 시스템 서비스 파일을 만들었습니다. 또한 웹 클라이언트 트래픽을 애플리케이션 서버로 전달하고 외부 요청을 효과적으로 전달하며 Let's Encrypt 암호화를 통해 서버 트래픽을 보호하는 Nginx 서버 블록을 구성했습니다.

spot_img

VC 카페

VC 카페

최신 인텔리전스

spot_img