ScoDoc/tools/docker-entrypoint.sh

103 lines
3.6 KiB
Bash
Executable File

#!/bin/bash
# Script à lancer en tant que root au démarrage du container Docker
echo "Initialisation de ScoDoc..."
# 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"
if [ -z "${SCODOC_DATABASE_URI}" ]; then
echo "La variable d'environnement SCODOC_DATABASE_URI doit être définie pour poursuivre le démarrage."
exit 1
fi
db_name=$(echo $SCODOC_DATABASE_URI | sed -E 's/.*\/([^\/]+)$/\1/')
if [[ "$db_name" == "$SCODOC_DATABASE_URI" ]]; then
# nom de la base de données par défaut si non spécifié dans l'URI
db_name="SCODOC"
export SCODOC_DATABASE_URI="$SCODOC_DATABASE_URI/$db_name"
fi
# URI de la base 'postgres', nécessaire pour les commandes de création de base
PG_DATABASE_URI=$(echo "$SCODOC_DATABASE_URI" | sed -E 's|/[^/]+$|/postgres|')
if [ -z "${CACHE_REDIS_HOST}" ]; then
echo "La variable d'environnement CACHE_REDIS_HOST doit être définie pour poursuivre le démarrage."
exit 1
fi
cd /opt/scodoc || die "Error: chdir to /opt/scodoc"
mkdir -p /opt/scodoc-data || die "Error: mkdir /opt/scodoc-data"
# ------------ CREATION ENVIRONNEMENT
# Création du fichier .env si absent
if ! [ -f /opt/scodoc-data/.env ]; then
if [ -z "${SCODOC_ADMIN_MAIL}" ]; then
echo "La variable d'environnement SCODOC_ADMIN_MAIL doit être définie pour poursuivre l'installation (nécessaire uniquement pour le premier démarrage)."
exit 1
fi
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 Dockerfile, mais certaines fausses manips de nos utilisateurs
# ont pu changer ça:
set_scodoc_var_dir
change_scodoc_file_ownership
# ------------ CREATION BASE DE DONNEES
# Création de la base de données si elle n'existe pas
echo "Connexion à la base de données.."
if ! pg_isready -d $PG_DATABASE_URI --timeout=30; then
echo "Erreur: impossible de se connecter à la base de données."
exit 1
fi
if psql $PG_DATABASE_URI -lqt | cut -d \| -f 1 | grep -iqw "$db_name"; then
echo "Connexion réussie, la base $db_name existe."
else
echo "Connexion réussie, la base $db_name n'existe pas. Création..."
su -c "/opt/scodoc/tools/create_database.sh $db_name" scodoc || die "Erreur: create_database.sh $db_name"
echo "Base $db_name créée."
# ------------ INITIALISATION BASE DE DONNEES
echo
echo "Création des tables et du compte admin"
echo
if [ -z "${SCODOC_ADMIN_PASSWORD}" ]; then
echo "La variable d'environnement SCODOC_ADMIN_PASSWORD doit être définie pour poursuivre l'installation (nécessaire uniquement pour le premier démarrage)."
exit 1
fi
su -c "cd /opt/scodoc; source venv/bin/activate; flask db upgrade; flask sco-db-init; flask user-password admin --password $SCODOC_ADMIN_PASSWORD" scodoc || die "Erreur: sco-db-init"
echo
echo "Base initialisée et admin créé."
echo
fi
# ------------ LANCEMENT DES SERVICES
echo
echo "ScoDoc configuré et démarré."
echo "Vous pouvez vous connecter en web et vous identifier comme \"admin\"."
echo
su -c "cd /opt/scodoc; /opt/scodoc/venv/bin/gunicorn -b 0.0.0.0:8000 -w 4 --timeout 600 scodoc:app" scodoc