116 lines
3.4 KiB
Markdown
116 lines
3.4 KiB
Markdown
# 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
|
||
```
|