116 lines
3.4 KiB
Markdown
Raw Permalink 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).
### 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 ..
```
### 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
```