블로그 이미지
안녕하세요~ iolate(a.k.a. isho) 의 블로그 입니다~! iolate

카테고리

분류 전체보기 (171)
Server, Cloud (7)
끄적끄적 (6)
Linux, Ubuntu (26)
개발개발 (45)
Mac, iOS (41)
Embedded (19)
NAS (1)
Web (5)
Network (3)
Review (10)
기타 (8)
비공개글 (0)
Total638,136
Today30
Yesterday165

'uwsgi'에 해당되는 글 1건

  1. 2018.11.27 Ubuntu 18.04 + Nginx + uWSGI + Python-Flask 설정

개인적으로 nginx 자체는 매력적이라고 생각했지만, php-fpm 이라던가 uwsgi 같이 웹서버에서 직접 붙지 않고 socket 으로 연결되는 방식이 마음에 들지 않아 잘 사용하지 않았다. 

설정 및 관리가 좀 더 번거롭기도 했고..


이제는 마음에 안들었던 몇가지를 감수하고 장점을 취해보기 위해서 사용해보려고 하는데,  여전히 개떡같은 uWSGI 설정법을 정리해봄.


환경은 Ubuntu 18.04 + Nginx + uWSGI + Python3 + Flask.

이 방법의 최대 장점 중 하나가 프로젝트별로 python 버전에 구애받지 않고 venv 를 전혀 무리 없이 돌릴 수 있다.. 인 것 같은데 난 평소에 그렇게 안쓰고 있으니 일단 생략.


1. 패키지 설치

Ubuntu 18 에는 쓸만한 uwsgi 버전으로 기본 패키지 매니저에 있다. 플러그인까지 한번에 설치해주자.

apt install uwsgi uwsgi-plugin-python

* pip 을 이용해서 설치해도 된다. 어차피 systemd 데몬으로 만들거라... 이 편이 더 나은 것 같기도 하다.


2. 프로젝트 wsgi 설정

프로젝트 폴더에 이런식으로 파일을 만든다.

wsgi.py

from flask_app import app

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

uwsgi.ini

[uwsgi]
plugin = python3
module = wsgi:app

master = true
processes = 3

socket = /tmp/PROJECT.sock
chmod-socket = 664
vacuum = true

die-on-term = true

plugin = python 은, uwsgi 를 apt로 설치해서 필요한 것 같다.

pip 으로 설치하면 필요없을 듯?


3. systemd unit 생성

/etc/systemd/system/ 경로에 PROJECT.service 로 파일을 만든다.

[Unit]
Description=uWSGI instance to serve PROJECT
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/PATH/TO/PROJECT
#Environment="PATH=/PATH/TO/BIN"
ExecStart=/usr/bin/uwsgi --ini uwsgi.ini

[Install]
WantedBy=multi-user.target

뭐 User, Group 이라던가 적당히 해주고, 그 밑에 WorkingDirectory, 환경변수, 실행커맨드 등도 적당히 수정해준다.


이 후

sudo systemctl enable PROJECT

sudo systemctl start PROJECT

이렇게 자동 실행 설정 및 서비스 시작 해주면 된다.


4. Nginx 설정

sites-available 등의 설명은 생략.


아래와 같이 구성하자. 수정이 필요하다면 적당히 수정...


server {
        listen 80;
        server_name 사이트주소;

        location / {
                include uwsgi_params;
                uwsgi_pass unix:///tmp/PROJECT.sock;
        }
        location /static {
                alias /PATH/TO/PROJECT/flask_app/static;
        }
}

업스트림 설정으로 분산화를 하거나, uri 에 따라 다른 프로젝트로 연결하는 것도 가능하다. 이건 내가 쓸일 있을때 수정해둘거임.


5. 로그 보기

프로젝트 폴더에 만들었던 uwsgi.ini  에서 log 파일 경로를 지정할 수도 있지만,

sudo journalctl -u PROJECT 로 볼 수도 있다.

uwsgi 관련 로그는 여기에서,

접속 기록이나 파이썬 에러 로그 등은

/var/log/nginx/access.log, /var/log/nginx/error.log 에서 확인할 수 있다. 물론 설정에서 각각 바꿔줬으면 다르겠지?



참고

How To Serve Flask Applications with uWSGI and Nginx on Ubuntu 18.04 (DigitalOcean)

uWSGI documentation

Posted by iolate

최근에 달린 댓글

최근에 받은 트랙백

글 보관함