Guide d’installation

Ce guide vous aidera à installer Bénévalibre sur un serveur sous GNU/Linux. Pour la mise à jour, veuillez vous référer à la procédure donnée dans l’annonce du forum pour cette version.

Note

Il existe aussi une image Docker pour déployer une instance de Bénévalibre, mais celle-ci n’a pas encore été mise à jour pour la version 2.x.

Pré-requis

  • Python 3.10 ou plus récent
  • Une base de données, de préférence PostgreSQL
  • Un reverse proxy comme NGINX pour servir l’application en HTTPS ainsi que ses fichiers
  • Un accès à un serveur SMTP pour l’envoi de mail (inscription d’un compte, notifications…)

Sur un serveur sous Debian, il est recommandé d’installer les paquets suivant :

  • python3
  • python3-venv
  • python3-pil
  • python3-psycopg2 (pour une base de données PostgreSQL)

Étape 1 : Utilisateur UNIX

Comme nous ne souhaitons pas utiliser le compte root pour faire tourner l’application, nous commençons par créer un utilisateur non-privilégié :

# adduser benevalibre --disabled-password --home /home/benevalibre

Pour information, toutes les commandes de ce guide commençant par # sont à exécuter en tant que l’utilisateur root. À l’inverse, celles qui commencent par $ sont à exécuter avec ce nouvel utilisateur – benevalibre dans notre cas. Enfin, (venv)$ indique que l’environnement virtuel qui sera créé plus bas doit être activé.

Étape 2 : Base de données

Il est au moins possible d’utiliser une base de données PostgreSQL ou SQLite.

Pour de bonnes performances en production, nous recommandons vivement d’utiliser PostgreSQL. Dans ce cas, il vous faudra créer au préalable une base de données ainsi qu’un utilisateur ayant toutes les permissions sur celle-ci. Par exemple :

# sudo -u postgres createuser benevalibre -P
# sudo -u postgres createdb -O benevalibre benevalibre

Étape 3 : Configuration

La configuration de votre instance peut se faire soit depuis un fichier de configuration, soit depuis les variables d’environnement. Dans les deux cas, les variables disponibles sont documentées dans le fichier config.env.example. Dans le cas d’un fichier de configuration, son chemin peut être défini par la variable d’environnement CONFIG_FILE. Si elle n’est pas définie, l’application cherchera alors un fichier config.env dans le dossier courrant.

Dans ce guide, nous allons récupérer le fichier d’exemple et le stocker dans le dossier personnel du compte benevalibre :

$ curl --output ~/config.env https://forge.cliss21.org/cliss21/benevalibre/raw/branch/main/config.env.example
$ chmod 0600 benevalibre: benevalibre ~/config.env

Éditez ensuite le fichier ~/config.env avec votre éditeur favori pour ajuster la configuration de votre instance.

Étape 4 : Installation

Nous allons maintenant installer l’application ainsi que ses dépendances, grâce au paquet benevalibre disponible sur PyPI.

Cette installation se fera dans un environnement virtuel que nous allons créer au préalable dans le dossier personnel de l’utilisateur bénévalibre :

$ python3 -m venv --system-site-packages ~/venv

Ce nouvel environnement peut désormais être activé afin d’y installer Bénévalibre :

$ source ~/venv/bin/activate
(venv)$ python -m pip install benevalibre

Vous pouvez désormais vérifier que votre installation est prête pour le déploiement :

(venv)$ python -m benevalibre check --deploy

Si tout s’est bien passé, vous pouvez alors initialiser la base de données et collecter les fichiers statiques :

(venv)$ python -m benevalibre migrate
(venv)$ python -m benevalibre collectstatic

Vous pouvez aussi créer un compte administrateur de l’instance :

(venv)$ python -m benevalibre createsuperuser

Étape 5 : Lancement de l’application

Comme service avec Gunicorn

Il vous faudra installer le serveur Gunicorn soit dans l’environnement virtuel créé précédemment, soit depuis les paquets de votre distribution – gunicorn par exemple sous Debian.

Dans le cas d’un système utilisant systemd, le fichier /etc/systemd/system/benevalibre.service peut être créé avec le contenu suivant – adaptez si besoin le chemin vers l’exécutable gunicorn :

[Unit]
Description=Bénévalibre web service
After=network.target

[Service]
User=benevalibre
Group=benevalibre
WorkingDirectory=/home/benevalibre
ExecStart=/usr/bin/gunicorn benevalibre.wsgi \
    --name benevalibre --workers 4 \
    --max-requests 1200 --max-requests-jitter 50 \
    --log-level=info --bind=127.0.0.1:8345
Restart=on-failure

[Install]
WantedBy=multi-user.target

Vous pouvez désormais activer et lancer le service :

# systemctl daemon-reload
# systemctl enable benevalibre
# systemctl start benevalibre

Étape 6 : Reverse proxy

Il nous reste à mettre en place un reverse proxy HTTP pour gérer les connexions HTTPS vers l’application. Vous pouvez utiliser celui de votre choix tant qu’il est suffisamment sécurisé et performant.

Voici un exemple de configuration dans le cas de NGINX, au sein d’un bloc server déjà existant :

location / {
  include uwsgi_params ;
  uwsgi_pass http://127.0.0.1:8345;
}
location /media {
  alias /home/benevalibre/var/media;
}
location /static {
  alias /home/benevalibre/var/static;
  # Optional: don't log access to assets
  access_log off;
}
location = /favicon.ico {
  alias /home/benevalibre/var/static/favicon.ico;
  # Optional: don't log access to the favicon
  access_log off;
}