Deploy di Django su Apache2

Abbiamo deciso di collocare la directory dell'applicazione in /usr/local:

cd /usr/local
git clone $url

Creare un branch locale di deploy:

git checkout -b deploy

Configurare il settings.py in base alle istruzioni e alle singole esigenze dell'applicazione:

cd $nome_progetto
cp $nome_progetto/settings{_dist,}.py

Raccogliere i file statici (la procedura puo' variare a seconda dell'applicazione):

mkdir static
python manage.py collectstatic

Aggiungere in settings.py queste 2 righe:

STATIC_URL = '/static/'
STATIC_ROOT = '/usr/local/$nome_progetto/static/'

Controllare i permessi, impostare il database e installare le dipendenze, facendo riferimento alla documentazione dell'applicazione.

Creare il file $nome_progetto/wsgi_local.py con questo contenuto:

import os, sys
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "$nome_progetto.settings")
sys.path = ['/usr/local/$nome_progetto/'] + sys.path
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

NB: corregge il path assoluto

Creare il file di deploy di Apache su /etc/apache2/sites-available/$nome_progetto:

<VirtualHost *:80>
ServerAdmin webmaster@befair.it
ServerName $server_name
DocumentRoot /usr/local/$nome_progetto/
WSGIScriptAlias / /usr/local/$nome_progetto/$nome_progetto/wsgi_local.py
Alias /static /usr/local/$nome_progetto/static
<Directory /usr/local/$nome_progetto_static/>
Order allow,deny
Allow from all
</Directory>
<Directory /usr/local/$nome_progetto/>
Order allow,deny
Allow from all
<Files $nome_progetto/wsgi_local.py>
Require all granted
</Files>
</Directory>
ErrorLog ${APACHE_LOG_DIR}/$nome_progetto_error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/$nome_progetto_access.log combined
</VirtualHost>

Attivare il virtual host e ricaricare Apache:

ln -s /etc/apache2/sites-{available,enabled}/$nome_progetto
service apache2 reload