이콜레모 개발자 위키

Page history of uwsgi



Title: uwsgi | edited by Youngrok Pak at 10 years, 5 months ago.

현재 가장 성능이 뛰어난 것으로 알려진 wsgi 컨테이너. http://uwsgi-docs.readthedocs.org/en/latest/index.html wsgi 외에도 Rack, PSGI, CGI, PHP 등도 지원한다.

wsgi 프로젝트 설정을 할 때 개별적으로 하기보다는 http://uwsgi-docs.readthedocs.org/en/latest/Emperor.html를 이용하면 편리하다.

우분투 설정

apt-get의 패키지는 오래된 것이므로 pip로 설치한다.

sudo pip install uwsgi

upstart 스크립트를 만든다.

/etc/init/uwsgi.conf

# Emperor uWSGI script

description "uWSGI Emperor"
start on runlevel [2345]
stop on runlevel [06]

exec sudo -uubuntu uwsgi --master --die-on-term --emperor /etc/uwsgi

그러면 이제 다음 명령으로 uwsgi 서버를 시작/중단/재시작 할 수 있다.

sudo start uwsgi
sudo stop uwsgi
sudo restart uwsgi

그리고 연동할 프로젝트를 설정한다. Django를 예로 들면 다음과 같다. 물론 그냥 wsgi 파일을 연결시켜도 된다.

[uwsgi]
thread=3
master=1
env = DJANGO_SETTINGS_MODULE=myproj.production
module = django.core.handlers.wsgi:WSGIHandler()
chdir = /home/ubuntu/myproj
virtualenv = /home/ubuntu/venv
socket = 127.0.0.1:3031
logto = /home/ubuntu/logs/uwsgi-myproj.log
buffer-size=32768

buffer-size는 지정하지 않으면 request의 사이즈가 클 때 에러가 난다. 페이스북 로그인 연동을 할 때처럼 URL이 길어지면 에러를 볼 수 있다. 이 정도는 디폴트값으로 해줘야 되는 거 아냐?

여기까지 하면 uwsgi 서버는 작동한다. 그럼 이제 socket에 지정한 대로 nginx에서 연결시켜주면 된다. 우분투 패키지의 nginx는 uwsgi_params를 이미 갖고 있어서 설정만 해주면 된다.

server {
listen 80;
listen [::]:80 ipv6only=on default_server;
server_name mydomain.com;
location /static {
alias /path/to/static;
}
location / {
uwsgi_pass 127.0.0.1:3031;
include uwsgi_params;
}
}

 

Wiki at WikiNamu