#!/bin/bash # Script à lancer en tant que root sur un nouveau serveur # pour terminer la configuration juste après apt-get install scodoc9 # On ne place pas ces commandes dans le postinst # car c'est spécifique et optionnel. # Le répertoire de ce script: SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" source "$SCRIPT_DIR/config.sh" source "$SCRIPT_DIR/utils.sh" cd /opt/scodoc || die "Error: chdir to /opt/scodoc" check_uid_root # ------------ VERIF SYSTEME if [ -e /etc/debian_version ] then debian_version=$(cat /etc/debian_version) debian_version=${debian_version%%.*} echo "Detected Debian version: ${debian_version}" if [ "$debian_version" != "11" ] then echo "Erreur: version Linux Debian incompatible" echo "Utiliser un système Debian Bullseye (11)" echo exit 1 fi else echo "can't detect Debian version" exit 1 fi echo "--- Configuration de ScoDoc pour Debian 11" # ------------ CONFIG FIREWALL OPTIONNELLE echo echo "Le firewall aide a proteger votre serveur d'intrusions indesirables." echo -n "Voulez vous configurer un firewall minimal (ufw) ? (y/n) [n] " read -r ans if [ "$(norm_ans "$ans")" = 'Y' ] then echo 'Installation du firewall IP ufw (voir documentation Debian)' echo ' on autorise les connexions ssh et https' ufw default deny incoming ufw default allow outgoing ufw allow ssh ufw allow http ufw allow https yes | ufw enable echo echo "firewall ufw activé." echo fi # ------------ CONFIG NGINX # --- CERTIFICATS AUTO-SIGNES echo echo "Le serveur Web utilisé par ScoDoc et nginx" echo "Il est possible d'utiliser des certificats cryptographiques" echo "auto-signés, qui ne seront pas reconnus comme de confiance" echo "par les navigateurs, permettent de tester." echo "Si vous avez déjà de vrais certificats, passez cette étape et installez-les ensuite." echo -n 'Voulez-vous générer des certificats ssl auto-signés ? (y/n) [y] ' read -r ans if [ "$(norm_ans "$ans")" != 'N' ] then # génération des certifs: cert.pem key.pem dans /opt/scodoc-data/certs/ su -c "(cd $SCODOC_VAR_DIR && mkdir -p certs && openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -keyout certs/key.pem -out certs/cert.pem)" "$SCODOC_USER" fi # ------------ CREATION ENVIRONNEMENT echo echo "Créer (et écraser) le fichier /opt/scodoc-data/.env" echo " définissant les variables d'environnement ?" echo "(si vous ne savez pas, répondez oui !)" echo -n 'Générer /opt/scodoc-data/.env ? (y/n) [y] ' read -r ans if [ "$(norm_ans "$ans")" != 'N' ] then echo -n "Adresse mail de l'administrateur du site: " read SCODOC_ADMIN_MAIL SECRET_KEY=$(python3 -c "import uuid; print(uuid.uuid4().hex)") cat > /opt/scodoc-data/.env <<EOF # .env for ScoDoc (production) FLASK_APP=scodoc.py FLASK_ENV=production SCODOC_ADMIN_MAIL="$SCODOC_ADMIN_MAIL" # important: le mail de admin SECRET_KEY="$SECRET_KEY" # une chaine aléatoire" EOF echo "Fichier /opt/scodoc-data/.env créé avec:" cat /opt/scodoc-data/.env echo echo "Vous pouvez le modifier si besoin." echo fi # ------------ VERIFICATIONS DES REPERTOIRES ET DROITS # déjà fait par le postinst, mais certaines fausses manips de nos utilisateurs # ont pu changer ça: set_scodoc_var_dir change_scodoc_file_ownership # ------------ CREATION BASE DE DONNEES echo echo "Voulez-vous créer la base SQL SCODOC ?" echo "(répondre oui sauf si vous savez vraiment ce que vous faites)" echo -n 'Créer la base de données SCODOC ? (y/n) [y] ' read -r ans if [ "$(norm_ans "$ans")" != 'N' ] then # on ne créée pas les bases TEST et DEV su -c "/opt/scodoc/tools/create_database.sh SCODOC" "$SCODOC_USER" || die "Erreur: create_database.sh SCODOC" echo "base SCODOC créée." # ------------ INITIALISATION BASE DE DONNEES echo echo "Création des tables et du compte admin" echo msg="Saisir le mot de passe administrateur \(admin, via le web\):" su -c "(cd /opt/scodoc; source venv/bin/activate; flask db upgrade; flask sco-db-init; echo; echo $msg; flask user-password admin)" "$SCODOC_USER" || die "Erreur: sco-db-init" echo echo "Base initialisée et admin créé." echo fi # ------------ LANCEMENT DES SERVICES systemctl start redis systemctl start nginx systemctl start scodoc9 echo echo "Service configuré et démarré." echo "Vous pouvez vous connecter en web et vous identifier comme \"admin\"." echo "ou bien importer vos données et comptes de la version ScoDoc 7." echo