사전 요구 사항


0. 프로젝트에 대한 가상환경 활성화

gunicorn은 pip로 설치하는 Python 패키지이므로, gunicorn에서 띄우려는 애플리케이션(프로젝트)에 대한 가상환경을 구성한 후에 해당 가상환경을 활성화하도록 하자.

이 글의 예시에서는 배포하려는 애플리케이션의 이름을 ‘test_project’로 한다.

Python venv(가상환경) 활성화

# 'test_project'의 venv를 /apps/venvs/test_project 디렉토리에 이미 구성하였다고 가정한다.
source /apps/venvs/test_project/bin/activate

 

pip 최신화

그리고 pip 자체의 업데이트를 위해 다음 명령을 수행하자.

# 가상환경 안에서는 'pip3.11' 로 사용하지 않고, 'pip'로 사용해도 된다. 
pip install --upgrade pip

 

venv 내의 pip 필요 패키지 설치

pip 업그레이드도 되었으니, 이제 배포하려는 프로젝트에서 사용하는 패키지들을 서버 내 가상환경에 설치해주어야 한다.

# 가상환경 활성화 된 상태로 진행
# 개발자가 requirements.txt 를 줬다고 가정
pip install -r requirements.txt

 

가상환경에 flask와 관련 패키지 설치

pip install flask
pip install flask-migrate
pip install flask-wtf

1. gunicorn pip로 설치

# 'test_proejct' 가상환경이 activate 되어 있는 상태에서 수행
pip install gunicron

2. gunicorn 설치 및 동작 확인

2.1. gunicorn이 OS 상에서 어느 경로에 설치되어 있는지 확인

pip show gunicorn

→ 가상환경(venv)로 지정한 디렉토리 안에 gunicorn 또한 설치된 것을 확인할 수 있다.

 

2.2. gunicorn 정상 실행 확인

gunicorn 설치 경로로 이동

cd /apps/venvs/test_project/lib64/python3.11/site-packages

gunicorn 실행

gunicorn --bind 0.0.0.0:8000 [Flask 프로젝트명].wsgi &
  • --bind 0.0.0.0:8000 : 모든 IP의 접속에 대해 허용하고, 8000번 Port로 gunicorn을 서비스한다.
  • gunicorn 앞에 nohup을 붙이면, gunicorn을 실행시킨 SSH 세션이 끊어져도 gunicorn 서버(서비스)는 계속 On 상태가 된다.

2.3. 샘플 app을 gunicorn으로 구동

테스트 코드의 github 링크를 첨부하니, 이걸 사용해서 배포했을 때 정상적으로 페이지가 나타난다면, 일단 gunicorn 구동에는 문제가 없다고 보면 된다.

https://github.com/jjh2x/Flask_Sample_App

자 그럼 서버 환경에서 github의 위 샘플 코드를 받아와 보자.

# python 프로젝트 코드가 저장되는 디렉토리로 이동
cd /apps/projects

# Sample Flask Web App 프로젝트를 위의 예시와 맞추기 위해,
# 'test_project' 라는 이름으로 clone
git clone <https://github.com/jjh2x/Flask_Sample_App.git> test_project

 

클론이 완료되면 다음 명령어를 통해 아래 그림과 같은 결과를 확인할 수 있을 것이다.

ls
ls -al test_project/

 

gunicorn으로 샘플 앱 구동

github에서 받아 온 sample app은 ‘pybo’라는 이름으로 애플리케이션 팩토리가 정의되어 있다. (=init.py) 또한 해당 애플리케이션 팩토리 안에 ‘create_app()’ 이라는 함수가 정의되어 있다.

따라서 아래와 같이 gunicorn으로 해당 app을 구동하면 된다.

gunicorn --bind 0:8000 "pybo:create_app()" &

 

혹시 아래와 같은 페이지와 함께 sample app에 대한 접속이 되지 않는다면, 서버의 내부 방화벽에서 막고 있는 건 아닌지 확인이 필요하다. 필자는 테스트를 위해 내부 방화벽을 우선 다 내리고 진행하였다.


3. gunicorn의 로깅

우선 log가 쌓일 디렉토리를 만들기 위해 아래 명령어를 수행하자.

mkdir /apps/venvs/test_project/logs

 

이후 gunicorn 구동 시, --access-logfile, --error-logfile 플래그를 추가하여 다음과 같이 수행하면 된다.

gunicorn --bind 0:8000 --access-logfile /apps/venvs/test_project/logs/access.log --error-logfile /apps/venvs/test_project/logs/error.log

후.. gunicorn 하나 켜고 끄기 명령어가 너무 빡센 것 같다.

다음 포스팅에서 nginx와 gunicorn 연동 과정에서 gunicorn 서비스 파일도 만들 것이니, 일단은 임시로 위의 명령어를 사용하도록 하자…!


참고

https://wikidocs.net/81077

 

4-10 WSGI 서버 Gunicorn 사용하기

이제 파이보에서 사용할 WSGI 서버인 Gunicorn을 설치하고 사용해 보자. > Gunicorn은 구니콘이라고 읽는다. [TOC] ## Gunicorn 설치하고 사용해 …

wikidocs.net

https://velog.io/@yejin20/TILGunicorn-%EC%82%AC%EC%9A%A9-%EB%AA%85%EB%A0%B9%EC%96%B4

 

[TIL]Gunicorn 사용하기

Gunicorn은 Green Unicorn이라는 뜻으로 Python WSGI HTTP 서버다.웹서버와 WAS 사이를 연결하는 인터페이스로 파이썬에서는 wsgi를 사용하고 있다.이렇게 서버를 실행하면 EC2를 종료해도 서버가 계속 켜져

velog.io

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기