Розгортаємо FreeBSD+nginx+Gunicorn+bottle+Supervisor

Створюємо віртуальне оточення, активуємо його, встановлюємо всі залежності і виконуємо команду

1
$ pip install gunicorn

rel

Далі створюємо файл конфігурації для nginx, nginx_projectname.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
upstream projectname {
server 127.0.0.1:8031;
}

server {
listen 80;
server_name example.com *.example.com;
charset utf-8;

root /data/projects/projectname;

location / {
try_files $uri @proxy_to_app;
}

location @proxy_to_app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_buffering off;
proxy_pass http://projectname;
}
}

Застосовуємо внесені зміни

1
2
$ ln -s /path/to/your/project/nginx_projectname.conf /etc/nginx/sites-enabled/
$ nginx -s reload

Створюємо файл з конфігурацією для Gunicorn, g_settings.py

1
2
bind = "127.0.0.1:8031"
workers = 4

В bind прописуємо те ж, що і в налаштуваннях nginx

Запускаємо за допомогою Gunicorn. Переконайтеся, що файл run.py містить таку конструкцію:

1
2
3
4
5
6
7
from bottle import run, default_app
from app import app, config as conf

if __name__ == '__main__':
run(app=app, host=conf.RUN_HOST, port=conf.RUN_PORT)
else:
app = default_app()
1
$ gunicorn --cofing g_config.py run:app

Автоматизуємо запуск

Ну, Supervisor. Створюємо supervisor_projectname.conf файл в директорії /usr/local/etc/supervisor/ (або створюємо туди посилання):

1
2
3
4
5
6
7
8
9
[program:projectname]
command=/path/to/project/venv/bin/gunicorn run:app --config g_settings.py
directory=/path/to/project/
user=nobody
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/projectname.supervisor.stdout
stopsignal=QUIT

Все готово, перевіряємо.

1
2
3
4
5
$ supervisorctl
> reread
> update
> status
projectname RUNNING pid654, uptime 6 days

Ресурси