Table des matières

Service benevalibre.chapril.org

Introduction

Installation des pré-requis

apt install libapache2-mod-wsgi-py3 python3 virtualenv git make

Le serveur de base de donnée MariaDB imposé par cette version de Django nécessite pas mal de dépendances de développement*.

apt install build-essential python3-dev libmariadb-dev pkg-config

* Le connecteur de Debian n'étant pas assez récent.

Préparation de la DB

mysql -u root -p
CREATE DATABASE benevalibre ;
CREATE USER 'benevalibre' IDENTIFIED BY 'xxxxxxxxx';
GRANT ALL PRIVILEGES ON `benevalibre`.* TO 'benevalibre' IDENTIFIED BY 'xxxxxxxxx';

Préparation des dossiers

mkdir /srv/benevalibre.chapril.org
cd /srv/benevalibre.chapril.org/
mkdir -p /var/log/benevalibre.chapril.org
mkdir -p /var/www/benevalibre.chapril.org
ln -s /var/www/benevalibre.chapril.org www
cd www/

Installation de Bénévalibre

git clone https://forge.cliss21.org/cliss21/benevalibre.git
cd benevalibre/
git checkout master

On doit installer le connecteur SQL donc on procède en deux temps.

make create-venv
venv/bin/pip install mysqlclient
make init

Durant le make init un éditeur s'ouvre pour qu'on fasse la configuration de l'application. Je retiens ceci :

config.env
ENV=production
DJANGO_SECRET_KEY=s3cr3t
DJANGO_ALLOWED_HOSTS=benevalibre.chapril.org,
DJANGO_DATABASE_URL=mysql://benevalibre:xxxxxxxxxx@127.0.0.1:3306/benevalibre
DEFAULT_FROM_EMAIL=benevalibre@chapril.org
ADMINS=benevalibre-support@chapril.org

Le make init se charge de :

Configuration Apache2

On adapte la configuration de Nginx fournie par le fichier README.md en suivant la logique documentée pour un projet Django:

/etc/apache2/sites-available/benevalibre.chapril.org.conf
<VirtualHost *:80>
    ServerName benevalibre.chapril.org
    ServerAdmin benevalibre-support@chapril.org
 
    ErrorLog ${APACHE_LOG_DIR}/benevalibre.chapril.org/benevalibre.chapril.org-error.log
    CustomLog ${APACHE_LOG_DIR}/benevalibre.chapril.org/benevalibre.chapril.org-access.log combined-proxy
 
    WSGIProcessGroup benevalibre
    WSGIDaemonProcess benevalibre python-home=/var/www/benevalibre.chapril.org/benevalibre/venv/ python-path=/var/www/benevalibre.chapril.org/benevalibre/
 
    WSGIScriptAlias / /var/www/benevalibre.chapril.org/benevalibre/benevalibre/wsgi.py process-group=benevalibre
 
    <Directory /var/www/benevalibre.chapril.org/benevalibre/benevalibre/>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>
 
    Alias /static/ /var/www/benevalibre.chapril.org/benevalibre/var/static/
 
    <Directory /var/www/benevalibre.chapril.org/benevalibre/var/static/>
        Require all granted
    </Directory>
 
    Alias /media/ /var/www/benevalibre.chapril.org/benevalibre/var/media/
 
    <Directory /var/www/benevalibre.chapril.org/benevalibre/var/media/>
        Require all granted
    </Directory>
 
    Alias /favicon.ico /var/www/benevalibre.chapril.org/benevalibre/var/static/favicon/favicon.ico
</VirtualHost>

Configuration monitoring

/etc/icinga2/zones.d/master/cluster/lamp.conf
/* == benevalibre.chapril.org == */
vars.http_vhosts["benevalibre.chapril.org"] = {
  http_vhost = "benevalibre.chapril.org"
  http_uri = "/"
  vhost_tls = "redirect"
  http_string = "Le logiciel libre qui facilite la gestion et la valorisation du bénévolat dans les associations."
}

Tester l'envoi de courriels

cd /var/www/benevalibre.chapril.org/benevalibre
./venv/bin/python manage.py sendtestemail benevalibre-support@chapril.org

Personnaliser la présentation du logiciel

Fait via le dossier local/ tel qu'indiqué dans le fichier README.md du projet.

Création d'un utilisateur admin

On se place en utilisateur www-data :

su - www-data -s /bin/bash
cd /var/www/benevalibre.chapril.org/benevalibre/
 
./venv/bin/python manage.py createsuperuser
Adresse mail: benevalibre-support@chapril.org
Password: 
Password (again): 
Superuser created successfully.

Puis :

Administration régulière du service

Export/import de la base de données

mysqldump -u root -p benevalibre > benevalibre_backup_db_$(date +%Y%m%d).sql
mysql -u root -p benevalibre < benevalibre_backup_db_$(date +%Y%m%d).sql

Mise à jour de bénévalibre (version < 2.0.0)

git pull && make update

Une autre procédure est possible :

cd /var/www/benevalibre.chapril.org/benevalibre/
git fetch --all
git rebase origin/master
make update
chown www-data: . -R

Administration exceptionnelle du service

Mise à jour de Bénévalibre de la v1.6.x à la version 2.0.x

En août 2025, la sortie de la version 2.0 de Bénévalibre a été annoncée. Comme indiquée dans l'annonce du forum (sortie de la version 2), cette mise à jour amène une ré-écriture d'une partie du code source.

La procédure d'installation fraîche a changé, ainsi que la procédure de mise à jour.

Le protocole qui suit, en cours d'écriture, est celui prévu pour mettre à jour l'instance du Chapril.

Arrêt

Commençons par arrêter le service.

a2dissite benevalibre.chapril.org
systemctl reload apache2

Sauvegarde

Sauvegardons ensuite notre configuration et les fichiers statiques, logos…

Si besoin, créer un dossier de sauvegarde.

mkdir ~/backup

On sauvegarde le nécessaire ailleurs.

cd /var/www/benevalibre.chapril.org/benevalibre/
cp -rp {config.env,var} ~/backup/

Mise à jour

On s'assure d'être sur la branche actuelle du code et on tire les dernières modifications.

git checkout main && git pull

Copie de notre fichier config.env original et du fichier d'exemple de la nouvelle version.

cp config.env config.env.ori
cp config.env.example config.env

On reporte les éléments de notre ancienne configuration dans le nouveau fichier, à savoir les variables :

config.env
DJANGO_SECRET_KEY=s3cr3t
DJANGO_ALLOWED_HOSTS=benevalibre.chapril.org,
DJANGO_DATABASE_URL=mysql://benevalibre:xxxxxxxxxx@127.0.0.1:3306/benevalibre
DEFAULT_FROM_EMAIL=benevalibre@chapril.org
ADMINS=benevalibre-support@chapril.org
On éditera la variable BASE_URL, sinon le service ne fonctionnera pas.
   BASE_URL=https://benevalibre.chapril.org
Les variables OPEN_REGISTRATION et MODERATED_REGISTRATION sont renommées respectivement en ASSOCIATION_REGISTRATION_OPEN et ASSOCIATION_REGISTRATION_MODERATED.

Dans notre cas, nous conservons les valeurs par défaut.

Installation de l'environnement virtuel

Après avoir supprimé l'ancien répertoire venv/, on installe Benevalibre, comme indiqué dans la documentation.

rm -rf ./venv
python3 -m venv --system-site-packages ./venv
source ./venv/bin/activate
python -m pip install benevalibre

(venv) doit préfixer l'invité de commande.

On vérifie que tout va bien avec l'environnement virtuel activé, avant de poursuivre.

python -m benevalibre check --deploy

On passera sous silence, les erreurs affichées concernant les options SECURE_HSTS_SECONDS et SECURE_SSL_REDIRECT de Django.

Avant de poursuivre on réalisera la commande suivante :

ln -s /var/www/benevalibre.chapril.org/benevalibre/venv/lib/python3.11/site-packages/benevalibre/static \
/var/www/benevalibre.chapril.org/benevalibre/benevalibre/static

Ceci permettra de rattraper un bug lors de la collecte des fichiers statiques qui va suivre.

On migre la base de données et on récupère les fichiers statiques dans l'environnement virtuel.

python -m benevalibre migrate
python -m benevalibre collectstatic
Avant de lancer la dernière commande, on s'assurera de la présence du répertoire ./var/media/.

Installation de Gunicorn

La mise à jour propose d'utiliser Gunicorn pour servir l'application. Trois tâches sont à faire.

Installer Gunicorn dans le répertoire venv/ de Bénévalibre avant de désactiver l'environnement virtuel.

python -m pip install gunicorn
deactivate

Créer puis activer un service Systemd pour lancer Gunicorn qui va servir Bénévalibre.

/etc/systemd/system/benevalibre.service
[Unit]
Description=Bénévalibre web service
After=network.target
 
[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/benevalibre.chapril.org/benevalibre
ExecStart=/var/www/benevalibre.chapril.org/benevalibre/venv/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
systemctl daemon-reload
systemctl enable --now benevalibre

Modifier la configuration d'Apache afin de rediriger les requêtes vers Gunicorn.

/etc/apache2/sites-available/benevalibre.chapril.org
  1. <VirtualHost *:80>
  2. ServerName benevalibre.chapril.org
  3. ServerAdmin benevalibre-support@chapril.org
  4.  
  5. ErrorLog ${APACHE_LOG_DIR}/benevalibre.chapril.org/benevalibre.chapril.org-error.log
  6. CustomLog ${APACHE_LOG_DIR}/benevalibre.chapril.org/benevalibre.chapril.org-access.log combined-proxy
  7.  
  8. Alias /static /var/www/benevalibre.chapril.org/benevalibre/var/static
  9.  
  10. <Directory /var/www/benevalibre.chapril.org/benevalibre/var/static/>
  11. Require all granted
  12. </Directory>
  13.  
  14. Alias /media /var/www/benevalibre.chapril.org/benevalibre/var/media
  15.  
  16. <Directory /var/www/benevalibre.chapril.org/benevalibre/var/media>
  17. Require all granted
  18. </Directory>
  19.  
  20. Alias /favicon.ico /var/www/benevalibre.chapril.org/benevalibre/var/static/favicon/favicon.ico
  21.  
  22. ProxyRequests Off
  23. ProxyPreserveHost On
  24.  
  25. ProxyPass /static !
  26. ProxyPass /media !
  27. ProxyPass /favicon.ico !
  28. ProxyPass / http://localhost:8345/
  29. ProxyPassReverse / http://localhost:8345/
  30.  
  31. # ChaprilInfos
  32. Include chaprilinfos.conf
  33.  
  34. </VirtualHost>

On ajoutera le module proxy avant de réactiver la configuration de Bénévalibre et de relancer Apache.

a2enmod proxy
a2enmod proxy_http
a2ensite benevalibre.chapril.org
systemctl restart apache2