DocScoDoc/docs/GuideInstallDebian11Advanced.md

122 lines
4.0 KiB
Markdown
Raw Permalink Normal View History

# Configuration manuelle de ScoDoc sur Debian 11 (Bullseye)
Instructions pour utilisateurs ne souhaitant pas utiliser le script
/opt/scodoc/tools/configure-scodoc9.sh
Toutes les opérations décrites sur cette page sont effectuées par ce script.
Cette page est donc destinée aux curieux et futurs développeurs. Se référer au
script lui même pour les détails.
## Activation du firewall
(optionnel, recommandé)
ufw default deny incoming
ufw default allow outgoing
ufw allow ssh
ufw allow http
ufw allow https
yes | ufw enable
## Certificats pour nginx
ScoDoc utilise le serveur Web nginx. Installer les certificats SSL
nécessaires pour https. C'est indispensable sur un serveur en production.
Sur un serveur de test, pour faire des essais, vous pouvez utiliser des
certificats auto-signés. Procéder ainsi:
su scodoc # utilisateur scodoc
cd /opt/scodoc-data
mkdir -p certs && openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -keyout certs/key.pem -out certs/cert.pem
Répondre aux questions, la seule importante étant `Common Name (e.g. server
FQDN or YOUR name)` en réponse à laquelle vous devez fournir le nom que vous
utiliserez pour vous adresser au serveur: par exemple
`monscodoc.mondomaine.fr`. Ce nom dépend de votre configuration réseau.
Sinon, éditer le fichier `/etc/nginx/sites-available/scodoc9.nginx` pour
indiquer vos certificats.
## Démarrage de nginx et redis
su # se connecter en root d'une manière ou d'une autre
systemctl restart nginx
systemctl start redis
Il est utile de vérifier que le serveur Web a bien démarré, avec
systemctl status nginx
## Création des bases de données
2022-10-31 14:45:52 +01:00
ScoDoc 9 utilise une base de données unique, regroupant tous les
départements et les utilisateurs. Elle est nommée `SCODOC` (et `SCODOC_DEV`
en mode développement, ou `SCODOC_TEST`pour les tests unitaires).
Cette base est créée via `sqlalchemy` (l'ORM habituel de Flask).
Pour créer la base de données, lancer le script:
su scodoc # au besoin (pas root !)
cd /opt/scodoc
./tools/create_database.sh SCODOC
./tools/create_database.sh SCODOC_DEV # pour la base "developement"
./tools/create_database.sh SCODOC_TEST # pour les tests unitaires
2022-10-31 14:45:52 +01:00
Les bases créées appartiennent à l'utilisateur (rôle) postgres `scodoc`
(qui a été créé par le script d'installation précédent).
## Variables d'environnement
2022-10-31 14:45:52 +01:00
Le serveur utilise des variables d'environnement donnant la
configuration de base.
Le plus simple est de les grouper dans un fichier `.env` (dans
2022-10-31 14:45:52 +01:00
`/opt/scodoc-data/.env`)
qui sera lu automatiquement au démarrage:
# .env for ScoDoc (production)
FLASK_APP=scodoc.py
FLASK_ENV=production
MAIL_SERVER=votre.serveur.de.mail.net # ou vide si pas de mail
MAIL_PORT=25
SCODOC_ADMIN_MAIL="adresse.admin@toto.fr" # important: le mail de admin
SECRET_KEY="CGGAJAKlh6789JJK?KNAb=" # une chaine aléatoire à changer
2021-08-25 22:37:03 +02:00
Le fichier `/opt/scodoc/.env-exemple` est donné à titre... d'exemple. Vous pouvez faire:
# en tant qu'utilisateur scodoc
2021-08-25 22:37:03 +02:00
cp /opt/scodoc/.env-exemple /opt/scodoc-data/.env
nano /opt/scodoc-data/.env # édition
Il est nécessaire de modifier MAIL_SERVER, SCODOC_ADMIN_MAIL et SECRET_KEY.
Cette dernière variable doit contenir une chaîne aléatoire qui servira
de clé pour sécuriser les formulaires. Vous pouvez utiliser la commande suivante
pour afficher une chaine de ce genre (choisie au hasard), que vous copierez
dans votre fichier `.env`:
python3 -c "import uuid; print(uuid.uuid4().hex)"
2021-08-25 22:37:03 +02:00
Note: le fichier utilisé par Flask est bien sûr `/opt/scodoc/.env`,
mais l'installeur créé un lien symbolique vers `/opt/scodoc-data/.env` afin
de conserver ce fichier durant les mise à jour par `apt-get upgrade`.
## Initialisation de la base et de l'utilisateur admin
En tant qu'utilisateur `scodoc`:
su scodoc # si besoin
cd /opt/scodoc
source venv/bin/activate
Puis initialisation de l'appli:
flask db-init
Et saisie du mot de passe `admin`:
flask user-password admin