homelab_automation/run_dev.sh
Bruno Charest 984d06a223
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
feat: Implement comprehensive database schema with new models, CRUD operations, and documentation for host metrics, Docker management, and terminal sessions, while removing old test files.
2026-03-05 10:16:13 -05:00

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