Installation et configuration de endi.opteos.fr
Procédure technique utilisée lors de l’installation de l’application web Open Source Autonomie (enDI depuis 2020) autonomie.opteos.fr sur le serveur d’Optéos en avril 2018. Environnement web et procédure mis à jour en mai 2021 suite au changement de nom de l’application.
Préparation de l’environnement web sur le serveur s.opteos.fr[modifier | modifier le wikicode]
Créer les comptes utilisateur UNIX sur le système :
# adduser endi # adduser bdanon endi # adduser ssarazin endi # echo -e "endi: bdanon, ssarazin" >> /etc/aliases && newaliases
Créer le répertoire du projet :
# cd /home/endi/ # mkdir -m 755 endi.opteos.fr # chgrp endi endi.opteos.fr # cd endi.opteos.fr/ # mkdir -m 750 config log www # chown www-data:endi config # chown www-data:www-data log # chmod o+rx log # chgrp endi www # chmod g+ws,o+rx www # ln -s /home/endi/endi.opteos.fr /home/bdanon/ # ln -s /home/endi/endi.opteos.fr /home/ssarazin/
Créer la base de donnée et l’accès MySQL :
# mysql > USE mysql; > SELECT PASSWORD('***'); > CREATE USER 'endi'@'localhost' IDENTIFIED VIA mysql_native_password USING '***'; > CREATE DATABASE endi_prod CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; > GRANT ALL PRIVILEGES ON `endi`.* TO 'endi_prod'@'localhost'; > FLUSH PRIVILEGES;
Créer la configuration web nginx du projet :
# nano /home/endi/endi.opteos.fr/config/endi.opteos.fr.nginx.conf
server { listen 80; listen [::]:80; listen 443 ssl http2; listen [::]:443 ssl http2; server_name autonomie.opteos.fr; access_log off; ssl_certificate /etc/letsencrypt/live/endi.opteos.fr/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/endi.opteos.fr/privkey.pem; add_header Strict-Transport-Security "max-age=15724800; preload"; include snippets/letsencrypt.conf; location / { return 301 https://endi.opteos.fr$request_uri; } } server { listen 80; listen [::]:80; server_name endi.opteos.fr; access_log off; include snippets/letsencrypt.conf; location / { return 301 https://$host$request_uri; } } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name endi.opteos.fr; root /home/endi/endi.opteos.fr/www; index index.php; access_log /home/endi/endi.opteos.fr/log/http/endi.opteos.fr_access.log; error_log /home/endi/endi.opteos.fr/log/http/endi.opteos.fr_error.log; ssl_certificate /etc/letsencrypt/live/endi.opteos.fr/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/endi.opteos.fr/privkey.pem; add_header Strict-Transport-Security "max-age=15724800; preload"; charset utf-8; gzip_static on; client_max_body_size 20m; client_body_buffer_size 128k; include snippets/letsencrypt.conf; # Proxy to pserve location / { include proxy_params; proxy_pass http://localhost:8080; } location ~ /static/favicons/.*\.png { include proxy_params; proxy_pass http://localhost:8080; expires 1M; add_header Cache-Control public; add_header Last-Modified ""; add_header ETag ""; access_log off; } location ~ \.(?:a?png|cur|css|gif|ico|jpe?g|js|json|svg|svgz|ttc|woff2?)$ { include proxy_params; proxy_pass http://localhost:8080; expires 1M; add_header Cache-Control public; add_header Last-Modified ""; add_header ETag ""; access_log off; } location = /public/logo.png { include proxy_params; proxy_pass http://localhost:8080; expires 1M; proxy_hide_header Content-Disposition; add_header Cache-Control public; add_header Last-Modified ""; add_header ETag ""; access_log off; } }
# ln -s /home/endi/endi.opteos.fr/config/endi.opteos.fr.nginx.conf /etc/nginx/sites-available/endi.opteos.fr.conf # ln -s /etc/nginx/sites-available/endi.opteos.fr.conf /etc/nginx/sites-enabled/ # nginx -t # service nginx reload # certbot certonly --agree-tos --email admin@ficusnode.com --webroot -w /etc/letsencrypt/public -d endi.opteos.fr,autonomie.opteos.fr # nginx -t # service nginx reload
Installation de Python 3.7 (si nécessaire)[modifier | modifier le wikicode]
Sources :
- https://linuxize.com/post/how-to-install-python-3-7-on-debian-9/
- https://vonkrafft.fr/guides/installer-python-3.7-debian-9-strecth
# aptitude update # aptitude upgrade # aptitude install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev curl libbz2-dev # curl -O https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tar.xz # tar xvf Python-376.9.tgz # cd Python-3.7.9 # ./configure --enable-optimizations # make # make altinstall # python3.7 -V
Installation de cairo 1.15.4 (si nécessaire)[modifier | modifier le wikicode]
# # décommenter les lignes deb-src dans /etc/apt/sources.list # aptitude update # apt-get build-dep cairo # wget https://cairographics.org/snapshots/cairo-1.15.14.tar.xz # tar -xJf cairo-1.15.14.tar.xz # cd cairo-1.15.14/ # ./configure # make # make install
Installation et configuration de l’application web enDI[modifier | modifier le wikicode]
- Source : https://framagit.org/endi/endi/
- Version :
6.1.19
(7 mai 2021)
Installer les dépendances nécessaires (Debian 9 Strecth : libmariadb2
et 10 Buster : libmariadb3
) :
# aptitude install virtualenvwrapper build-essential libjpeg-dev libfreetype6 libfreetype6-dev libmariadbclient-dev zlib1g-dev python-dev python-mysqldb redis-server libmariadb2 libmariadb-dev-compat
Télécharger et installer l’application avec git :
# su - endi $ cd ~/endi.opteos.fr/ $ mkvirtualenv --python=/usr/local/bin/python3.7 endi $ git clone https://framagit.org/endi/endi.git $ cd endi/ $ git checkout 6.1.19 $ pip install -r requirements.txt $ pip install faker virtualenvwrapper pshell $ python setup.py install $ cp development.ini.sample production.ini
Modifier le fichier de configuration production.ini
:
sqlalchemy.url = mysql://endi:…@localhost/endi_prod?charset=utf8 session.secret = … session.longtimeout = 172800 # 48h endi.instance_name = endi.opteos.fr BROKER_URL = [[1]]@localhost:6379/0 [filter:fanstatic] use = egg:fanstatic#fanstatic bundle=True minified=True bottom=True versioning=True [server:main] host = 127.0.0.1
Modifier le niveau de journalisation :
$ sed -i -E 's/^level ?= ?(DEBUG|INFO)/level = WARN/' production.ini
Créer les premiers administrateurs de l’application :
$ endi-admin production.ini useradd --user=bdanon --pwd=CHANGEMEFAST --firstname=Benjamin --lastname=Danon --group=admin --email=benjamin@ficusnode.com $ endi-admin production.ini useradd --user=ssarazin --pwd=CHANGEMEFAST --firstname=Simon --lastname=Sarazin --group=admin --email=simons@simons.fr
Utiliser cairo 1.15.14 :
$ echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/bin/" >> ~/.bashrc $ echo "import os; os.environ['LD_LIBRARY_PATH'] = '/usr/local/bin/'" >> ~/.virtualenvs/endi/lib/python3.7/site-packages/_set_envs.pth $ exit # su - endi $ cd ~/endi.opteos.fr/endi $ workon endi $ python -c "import os; print (os.getenv('LD_LIBRARY_PATH'))"
Démarrer puis stopper le processus de l’application :
$ pserve production.ini > CTRL+C
Installation de l’application web enDI en tant que service[modifier | modifier le wikicode]
$ exit # loginctl enable-linger endi # adduser endi systemd-journal # nano /home/endi/.bashrc
# Required variables for `systemctl --user` export XDG_RUNTIME_DIR=/run/user/`id -u` export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
# su - endi $ mkdir -p ~/.config/systemd/user/ $ nano ~/.config/systemd/user/opteos_endi@.service
[Unit] Description=Optéos enDI After=network.target mariadb.target redis-server.target nginx.target [Service] WorkingDirectory=/home/endi/endi.opteos.fr/endi ExecStart=/home/endi/.virtualenvs/endi/bin/pserve /home/endi/endi.opteos.fr/endi/production.ini Restart=always RestartSec=500ms StartLimitInterval=0 [Install] WantedBy=multi-user.target
$ nano ~/.config/systemd/user/opteos_endi_celery_worker@.service
[Unit] Description=Optéos enDI Celery Worker After=network.target mariadb.target redis-server.target nginx.target opteos_endi.target [Service] WorkingDirectory=/home/endi/endi.opteos.fr/endi ExecStart=/home/endi/.virtualenvs/endi/bin/celery worker -A pyramid_celery.celery_app --ini /home/endi/endi.opteos.fr/endi/production.ini Restart=always RestartSec=500ms StartLimitInterval=0 [Install] WantedBy=multi-user.target
$ nano ~/.config/systemd/user/opteos_endi_celery_beat@.service
[Unit] Description=Optéos enDI Celery Beat After=network.target mariadb.target redis-server.target nginx.target opteos_endi.target opteos_endi_celery_worker.target [Service] WorkingDirectory=/home/endi/endi.opteos.fr/endi ExecStart=/home/endi/.virtualenvs/endi/bin/celery beat -A pyramid_celery.celery_app --ini /home/endi/endi.opteos.fr/endi/production.ini Restart=always RestartSec=500ms StartLimitInterval=0 [Install] WantedBy=multi-user.target
$ systemctl --user enable opteos_endi@1.service $ systemctl --user enable opteos_endi_celery_worker@1.service $ systemctl --user enable opteos_endi_celery_beat@1.service $ systemctl --user start opteos_endi@1.service $ systemctl --user status opteos_endi@1.service $ systemctl --user start opteos_endi_celery_worker@1.service $ systemctl --user status opteos_endi_celery_worker@1.service $ systemctl --user start opteos_endi_celery_beat@1.service $ systemctl --user status opteos_endi_celery_beat@1.service $ journalctl -f
Configurer la rotation des journaux dans le fichier /etc/logrotate.d/endi
:
# nano /etc/logrotate.d/endi
/home/endi/endi.opteos.fr/endi/logfile.log { rotate 6 monthly missingok compress notifempty create 0664 endi endi su endi endi }
# chmod g-w /etc/logrotate.d/endi
Installation des scripts de maintenance exécutés avec des tâches planifiées[modifier | modifier le wikicode]
Nettoyage des fichiers temporaires, /home/endi/endi_cleanup.sh
:
#!/bin/bash # Fichiers de session dont le dernier accès est supérieur à une semaine find /home/endi/endi.opteos.fr/endi/data/sessions/ -type f -amin +10080 -print0 | xargs -0 -r rm # Fichiers de cache dont le dernier accès est supérieur à une journée find /home/endi/endi.opteos.fr/endi/data/cache/data/ -type f -amin +1440 -print0 | xargs -0 -r rm # Fichiers temporaires de téléversement dont le dernier accès est supérieur à une journée find /home/endi/endi.opteos.fr/endi/tmp/tempdir/ -type f -amin +1440 -print0 | xargs -0 -r rm # Fichiers de cache Python dont la dernière modification est supérieure à une semaine find /tmp/tmp* -maxdepth 0 -type d -mmin +10080 -print0 | xargs -0 -r rm -r
Redémarrage de l’application, /home/endi/restart_endi.sh
:
#!/bin/bash # Required variables for `systemctl --user` export XDG_RUNTIME_DIR=/run/user/`id -u` export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" # Required to use cairo 1.15.4 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib source /home/endi/.virtualenvs/endi/bin/activate systemctl --user stop opteos_endi@1.service systemctl --user start opteos_endi@1.service
Tâches planifiées crontab
:
# Supprimer régulièrement les fichiers temporaires 12 6 * * * /home/endi/endi_cleanup.sh # Redémarrer enDI quotidiennement pour éviter le bogue avec MySQL 22 6 * * * /home/endi/restart_endi.sh
Accéder à l’application : https://endi.opteos.fr/.