sysmerge IT

9 апр. 2018 г.

Настройка django + supervisor gunicorn и daphne

Имеется джанго приложение, отлично себе работает на gunicorn, но потребовалось добавить туда чат и в качестве бекенда к нему использовать вебсокет сервер Daphne. Ну и конечно все это нужно как-то поднимать, этим занимается supervisor.  Для начала что из себя представляет конфиг nginx: 

upstream gunicorn_server {
  server unix:/app/run/gunicorn.sock fail_timeout=0;
}
upstream daphne {
        server 127.0.0.1:8001;
}
server {
        server_name localhost;
        client_max_body_size 4G;
        charset UTF-8;
        index index.html index.php;
        disable_symlinks if_not_owner from=$root_path;
        access_log /var/www/httpd-logs/app.access.log;
        error_log /var/www/httpd-logs/app.error.log notice;
        location /static/ {
        alias   /app/static_cdn/;
        }
        location /media {
        alias   /app/media_cdn/;
        }
        listen 127.0.0.1:80;
        location / {
                location ~ [^/]\.ph(p\d*|tml)$ {
                        try_files /does_not_exists @fallback;
                }
                location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
                        try_files $uri $uri/ @fallback;
                }
                location / {
                        try_files /does_not_exists @fallback;
                }
        }
        location /chat/ {
                proxy_pass http://daphne;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Forwarded-Port $server_port;
                add_header X-Backend "daphne";
        }
        location @fallback {
                proxy_pass http://gunicorn_server;
                proxy_http_version 1.1;
                proxy_redirect off;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Forwarded-Port $server_port;
                add_header X-Backend "Gunicorn";
                access_log off;
        }
}
Ну, выглядит все предельно просто, имеется 2 апстрима на gunicorn и daphne, куда мы, по локейшенам, раскидываем запросы.

Теперь нужно настроить supervisor для запуска нужных нам приложений. Начнем с daphne. Создаем конфиг в /etc/supervisor.d/daphne.conf :
# ====================================================
[program:daphne]
user = app_user
directory = /app/src
environment = DJANGO_SETTINGS_MODULE="myapp.settings.production",
command = /app/bin/daphne -b 0.0.0.0 -p 8001 myapp.asgi:channel_layer
autorestart = true
stderr_logfile = /app/logs/daphne_errors.log
# ===============================================
Вы уже должны были заметить, что приложение мое носит незатейливое имя MYAPP, соответственно пути к модулям получаются что-то вроде myapp.settings.production.

Теперь то же самое проделаем с gunicorn, это будет /etc/supervisord/gunicorn.conf:

# ===============================================
[program:gunicorn]
command = /app/bin/gunicorn_start 
user = app_user                                                     
stdout_logfile = /app/logs/gunicorn_supervisor.log
redirect_stderr = true                                             
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8
# ===============================================
Теперь осталось запустить воркеры питона для непосредственной работы, воркеров сделаем 2 штуки, можно в одном файле конфига супервайзора, разделив их:

# ====================================================
[program:worker-first]
user = app_user
directory = /app/src
environment = DJANGO_SETTINGS_MODULE="myapp.settings.production",
command = /app/bin/python3 manage.py runworker
autorestart = true
stderr_logfile = /app/logs/worker.log
# ===============================================
# ====================================================
[program:worker-second]
user = app_user
directory = /app/src
environment = DJANGO_SETTINGS_MODULE="myapp.settings.production",
command = /app/bin/python3 manage.py runworker
autorestart = true
stderr_logfile = /app/logs/worker.log
# ===============================================

Ну и все, запускаем supervisor, проверяем, что он поднял все нужные нам сервисы и можно тестить приложение

5 апр. 2018 г.

HTTPS на Blogger платформе

Ого, на дворе 2018 и в Гугле таки решили, что пора включить на платформе Blogger поддержку HTTPS не только для гуглосабдоменов, но и для доменов второго уровня. Сертификаты выдаются LetsEncrypt'ом и абсолютны бесплатные, что круто.

Включить можно в НАСТРОЙКА - ОСНОВНОЕ. Для настройки так же доступен режим автоматического редиректа с http на https.

ТЕХНОЛОГИИ