# Docker Configuration for Homelab Automation Ce dossier contient tous les fichiers nécessaires pour conteneuriser et déployer l'application Homelab Automation API. ## Structure du dossier - **Dockerfile** : Définition de l'image Docker. - **docker-compose.yml** : Définition de la stack (Container API + Volumes). - **.env.example** : Modèle de configuration des variables d'environnement. - **init.sh** : Script d'initialisation de l'environnement local. - **build-img.ps1** : Script PowerShell pour construire l'image (optimisé pour WSL). - **deploy-img.sh / .ps1** : Scripts pour pousser l'image vers un registre Docker privé. - **maj.sh** : Script pour mettre à jour la stack depuis le registre. ## Prérequis - Docker Engine & Docker Compose - Pour Windows : WSL 2 activé (recommandé pour les scripts .ps1) ## Installation et Démarrage ### 1. Initialisation Lancez le script d'initialisation pour préparer le fichier `.env` et les répertoires de données : ```bash # Dans le dossier docker/ bash init.sh ``` Ensuite, éditez le fichier `.env` généré pour configurer : - `API_KEY` : Clé API *legacy* (facultative, utilisée seulement avant la création du premier utilisateur). - `JWT_SECRET_KEY` : Clé secrète utilisée pour signer les tokens JWT (à **changer impérativement** en production). - `JWT_EXPIRE_MINUTES` : Durée de validité des tokens (en minutes, ex: `1440` pour 24h). - `SSH_USER` : L'utilisateur pour les connexions Ansible. - `NTFY_*` : La configuration des notifications (optionnel). ### Flux de login dans un déploiement Docker 1. **Démarrer la stack** ```bash docker compose up -d --build ``` 2. **Créer le premier utilisateur admin** (une seule fois, si aucun utilisateur n'existe encore) : ```bash curl -X POST "http://localhost:8008/api/auth/setup" \ -H "Content-Type: application/json" \ -d '{ "username": "admin", "password": "motdepasse-securise", "display_name": "Administrateur" }' ``` 3. **Se connecter et récupérer un token JWT** : ```bash TOKEN=$(curl -s -X POST "http://localhost:8008/api/auth/login/json" \ -H "Content-Type: application/json" \ -d '{"username": "admin", "password": "motdepasse-securise"}' | jq -r .access_token) ``` 4. **Appeler l'API depuis l’extérieur du container** : ```bash curl -H "Authorization: Bearer $TOKEN" http://localhost:8008/api/hosts ``` > Note : Dès qu’un utilisateur existe dans la base, les appels avec `X-API-Key` ne sont plus autorisés. Toute l’API passe par les tokens JWT. ### 2. Démarrage (Local) Pour lancer l'application localement avec Docker Compose : ```bash docker compose up -d --build ``` L'API sera accessible sur `http://localhost:8008`. ## Construction et Déploiement (Avancé) Si vous utilisez un registre Docker privé (ex: Nexus, Harbor, Registry local), vous pouvez utiliser les scripts de build et de déploiement. ### Configuration du Registre Modifiez les variables dans `.env` (ou laissez les valeurs par défaut si elles conviennent) : - `REGISTRY_HOST` - `REGISTRY_PORT` - `IMAGE_NAME` ### Construction Sous Windows (via PowerShell) : ```powershell .\build-img.ps1 ``` Sous Linux : ```bash docker build -f Dockerfile -t homelab-automation-api:latest .. ``` ### Déploiement Pousse l'image vers le registre configuré : ```powershell .\deploy-img.ps1 ``` ### Mise à jour Sur le serveur de destination, pour tirer la dernière image et redémarrer : ```bash ./maj.sh ```