Deploy nowiki

Mettere nowiki pare facile, l’ho scritto io e manco sapevo come si faceva, quindi mo socializzo.

Installa

apt-get install nginx-full python-virtualenv git uwsgi uwsgi-plugin-python uwsgi-plugin-syslog
cd /var
git clone git://github.com/boyska/nowiki
cd nowiki
sudo -u nowiki virtualenv --no-site-packages venv
source venv/bin/activate
pip install -r requirements.txt
deactivate
cd nowiki
cp nowiki.example.cfg nowiki.cfg

Configurazione

Configurare nowiki

Il file nowiki.cfg permette di cambiare alcuni settaggi base.

E’ poi importante mettere i permessi con accuratezza, in modo che uwsgi possa soltanto leggere i file di nowiki, con l’eccezione di /data/ per cui ci deve essere possibilita’ di scrittura.

chown nowiki:nogroup /var/nowiki -R
chmod g-w /var/nowiki -R
chmod o-rwx /var/nowiki -R
chown nobody /var/nowiki/nowiki/data -R
chmod ug+rwX /var/nowiki/nowiki/data -R

Configurare uwsgi

In /etc/uwsgi/apps-enabled/uwsgi-nowiki:

[uwsgi]
socket = /run/uwsgi/nowiki.sock
chdir = /var/nowiki/nowiki
virtualenv = /var/nowiki/venv
module = nowiki
callable = app
uid = nobody
gid = nogroup
chmod = 600
chown-socket = www-data
plugins = python,syslog
log-syslog = uwsgi-nowiki

In /etc/uwsgi/emperor.ini basta mettere

[uwsgi]
emperor = /etc/uwsgi/apps-enabled
uid = nobody
gid = nogroup
chown-socket = www-data
master = true

Bisogna poi configurare systemd per gestire l’avvio di uwsgi, mettendo questo in /etc/systemd/system/emperor.uwsgi.service. Nota: uwsgi potrebbe partire con il socketactivation (vedi ListenStream), ma non ho capito se c’e’ un modo decente di farlo senza dover elencare tutte le socket coinvolte dentro l’emperor.uwsgi.socket . Quindi non l’ho fatto, non mi pareva pulito.

[Unit]
Description=uWSGI Emperor
After=syslog.target

[Service]
ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/emperor.ini
ExecStartPre=/bin/mkdir -p /run/uwsgi
ExecStartPre=/bin/chown nobody:nogroup /run/uwsgi
Restart=always
Type=notify
StandardError=syslog
NotifyAccess=main

[Install]
WantedBy=multi-user.target

Configurare nginx

server  {
        listen 80;
        rewrite ^/nowiki$ /nowiki/ permanent;
        location /nowiki { #try_files $uri @nowiki; }
        #location @nowiki {
            include uwsgi_params;
            uwsgi_param SCRIPT_NAME /nowiki;
            uwsgi_modifier1 30;
            uwsgi_pass unix:/run/uwsgi/uwsgi.sock;
        }
    }