Some checks failed
Tests / Backend Tests (Python) (3.10) (push) Has been cancelled
Tests / Backend Tests (Python) (3.11) (push) Has been cancelled
Tests / Backend Tests (Python) (3.12) (push) Has been cancelled
Tests / Frontend Tests (JS) (push) Has been cancelled
Tests / Integration Tests (push) Has been cancelled
Tests / All Tests Passed (push) Has been cancelled
128 lines
5.2 KiB
Bash
128 lines
5.2 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
# Chargement des variables d'environnement depuis .env (si présent)
|
|
set -a
|
|
if [ -f .env ]; then
|
|
. ./.env
|
|
fi
|
|
set +a
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
# --- Gestion MySQL via Docker (si DB_ENGINE=mysql) ---
|
|
if [ "$DB_ENGINE" == "mysql" ]; then
|
|
MYSQL_CONTAINER="homelab-mysql"
|
|
echo "🔍 Mode MySQL détecté. Vérification du conteneur $MYSQL_CONTAINER..."
|
|
|
|
# Paramètres par défaut si non définis dans .env
|
|
M_USER="${MYSQL_USER:-homelab}"
|
|
M_PASS="${MYSQL_PASSWORD:-password}"
|
|
M_DB="${MYSQL_DATABASE:-homelab}"
|
|
M_PORT="${MYSQL_PORT:-3306}"
|
|
M_ROOT_PASS="${MYSQL_ROOT_PASSWORD:-rootpassword}"
|
|
|
|
if ! docker ps -a --format '{{.Names}}' | grep -q "^${MYSQL_CONTAINER}$"; then
|
|
echo "🚀 Création du conteneur MySQL $MYSQL_CONTAINER..."
|
|
docker run --name "$MYSQL_CONTAINER" \
|
|
-e MYSQL_ROOT_PASSWORD="$M_ROOT_PASS" \
|
|
-e MYSQL_DATABASE="$M_DB" \
|
|
-e MYSQL_USER="$M_USER" \
|
|
-e MYSQL_PASSWORD="$M_PASS" \
|
|
-p "$M_PORT:3306" \
|
|
-d mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
|
|
|
|
echo "⏳ Attente du démarrage de MySQL..."
|
|
until docker exec "$MYSQL_CONTAINER" mysqladmin ping -h localhost --silent; do
|
|
sleep 2
|
|
done
|
|
echo "✅ MySQL est prêt et base de données '$M_DB' créée."
|
|
else
|
|
if ! docker ps --format '{{.Names}}' | grep -q "^${MYSQL_CONTAINER}$"; then
|
|
echo "▶️ Démarrage du conteneur MySQL existant..."
|
|
docker start "$MYSQL_CONTAINER"
|
|
echo "⏳ Attente du démarrage de MySQL..."
|
|
until docker exec "$MYSQL_CONTAINER" mysqladmin ping -h localhost --silent; do
|
|
sleep 2
|
|
done
|
|
else
|
|
echo "✅ Conteneur MySQL déjà en cours d'exécution."
|
|
fi
|
|
|
|
# Vérifier si la base de données existe, sinon la créer
|
|
echo "Check/Create database $M_DB..."
|
|
docker exec "$MYSQL_CONTAINER" mysql -uroot -p"$M_ROOT_PASS" -e "CREATE DATABASE IF NOT EXISTS \`$M_DB\`;" 2>/dev/null || \
|
|
docker exec "$MYSQL_CONTAINER" mysql -uroot -p"$M_ROOT_PASS" -e "CREATE DATABASE IF NOT EXISTS $M_DB;"
|
|
fi
|
|
|
|
# --- Gestion CloudBeaver (Interface Web MySQL) ---
|
|
CLOUDBEAVER_CONTAINER="homelab-cloudbeaver"
|
|
CLOUDBEAVER_PORT="${CLOUDBEAVER_PORT:-8080}"
|
|
echo "🔍 Vérification du conteneur $CLOUDBEAVER_CONTAINER..."
|
|
|
|
if ! docker ps -a --format '{{.Names}}' | grep -q "^${CLOUDBEAVER_CONTAINER}$"; then
|
|
echo "🚀 Création du conteneur CloudBeaver $CLOUDBEAVER_CONTAINER..."
|
|
docker run --name "$CLOUDBEAVER_CONTAINER" \
|
|
-p "$CLOUDBEAVER_PORT:8978" \
|
|
-v cloudbeaver_data:/opt/cloudbeaver/workspace \
|
|
-d dbeaver/cloudbeaver:latest
|
|
echo "✅ CloudBeaver est prêt sur http://localhost:$CLOUDBEAVER_PORT"
|
|
else
|
|
if ! docker ps --format '{{.Names}}' | grep -q "^${CLOUDBEAVER_CONTAINER}$"; then
|
|
echo "▶️ Démarrage du conteneur CloudBeaver existant..."
|
|
docker start "$CLOUDBEAVER_CONTAINER"
|
|
else
|
|
echo "✅ Conteneur CloudBeaver déjà en cours d'exécution."
|
|
fi
|
|
echo "🌐 CloudBeaver accessible sur http://localhost:$CLOUDBEAVER_PORT"
|
|
fi
|
|
|
|
# Forcer la DATABASE_URL correcte pour l'application si elle utilise des placeholders ou est absente
|
|
# On reconstruit l'URL avec les variables réelles pour éviter les erreurs de connexion
|
|
export DATABASE_URL="mysql+aiomysql://$M_USER:$M_PASS@localhost:$M_PORT/$M_DB"
|
|
echo "🔗 DATABASE_URL configurée pour MySQL."
|
|
fi
|
|
|
|
# Workaround pour WSL: SQLite ne fonctionne pas bien sur /mnt/c/...
|
|
# Utiliser un chemin Linux natif pour la base de données (force override) uniquement en mode SQLite
|
|
if [[ "$(pwd)" == /mnt/* ]] && [ "$DB_ENGINE" != "mysql" ]; then
|
|
mkdir -p ~/homelab-data/logs
|
|
export DATABASE_URL="sqlite+aiosqlite:////home/$USER/homelab-data/homelab.db"
|
|
export LOGS_DIR="$HOME/homelab-data/logs"
|
|
echo "⚠️ WSL détecté: BD stockée dans ~/homelab-data/"
|
|
fi
|
|
|
|
# copier les clés SSH du répertoire docker/ssh_keys vers ~/.ssh
|
|
cp docker/ssh_keys/id_automation_ansible ~/.ssh/
|
|
cp docker/ssh_keys/id_automation_ansible.pub ~/.ssh/
|
|
|
|
# Forcer la clé SSH utilisée par l'app (notamment pour le terminal web)
|
|
export SSH_KEY_PATH="$HOME/.ssh/id_automation_ansible"
|
|
|
|
# ajouter les droits aux clés SSH (sans changer le répertoire courant du script)
|
|
(
|
|
cd ~/.ssh
|
|
chmod 600 id_automation_ansible
|
|
chmod 644 id_automation_ansible.pub
|
|
)
|
|
|
|
# Appliquer les migrations avant de démarrer l'app (important si la BD vient d'être supprimée)
|
|
|
|
# Utiliser le venv du projet si présent (important: dépendances runtime comme asyncssh)
|
|
PYTHON_BIN="python"
|
|
ALEMBIC_BIN="alembic"
|
|
if [ -x ".venv/bin/python" ]; then
|
|
PYTHON_BIN=".venv/bin/python"
|
|
if [ -x ".venv/bin/alembic" ]; then
|
|
ALEMBIC_BIN=".venv/bin/alembic"
|
|
else
|
|
ALEMBIC_BIN="$PYTHON_BIN -m alembic"
|
|
fi
|
|
fi
|
|
|
|
# Les migrations sont gérées automatiquement par l'application au démarrage (init_db)
|
|
# $ALEMBIC_BIN upgrade head
|
|
|
|
# Commande de démarrage du backend FastAPI
|
|
$PYTHON_BIN -m uvicorn main:app --host 0.0.0.0 --port 8008 --reload
|