# 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

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

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

Le serveur utilise des variables d'environnement donnant la 
configuration de base.
Le plus simple est de les grouper dans un fichier `.env` (dans
 `/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
    
Le fichier `/opt/scodoc/.env-exemple` est donné à titre... d'exemple. Vous pouvez faire:

    # en tant qu'utilisateur scodoc
    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)"

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