Skip to content

DeployByInventory

Plateforme self-hosted style Laravel Forge pour déployer des apps via inventaire YAML + labs éphémères.

Statut : En cours de développement

Principes clés :

  • YAML = source de vérité pour les apps permanentes
  • BDD = stockage transitoire pour les labs éphémères
  • Agnostique backend (Ansible ou Nomad)
  • Chaque projet fournit son deploy.yml

Règle de développement (TDD)

  • Les tests définissent le comportement attendu (la spécification)
  • Le code doit satisfaire les tests, pas l'inverse
  • On ne modifie un test QUE si le requirement change ou si le test est incorrect

Architecture

┌─────────────────────────────────────────┐
│       DeployByInventory (Laravel)       │
├─────────────────────────────────────────┤
│  UI Web │ API REST │ Cron               │
└────────────────┬────────────────────────┘
       ┌─────────┴─────────┐
       │                   │
       ▼                   ▼
┌─────────────┐    ┌─────────────┐
│ YAML (Git)  │    │     BDD     │
│ Apps perm.  │    │ Labs éphém. │
└─────────────┘    └─────────────┘
       │                   │
       └─────────┬─────────┘
       ┌─────────┴─────────┐
       │                   │
       ▼                   ▼
┌─────────────┐    ┌─────────────┐
│   Ansible   │    │    Nomad    │
└─────────────┘    └─────────────┘
       │                   │
       └─────────┬─────────┘
         ┌─────────────┐
         │  Serveurs   │
         └─────────────┘

Qui gère quoi ?

Rôle Fichier Responsabilité
Dev deploy.yml (dans projet) QUOI faire
Ops inventory.yml (central) déployer

Use Cases

ID Use Case Description
UC-01 Lister les apps Affiche toutes les apps depuis inventory.yml
UC-02 Voir détail app Config + historique déploiements
UC-03 Déployer app Déploie une version sur le backend configuré
UC-04 Rollback app Redéploie une version précédente
ID Use Case Description
UC-05 Lister commandes Commandes depuis deploy.yml du projet
UC-06 Exécuter commande Lance une commande sur l'app déployée
ID Use Case Description
UC-07 Lister labs Labs actifs avec TTL restant
UC-08 Créer lab Déploie un environnement éphémère
UC-09 Prolonger lab Ajoute du temps au TTL
UC-10 Détruire lab Supprime le lab manuellement
UC-11 Cleanup Cron détruit les labs expirés
ID Use Case Description
UC-12 Auto-deploy Déclenche deploy sur git push

Stack technique

Composant Technologie
Backend Laravel 12 (PHP 8.2+)
Frontend Livewire + Tailwind
BDD SQLite (dev) / PostgreSQL (prod)
Queue Laravel Queue (database driver)
Auth Laravel Breeze
Tests Pest (TDD)
YAML symfony/yaml
Git czproject/git-php

Backends : Ansible vs Nomad

✓ Contrôle total
✓ Pas de daemon
✓ Legacy friendly
✓ Scaling auto
✓ Destroy facile
✓ Bin-packing

Roadmap

Phase Priorité Objectif
Foundation 🔴 Critique Lire inventory.yml, afficher apps
Deploy Ansible 🔴 Critique Déployer via Ansible
Commandes 🟡 Haute Exécuter commandes ad-hoc
Backend Nomad 🟡 Haute Support conteneurs
Labs 🟡 Haute Environnements éphémères
Webhooks 🟢 Moyenne Auto-deploy sur push
Polish 🟢 Moyenne Production-ready

Format des fichiers

applications:
  taxiapp:
    repo: https://gitlab.com/example/taxiapp
    domain: taxiapp.example.com
    backend: ansible
    auto_deploy: true
    hosts:
      - hostname: srv-web-01
        ip: 192.168.1.10
type: laravel

deploy:
  - composer install --no-dev
  - npm run build
  - php artisan migrate --force

commands:
  - name: "Clear cache"
    command: "php artisan cache:clear"

Risques et mitigations

Risque Mitigation
Ansible non installé Vérifier au démarrage
Nomad non accessible Mode dégradé Ansible-only
Webhook non sécurisé Validation signature obligatoire
Lab oublié (coût) TTL max + alertes
Déploiement concurrent Lock par app

Source