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
- portalUn 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 :

Les applications avec leurs repos Git sources :

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

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é :
- Récupère les métadonnées depuis le Catalog
- Crée/met à jour l’enregistrement de déploiement
- Clone ou pull le code sur le serveur (avec les bons droits)
- 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