Переезд на Nginx и Gunicorn

Selectel возобновил штатную работу облачного сервиса, поэтому я решил создать новый сервер в новом серверном пуле и заодно переехать с lighttpd на nginx.

Сервер работает на Debian Squeeze Mini.

Установка

Nginx устанавливаем из репозитория squeeze-backports.

Из-под root:

echo "# squeeze-backports" >> /etc/apt/sources.list
echo "deb http://backports.debian.org/debian-backports squeeze-backports main" >> /etc/apt/sources.list
apt-get update
apt-get -t squeeze-backports install nginx

Для управления серверными процессами установим supervisord:

apt-get install supervisor

Установим virtualenv и mercurial:

apt-get install virtualenv
apt-get install mercurial

Создаем пользователя и настраиваем виртуальное окружение

useradd -m -s /bin/bash blog
su blog

Из-под пользователя blog:

cd ~
virtualenv env
cd env
. bin/activate

Из-под виртуального окружения:

easy_install pip
pip install gunicorn

Устанавливаем blohg

Я использую собственную версию, поэтому устанавливаю из репозитория (из-под виртуального окружения):

cd ~
hg clone https://bitbucket.org/ForeverYoung/blohg
cd blohg
python setup.py install

Если при установке ошибка, нужно установить gcc и python-dev (из-под root):

apt-get install gcc
apt-get install python-dev

Для стандартной версии (из-под виртуального окружения):

pip install blohg

Настраиваем gunicorn

Создаем blog_app.py в ~blog:

#!/usr/bin/python
from blohg import create_app

app = create_app("/home/blog/blog")

Клонируем блог на сервер (как описано тут):

hg clone my_blohg ssh://blog@yourdomain.tld/home/blog/blog/

Создаем gunicorn.conf.py в ~blog:

import multiprocessing

workers = multiprocessing.cpu_count() * 2 + 1

bind = "unix:/home/blog/blog.socket"
pidfile = "/home/blog/blog.pid"
logfile = "/home/blog/logs/gunicorn.log"
loglevel = "info"
proc_name = "blog"
user = "www-data"
group = "www-data"

Настраиваем supervisor

Создаем /etc/supervisor/conf.d/blog.conf:

[program:blog]
command = /home/blog/env/bin/gunicorn blog_app:app -c /home/blog/gunicorn.conf.py
directory = /home/blog/
autostart = true
autorestart = true
redirect_stderr = true
daemon = false
debug = false
logfile = /home/blog/logs/supervisor.log
loglevel = "info"
user = "www-data"

Запускаем supervisor:

/etc/init.d/supervisor start

Настраиваем nginx

Создаем /etc/nginx/sites-available/blog:

server {
        listen 80;

        server_name yourdomain.tld;
        access_log /home/blog/logs/nginx_access.log;
        error_log /home/blog/logs/nginx_error.log;

        location / {
            proxy_pass http://unix:/home/blog/blog.socket;
            include proxy_params;
        }
}

Создаем ссылку в sites-enabled:

cd /etc/nginx/sites-enabled
ln -s ../sites-available/blog blog

Запускаем nginx:

/etc/init.d/nginx start

Вот и всё!

blog comments powered by Disqus