Files
innotexBoard/DOCKER_UPDATES_COMPLETE.md
innotex c51592c7ea feat: Add Docker image update system (TrueNAS Scale inspired)
- Implement UpdateService for image version checking and atomic updates
- Add DockerComposeManager for centralized docker-compose management
- Create 12 docker-compose references in /home/innotex/Docker
- Add 13 new API endpoints (6 for images, 7 for compose management)
- Add comprehensive documentation and examples
2026-01-16 19:37:23 +01:00

9.0 KiB
Raw Permalink Blame History

🎯 Résumé - Système de Mise à Jour Docker

Implémentation complète d'un système de mise à jour Docker inspiré de TrueNAS Scale pour InnotexBoard.

Ce qui a été fait

1. Backend API (FastAPI)

Services créés:

  • update_service.py (275 lignes)

    • Classe UpdateService pour gérer les mises à jour
    • Support du Docker Registry V2 API
    • Versioning sémantique
    • Mise à jour atomique des conteneurs
    • Nettoyage des images orphelines
    • Parsing intelligent des noms d'images
  • compose_manager.py (185 lignes)

    • Classe DockerComposeManager pour centraliser la gestion
    • Découverte automatique des docker-compose
    • Commandes complètes: start, stop, restart, down, pull, logs
    • Retour d'état en JSON

Endpoints créés:

Docker Images Management

GET    /api/v1/docker/images                              # Lister toutes les images
GET    /api/v1/docker/images/check-update/{image_name}   # Vérifier une mise à jour
GET    /api/v1/docker/images/check-all-updates           # Vérifier toutes les mises à jour
POST   /api/v1/docker/images/pull                        # Télécharger une image
POST   /api/v1/docker/containers/{id}/update-image       # Mettre à jour un conteneur
POST   /api/v1/docker/images/prune                       # Nettoyer les images orphelines

Docker Compose Management

GET    /api/v1/docker/compose/list                       # Lister tous les docker-compose
GET    /api/v1/docker/compose/{name}/status              # Vérifier l'état
POST   /api/v1/docker/compose/{name}/start               # Démarrer
POST   /api/v1/docker/compose/{name}/stop                # Arrêter
POST   /api/v1/docker/compose/{name}/down                # Arrêter et supprimer
POST   /api/v1/docker/compose/{name}/restart             # Redémarrer
POST   /api/v1/docker/compose/{name}/pull                # Mettre à jour les images
GET    /api/v1/docker/compose/{name}/logs                # Récupérer les logs

2. Docker Compose References

Créé: /home/innotex/Docker/

11 docker-compose de référence:

  1. portainer - Interface GUI Docker
  2. sonarr - Gestion des séries TV
  3. radarr - Gestion des films
  4. qbittorrent - Client torrent
  5. jellyfin - Serveur média open-source
  6. plex - Serveur média premium
  7. nextcloud - Cloud self-hosted
  8. nginx - Web server / Reverse proxy
  9. pihole - DNS ad-blocker
  10. homeassistant - Domotique
  11. watchtower - Mise à jour automatique
  12. monitoring - Prometheus + Grafana

Chaque docker-compose inclut:

  • Labels de versioning (com.innotexboard.*)
  • Support de la détection de mises à jour
  • Configuration prête à l'emploi
  • Volumes et ports configurés

3. Documentation

  • DOCKER_UPDATE_SYSTEM.md - Documentation complète

    • Architecture du système
    • Workflow de mise à jour (5 étapes)
    • API endpoints complète avec exemples cURL
    • Structure des fichiers
    • Checklist de déploiement
    • Troubleshooting
  • /home/innotex/Docker/README.md - Guide d'utilisation

    • Quickstart pour chaque application
    • Instructions de mise à jour
    • Labels personnalisés
    • Structure des répertoires
  • docker-compose-registry.json - Registry de configuration

    • Métadonnées de chaque service
    • Stratégies de mise à jour
    • Schéma des labels

4. Configuration Principale

docker-compose.yml - Mis à jour avec:

labels:
  com.innotexboard.app: "app-name"
  com.innotexboard.service: "service-role"
  com.innotexboard.description: "Description"
  com.innotexboard.version: "1.0.0"
  com.innotexboard.update-enabled: "true"

🏗️ Architecture

InnotexBoard
├── Backend FastAPI
│   ├── Services
│   │   ├── update_service.py       ✅ NOUVEAU
│   │   ├── compose_manager.py      ✅ NOUVEAU
│   │   └── docker_service.py       (existant)
│   │
│   └── API Endpoints
│       ├── docker.py               ✅ AMÉLIORÉ
│       └── compose.py              ✅ NOUVEAU
│
├── Docker References
│   └── /home/innotex/Docker/
│       ├── 11 × docker-compose.*.yml  ✅ NOUVEAU
│       ├── README.md                   ✅ NOUVEAU
│       └── registry.json               ✅ NOUVEAU
│
└── Documentation
    ├── DOCKER_UPDATE_SYSTEM.md      ✅ NOUVEAU
    ├── /Docker/README.md            ✅ NOUVEAU
    └── docker-compose-registry.json ✅ NOUVEAU

🚀 Utilisation

Démarrer un service

curl -X POST http://localhost:8000/api/v1/docker/compose/portainer/start

Vérifier les mises à jour

curl http://localhost:8000/api/v1/docker/images/check-all-updates

Mettre à jour une image

curl -X POST http://localhost:8000/api/v1/docker/containers/{id}/update-image \
  -H "Content-Type: application/json" \
  -d '{"new_image":"portainer/portainer-ce","new_tag":"latest"}'

Récupérer les logs

curl http://localhost:8000/api/v1/docker/compose/portainer/logs?tail=50

📊 Statistiques

Élément Nombre Statut
Services créés 2
Endpoints Docker Images 6
Endpoints Docker Compose 7
Docker Compose références 11
Lignes de code backend 460+
Fichiers créés 8
Fichiers modifiés 3

🔄 Workflow de Mise à Jour (TrueNAS Scale Style)

1. DÉTECTION
   └─ Check Docker Registry V2 API
   └─ Compare versions (semantic versioning)

2. NOTIFICATION
   └─ List available updates
   └─ Show version differences

3. TÉLÉCHARGEMENT
   └─ Pull new image
   └─ Verify integrity

4. MISE À JOUR ATOMIQUE
   ├─ Stop container
   ├─ Pull new image
   ├─ Remove old container
   ├─ Create new container with new image
   └─ Start new container

5. NETTOYAGE
   └─ Remove dangling images
   └─ Free up disk space

🔑 Fonctionnalités Principales

Découverte automatique des images

  • Parse intelligent des noms Docker (registry/repo:tag)
  • Support docker.io, registries personnalisés

Vérification des mises à jour

  • Docker Registry V2 API integration
  • Versioning sémantique (1.2.3)
  • Détection automatique du dernier tag stable

Mise à jour atomique

  • Stop container safely
  • Pull new image
  • Recreate container with new image
  • Automatic rollback support (old image retained)

Gestion centralisée docker-compose

  • Découverte automatique
  • Commandes standardisées (start/stop/restart)
  • Gestion des logs
  • Pull automatique des images

Nettoyage automatique

  • Remove dangling images
  • Free up disk space
  • Optional automatic pruning

📁 Fichiers Modifiés/Créés

Créés:

backend/app/services/update_service.py          (275 lignes)
backend/app/services/compose_manager.py         (185 lignes)
backend/app/api/endpoints/compose.py            (125 lignes)
DOCKER_UPDATE_SYSTEM.md                         (450 lignes)
/home/innotex/Docker/docker-compose.*.yml      (11 fichiers)
/home/innotex/Docker/README.md                  (250 lignes)
/home/innotex/Docker/docker-compose-registry.json
test_docker_updates.sh

Modifiés:

docker-compose.yml                              (+ labels)
backend/app/api/endpoints/docker.py             (+ 8 endpoints)
backend/app/api/routes.py                       (+ compose router)

🎓 Technologies Utilisées

  • FastAPI - Framework web asynchrone
  • Docker SDK - Communication avec Docker daemon
  • Requests - Docker Registry V2 API calls
  • Subprocess - Exécution docker-compose
  • Pydantic - Validation des données

🔒 Sécurité

  • Tous les endpoints sécurisés par authentification JWT
  • Permissions vérifiées via get_current_user
  • Validation des inputs
  • Gestion des erreurs robuste

📝 Notes d'Implémentation

Points Forts:

Architecture similaire à TrueNAS Scale
Support complet du versioning Docker
API centralisée et cohérente
Documentation exhaustive
Docker Compose references prêtes à l'emploi

Améliorations Futures:

🔜 Interface web complète (frontend Vue.js)
🔜 Notifications de mise à jour
🔜 Historique des mises à jour
🔜 Rollback automatique en cas d'erreur
🔜 Mise à jour programmée (cron)
🔜 Support des registries privés
🔜 Webhooks Docker

Prochaines Étapes

  1. Frontend - Créer des composants Vue.js pour l'interface utilisateur
  2. Tests - Écrire des tests unitaires pour les services
  3. CI/CD - Intégrer avec un pipeline de déploiement
  4. Notifications - Ajouter des alertes (email, webhook, etc.)
  5. Monitoring - Intégrer Prometheus pour les métriques

📞 Support

Pour toute question ou problème:

  • Consulter DOCKER_UPDATE_SYSTEM.md
  • Consulter /home/innotex/Docker/README.md
  • Vérifier les logs du backend
  • Tester avec test_docker_updates.sh

Statut: Implémentation complète
Date: 16 janvier 2026
Version: 1.0.0