Bruno Charest 121aab9d42
Some checks are pending
Tests / Backend Tests (Python) (3.10) (push) Waiting to run
Tests / Backend Tests (Python) (3.11) (push) Waiting to run
Tests / Backend Tests (Python) (3.12) (push) Waiting to run
Tests / Frontend Tests (JS) (push) Waiting to run
Tests / Integration Tests (push) Blocked by required conditions
Tests / All Tests Passed (push) Blocked by required conditions
docs: Add comprehensive README detailing Docker configuration, setup, and deployment instructions for the API.
2026-03-04 08:51:49 -05:00

132 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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).
> vous pouvez utiliser cette commande pour créer une clé secrète pour API_KEY et JWT_SECRET_KEY :
```bash
python -c 'import secrets; print(secrets.token_hex(32))'
```
### 2. Démarrage
lancer le script de d'installation de l'application maj.sh pour download l'image et la déployée en container
```bash
bash maj.sh
```
### 3 creation du premier utilisateur admin
Aller sur le navigateur et allez sur http://localhost:8008/ et la page de création du premier utilisateur admin f'affichera. La remplissez et appuyez sur le bouton "Créer".
### INFORMATIONS : 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 lextérieur du container** :
```bash
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 :
```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 ..
```
> Note : Si vous avez des erreurs de build, vous pouvez essayer de faire un nettoyage de l'environnement Docker avec `docker system prune -a` et faire un nettoyage plus en profondeur avec `docker system prune -a --volumes`.
### 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
```