Passage en production

Configuration de l'application

Pour rappel, la configuration de l'application se fait dans /etc/polynum/local_settings.py

Un fichier d'exemple local_settings.py.example est fourni avec Polynum, c'est un modèle pour la création de /etc/polynum/local_settings.py : il contient la liste des paramétrages possibles avec explications et exemples.

Si vous avez installé Polynum à partir du paquet, le modèle est placé dans /usr/share/doc/polynum/, il vous suffit donc de faire :

# cd /etc/polynum
# cp /usr/share/doc/polynum/local_settings.py.example local_settings.py
# vi local_settings.py

Attention : la configuration /etc/polynum/local_settings.py doit être lisible par l'utilisateur qui va faire tourner l'application, c'est-à-dire en général polynum. Par ailleurs ce fichier va contenir des de passe (accès à la base de données, à l'annuaire LDAP), il ne doit donc pas être lisible par d'autres utilisateurs :

# chown polynum:polynum /etc/polynum/local_settings.py
# chmod 640 /etc/polynum/local_settings.py

Installation de la base de données

La base de données attendue par PolyNum est PostgreSQL.

  1. Création de la base et d'un utilisateur associé

    Sur le serveur PostgreSQL, créer une base vierge (createdb polynum) et un utilisateur qui aura tous les droits sur cette base (lecture, écriture, mais aussi création et mise à jour des tables).

    Dans la suite, la base sera nommée polynum et l'utilisateur polynum.

  2. Configuration de l'accès à la base dans PolyNum

    Dans /etc/polynum/local_settings.py modifier le paramètre DATABASES selon le modèle suivant :

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'polynum',    # nom de la base
            'USER': 'polynum',    # nom de l'utilisateur associé
            'PASSWORD': '...',    # mot de passe de l'utilisateur
            'HOST': 'db.univ.fr', # serveur contenant la base (rien pour localhost)
            'PORT': '',           # port TCP (rien pour le port par défaut)
        }
    }
  3. Création des tables de la base

    Une fois la configuration enregistrée, lancez la création de la base :

    # polynum-manage.py syncdb
    Installing custom SQL ...
    Installing indexes ...
    Installed 0 object(s) from 0 fixture(s)
    
    Synced:
     > south
     > django.contrib.auth
    (...)
    Not synced (use migrations):
     - polynum.base
     - polynum.delegation
    (use ./manage.py migrate to migrate these)
    # polynum-manage.py migrate
    Running migrations for base:
    (...)
    Installed 0 object(s) from 0 fixture(s)
  4. Création des index pour optimisation

    Certaines requêtes nécessitent des index pour être performantes, il est donc indispensable de créer des index d'optimisation :

    # polynum-manage.py sqlindexes base delegation | \
                        psql --host=db.univ.fr --username=polynum 

Mise en place de données initiales

Pour aider à la configuration et l'adaptation de PolyNum au contexte local, des données initiales «classiques» sont livrées, appelés fixtures dans le monde Django. Pour les ajouter dans la base :

# polynum-manage.py loaddata /usr/share/doc/polynum/fixtures/*.json

Mise en place des entités

Chaque demande dans PolyNum est liée à une entité administrative. Ces entités doivent être importées dans PolyNum depuis un dump au format LDIF/SupAnn ou XML (un exemple de fichier XML est disponible dans /usr/share/doc/polynum/fixtures/structures.xml.

Une fois le fichier LDIF ou XML obtenu, l'importer avec la commande loadentities :

Depuis un fichier XML :
# polynum-manage.py loadentities /.../structures.xml
(...)
Added   7980 entities
Depuis un fichier LDIF :
# polynum-manage.py loadentities /.../structures.ldif
(...)
Added   7980 entities

Configuration de l'authentification

Polynum peut authentifier les utilisateurs via CAS et LDAP. Dans /etc/polynum/local_settings.py adapter les paramètres suivants :

(... extrait de /etc/polynum/local_settings.py ...)

CAS_SERVER_URL = "https://cas.univ.fr/" # CAS server URL
LDAP_URL = "ldaps://ldap.univ.fr"       # LDAP server URL
LDAP_BIND_DN = "uid=...,ou=...,dc=..."  # DN to authenticate to the LDAP server
LDAP_BIND_PASSWORD = "..."              # password
LDAP_USER_QUERY = "supannAliasLogin=%s" # query to retrieve user, %s is CAS username
LDAP_BASE = "dc=univ,dc=fr"             # base DN for the query

Lancement de l'application au démarrage du système

TODO : sysvinit et /etc/default/polynum

Retrait du mode debug, collectstatic

TODO : DEBUG = False

Mise en production derrière un reverse-proxy

TODO : collectstatic

TODO : config gunicorn + nginx