Site de coleta

Como botar apoio.partidopirata.org no ar


Git

Repositório oficial: https://github.com/piratas/apoio-piratas

Site de produção

O site que está em https://apoio.partidopirata.org

Usa o ramo oficial

git clone -b oficial https://github.com/piratas/apoio-pirata.git

Site de desenvolvimento

O último commit no ramo master está em https://apoio.partidopirata.xyz e em outros sub domínios criados para teste.

git clone https://github.com/piratas/apoio-pirata.git

Django e CGI

É necessário instalar python3 e uswgi. Favor documentar isto aqui assim que possível.

Systemd

uswgi pode rodar de várias formas, eu prefiro systemd:

Editar o arquivo /lib/systemd/system/apoio.service:

[Unit]
Description=Pequeno projeto de apoio ao Partido Pirata
After=network.target
After=syslog.target

[Service]
Type=simple
User=jango
Group=jango
ExecStart=/usr/local/bin/uwsgi --socket /tmp/apoio-piratas.sock --chdir /home/django/apoio-piratas/apoio/ --wsgi-file /home/django/apoio-piratas/apoio/wsgi.py --chmod-socket=666
RuntimeDirectory=uwsgi
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=null
NotifyAccess=all

[Install]
WantedBy=multi-user.target

No caso, criei um usuário novo para rodar o uwsgi django.

Para iniciar o serviço:

sudo systemctl start apoio.service

Para adicionar o serviço na inicialização do systemd:

sudo systemctl enable apoio.service
sudo systemctl daemon-reload

Para verificar o estado do serviço, depurar erros, etc.:

sudo systemctl -l status apoio.service

Nginx

Criar o arquivo /etc/nginx/sites-enabled/apoio.conf:

upstream apoio {
    server  unix:/tmp/apoio-piratas.sock;
}

server {
    listen          80;
    listen          [::]:80;
    server_name     apoio.partidopirata.org;
    rewrite         ^       https://$server_name$request_uri? permanent;
}

server {
    listen                          443 ssl;
    listen                          [::]:443 ssl;
    ssl_protocols                   TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers       on;
    ssl_ciphers                     "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
    ssl_ecdh_curve                  secp384r1;
    ssl_session_cache               shared:SSL:10m;
    ssl_session_tickets             off;
    ssl_stapling                    on;
    ssl_stapling_verify             on;
    resolver                        208.67.220.220 208.67.222.222 valid=300s;
    resolver_timeout                5s;
    add_header                      Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
    add_header                      X-Frame-Options SAMEORIGIN;
    add_header                      X-Content-Type-Options nosniff;
    ssl_certificate                 /etc/letsencrypt/live/entwickler.partidopirata.org-0001/fullchain.pem;
    ssl_certificate_key             /etc/letsencrypt/live/entwickler.partidopirata.org-0001/privkey.pem;
    ssl_trusted_certificate         /etc/letsencrypt/live/entwickler.partidopirata.org-0001/chain.pem;

    server_name             apoio.partidopirata.org;
    charset                 utf-8;
    client_max_body_size    75M;

    location /media {
            alias /home/django/apoio-piratas/apoio/inc;
    }

    location /static {
            alias   /home/django/apoio-piratas/apoio/inc;
    }

    location / {
            uwsgi_pass      apoio;
            include         /home/django/apoio-piratas/uwsgi_params;
    }
}

No caso o site força o uso de SSL do let's encrypt.