Mon toolkit DevOps maison : du provisioning au déploiement en un clic

devops
terraform
ansible
laravel
api
mlops
Author

Sylvain Pham

Published

January 1, 2026

Bilan de journée : j’ai finalisé un ensemble d’outils qui me permettent de provisionner des serveurs et déployer des applications en quelques minutes. L’objectif ? Accélérer drastiquement mes cycles d’expérimentation en tant que développeur et MLOps.

Le problème

J’ai un repo Git. Je veux le déployer. Point.

Pas envie de :

  • Configurer manuellement un serveur à chaque fois
  • Me souvenir des commandes SSH, des chemins, des ports
  • Écrire un pipeline CI/CD complet pour un simple side-project
  • Payer un PaaS pour de l’expérimentation

Mon besoin : avoir une URL de repo et obtenir un déploiement fonctionnel en quelques minutes, sans friction, tout en appliquant automatiquement les bonnes pratiques de sécurité et d’infrastructure.

Ma solution : un écosystème intégré

J’ai construit un toolkit composé de trois briques :

┌─────────────────────────────────────────────────────────────────┐
│                         WORKFLOW                                │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   Terraform/Multipass  ──►  Catalog API  ◄──  Ansible Deploy   │
│   (Provisioning)            (Inventaire)      (Déploiement)    │
│                                                                 │
│         │                       │                    │         │
│         ▼                       ▼                    ▼         │
│   Créer des VMs          Centraliser les       Déployer les    │
│   Ubuntu locales         métadonnées           applications    │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

1. Terraform + Multipass : Provisioning rapide

Multipass permet de créer des VMs Ubuntu légères en quelques secondes. Combiné avec Terraform, j’obtiens une infrastructure déclarative en YAML :

# inventories/dev/inventory.yaml
defaults:
  cpus: 2
  memory: 1G
  disk: 5G
  image: noble

instances:
  - name: portal
    cpus: 4
    memory: 8G
    disk: 40G
    tags:
      - dev
      - portal

Un simple terraform apply et j’ai un serveur prêt, avec les bonnes pratiques intégrées :

  • Secrets sécurisés : Injection automatique de ma clé SSH via HashiCorp Vault (jamais en clair dans le code)
  • Configuration reproductible : Cloud-init pour un setup identique à chaque fois
  • Inventaire centralisé : Enregistrement automatique dans le Catalog
  • Infrastructure as Code : Tout est versionné, auditable, reproductible

2. Catalog API : La source de vérité

C’est le coeur du système. Une API Laravel qui centralise :

Ressource Description
Servers IP, provider, tags, ressources, statut
Apps Repo Git, port, type (web/api/worker), commandes
Deployments Quelle app sur quel serveur, version, statut

Le dashboard donne une vue d’ensemble instantanée de l’infrastructure :

Liste des serveurs enregistrés

Les applications avec leurs repos Git sources :

Catalogue des applications

Et le statut des déploiements en temps réel :

Suivi des déploiements

L’endpoint clé : /api/inventory/ansible génère un inventaire dynamique pour Ansible.

3. Ansible : Déploiement automatisé

Deux rôles principaux :

catalog_register : Gère le cycle de vie du déploiement

# Workflow automatique
pending → deploying → running (ou failed)

git_deploy : Clone/pull le repo et configure l’app

# Déployer l'app 4 sur le serveur 1
ansible-playbook deploy.yml -e "app_id=4 server_id=1"

Le playbook applique un workflow standardisé :

  1. Récupère les métadonnées depuis le Catalog
  2. Crée/met à jour l’enregistrement de déploiement
  3. Clone ou pull le code sur le serveur (avec les bons droits)
  4. Met à jour le statut (running/failed)

Les bonnes pratiques sont automatisées : permissions correctes, ownership www-data, structure de répertoires cohérente.

Cas d’usage concret

Imaginons que je veuille tester une nouvelle app :

# 1. Si besoin d'un nouveau serveur (30 secondes)
cd ~/labs/terraform/multipass
terraform apply

# 2. Enregistrer l'app dans le catalog (via API ou dashboard)
curl -X POST http://localhost:8000/api/apps \
  -d '{"name": "mon-app", "repo": "git@...", "port": 3000}'

# 3. Déployer (1 minute)
cd ~/labs/ansible/testdeploy
ansible-playbook deploy.yml -e "app_id=5 server_id=1"

Temps total : ~2 minutes pour avoir une app déployée sur un serveur dédié.

Pourquoi c’est utile pour le MLOps

Ce toolkit n’est pas limité aux apps web. Pour mes projets ML :

  • Expérimentation : Provisionner rapidement des VMs avec GPU passthrough
  • Training : Déployer des notebooks Jupyter ou des scripts d’entraînement
  • Serving : Déployer des API de prédiction avec suivi des versions
  • Reproductibilité : Infrastructure as Code = environnements identiques

Prochaines étapes

Sécurité et bonnes pratiques intégrées

L’avantage d’automatiser, c’est que les bonnes pratiques sont appliquées systématiquement :

Aspect Implémentation
Gestion des secrets Vault pour les clés SSH, jamais de credentials en clair
Authentification API Laravel Sanctum avec tokens
Permissions fichiers Ownership et droits standardisés par Ansible
Traçabilité Historique des déploiements, versions, timestamps
Reproductibilité Infrastructure as Code, pas de config manuelle

Conclusion

Ce toolkit répond à mon besoin principal : réduire la friction entre une idée et son déploiement, sans sacrifier la sécurité ni les bonnes pratiques. Plus besoin de configurer manuellement des serveurs ou de se souvenir des commandes de déploiement.

Le code source :

  • Catalog API : API Laravel centralisée
  • Ansible Playbooks : Automatisation du déploiement
  • Terraform Multipass : Provisioning d’infrastructure

L’ensemble forme un système cohérent où chaque brique communique avec les autres via le Catalog comme source de vérité.


Stack utilisée : Laravel 12 · Terraform · Ansible · Multipass · Vault · SQLite