..

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 :

# 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

    docker compose up -d --build
    
  2. Créer le premier utilisateur admin (une seule fois, si aucun utilisateur n'existe encore) :

    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 :

    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 lextérieur du container :

    curl -H "Authorization: Bearer $TOKEN" http://localhost:8008/api/hosts
    

Note : Dès quun utilisateur existe dans la base, les appels avec X-API-Key ne sont plus autorisés. Toute lAPI passe par les tokens JWT.

2. Démarrage (Local)

Pour lancer l'application localement avec Docker Compose :

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) :

.\build-img.ps1

Sous Linux :

docker build -f Dockerfile -t homelab-automation-api:latest ..

Déploiement

Pousse l'image vers le registre configuré :

.\deploy-img.ps1

Mise à jour

Sur le serveur de destination, pour tirer la dernière image et redémarrer :

./maj.sh