forked from ScoDoc/ScoDoc
103 lines
3.6 KiB
Bash
Executable File
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
|