forked from ScoDoc/ScoDoc
161 lines
5.1 KiB
Bash
Executable File
161 lines
5.1 KiB
Bash
Executable File
#!/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" != "12" ]
|
|
then
|
|
echo "Erreur: version Linux Debian incompatible"
|
|
echo "Utiliser un système Debian Bookwork (12)"
|
|
echo
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "can't detect Debian version"
|
|
exit 1
|
|
fi
|
|
echo "--- Configuration de ScoDoc pour Debian 12"
|
|
|
|
# ------------ 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'
|
|
apt-get install ufw
|
|
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 CROWDSEC OPTIONNELLE
|
|
echo
|
|
echo "CrowdSec aide à protéger votre serveur contre les attaques malveillantes en analysant les journaux et en appliquant des mesures de sécurité."
|
|
echo -n "Voulez-vous installer et configurer CrowdSec ? (y/n) [n] "
|
|
read -r ans
|
|
if [ "$(norm_ans "$ans")" = 'Y' ]
|
|
then
|
|
echo 'Configuration des dépôts Crowdsec'
|
|
curl -s https://install.crowdsec.net | sh
|
|
echo 'Installation de Crowdsec'
|
|
apt-get install crowdsec crowdsec-nginx-bouncer
|
|
cscli collections install crowdsecurity/nginx
|
|
systemctl reload crowdsec
|
|
echo
|
|
echo "Crowdsec activé."
|
|
echo
|
|
fi
|
|
|
|
# ------------ CONFIG NGINX
|
|
# --- CERTIFICATS AUTO-SIGNES
|
|
echo
|
|
echo "Le serveur Web utilisé par ScoDoc est 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
|
|
|
|
|
|
|