Procédures post-installation et de mise à jour

Après l’installation, ou après une mise à jour, il peut y avoir des opérations supplémentaires à effectuer.

Migrations

Les migrations sont les opérations structurelles sur la base de données. Elles doivent être effectuées après l’installation.

Elles doivent aussi être réalisées lorsque des nouvelles migrations apparaissent. Cela peut venir :

  • de migrations de django

  • de migrations d’autre dépendances (django-modeltranslations par exemple)

  • de migrations internes.

Les migrations doivent être appliqués en mettant à jour vers

  • 1.0.0

  • 0.1.0

La commande pour appliquer les migrations est

python src/manage.py migrate

Note

Les migrations sont appliquées automatiquement avec l’image docker.

Super-utilisateur

Une fois l’installation terminée, vous pouvez créer un super-utilisateur avec la commande :

python src/manage.py createsuperuser

et remplir les informations demandées.

Les fichiers statiques

En production, les fichiers statiques ne sont pas servis par django. Vous devez :

  1. Créer un réportoire pour les fichiers statiques

  2. Mettre le paramètre STATIC_ROOT au chemin du répertoire nouvellement créé.

  3. Créer un alias pour l’url “/static/” vers le répertoire en question (voir la configuration apache pour exemple).

  4. Exécuter la commande django pour copier les fichiers statiques

La commande est

python src/manage.py collectstatic

Traductions

Vous pouvez compiler les fichiers de traduction avec cette commande :

python src/manage.py compilemessages

Exemple de configuration apache

Lors de la configuration d’apache, il ne faut pas oublier de créer un alias pour le répertoire des fichiers statiques et des médias. Un exemple peut être trouvé ci-dessous :

<IfModule mod_ssl.c>
    <VirtualHost *:80>
        ServerName example.org
        Redirect / https://example.org
        LogLevel warn
        CustomLog /var/log/apache2/example.access.log combined
        ErrorLog /var/log/apache2/example.error.log
    </VirtualHost>
    <VirtualHost *:443>
        ServerName example.org
        CustomLog /var/log/apache2/example.access.log combined
        ErrorLog /var/log/apache2/example.error.log
        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/live/example.org/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/example.org/privkey.pem
        #Include /etc/letsencrypt/options-ssl-apache.conf
        <Directory /var/www/django-voting-app/src>
            Order allow,deny
            Allow from all
        </Directory>

        Alias /static/ /var/www/django-voting-app/src/staticfiles/
        Alias /media/ /var/www/django-voting-app/src/media/

        WSGIScriptAlias / /var/www/django-voting-app/src/django_voting_app/wsgi.py
        WSGIProcessGroup www-data
        WSGIDaemonProcess www-data processes=2 threads=16 maximum-requests=1000 display-name=example
        WSGIPassAuthorization On
    </VirtualHost>
</IfModule>

Modification du fichier wsgi pour les virtualenvs

Si vous utilisez un virtualenv, il faut légèrement modifier le wsgi.py. Le fichier se trouve dans src/django_voting_app.

On suppose ici que le répertoire du virtualenv se trouve au /var/www/django-voting-app/.venv

import os
import sys

VIRTUALENV_LOC = '/var/www/django-voting-app/.venv'

activate_env=os.path.join(VIRTUALENV_LOC, 'bin/activate_this.py')
exec(compile(open(activate_env, "rb").read(), activate_env, 'exec'), {'__file__':activate_env})

sys.path.append('/var/www/django-voting-app/src')
sys.path.append('/var/www/django-voting-app/src/django_voting_app')

from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_voting_app.settings")
application = get_wsgi_application()