DevOps : vue d'ensemble
Le dossier timemanager-devops/ contient tout ce qu'il faut pour construire, déployer et faire tourner TimeManager (le site web Vue.js, l'API Phoenix et la base PostgreSQL) sur Google Cloud.
Toute l'infrastructure est décrite sous forme de code : les machines sont configurées par Ansible, les services tournent dans des conteneurs Docker, et chaque changement fusionné dans main est testé, scanné, publié et déployé automatiquement par Jenkins.
| Service | Adresse |
|---|---|
| Site web | time.jostud.com |
| API | api.time.jostud.com |
| CI (Jenkins) | ci.time.jostud.com |
| Documentation | docs.time.jostud.com |
L'architecture
L'architecture est répartie sur deux machines virtuelles :
tm-prodfait tourner l'application : Traefik (reverse proxy et TLS), le site web, l'API et la base de données.tm-toolingfait tourner les outils de livraison : Jenkins et ses builds.
Les séparer garantit qu'un build compromis ou surchargé ne peut jamais toucher l'application en production, et que la machine de production ne contient que ce qui sert aux utilisateurs.
En bref
| Sujet | Détail |
|---|---|
| Hébergement | Google Cloud, région europe-west1, 2 VM Ubuntu 24.04 LTS |
| Configuration des machines | Ansible |
| Exécution des services | Docker et Docker Compose |
| Entrée HTTPS | Traefik v3.3, certificats Let's Encrypt |
| CI/CD | Jenkins, configuré entièrement par fichiers (Configuration as Code, Job DSL) |
| Registre d'images | GitHub Container Registry (ghcr.io) |
| Scan de sécurité | Trivy |
| DNS | Hostinger |
| Coût | environ 2,60 € par jour, les deux VM allumées |
Ce qu'il y a dans le dossier
timemanager-devops/
├── ansible/
│ ├── ansible.cfg
│ ├── inventory.ini # les VM et leurs IP internes
│ ├── playbook.yml # point d'entrée
│ ├── group_vars/
│ │ ├── all.yml # configuration partagée (non secrète)
│ │ ├── prod.yml # secrets de tm-prod (Ansible Vault)
│ │ └── tooling.yml # secrets de tm-tooling (Ansible Vault)
│ └── roles/
│ ├── base/
│ ├── docker/
│ ├── ufw/
│ ├── traefik/
│ ├── app/
│ └── jenkins/
│ └── templates/jenkins.env.j2
├── app/
│ └── docker-compose.yml # front, docs, back, db
├── jenkins/
│ ├── Dockerfile
│ ├── docker-compose.yml
│ ├── casc.yml # configuration de Jenkins en code
│ ├── job_dsl.groovy # définition des jobs
│ ├── Plugins/plugins.txt
│ └── pipelines/
│ ├── frontend.groovy
│ ├── backend.groovy
│ └── docs.groovy
└── traefik/
├── docker-compose.yml
├── traefik.yml # configuration statique
└── dynamic/ # une route par service
├── frontend.yml
├── api.yml
├── docs.yml
└── jenkins.ymlLes Dockerfiles des applications sont à côté de leur code : timemanager-web/Dockerfile et timemanager-api/Dockerfile.
Comment lire cette partie
| Je veux... | Page |
|---|---|
| Reprendre l'infrastructure ou venir aider | Arriver dans l'équipe |
| Comprendre Docker, SSH, Ansible depuis zéro | Les bases à connaître |
| Savoir par où passe une requête | Le trajet d'une requête |
| Connaître les machines, le pare-feu et le DNS | Infrastructure |
| Comprendre une brique | Ansible, Conteneurs et réseaux, Traefik, Jenkins, Pipelines |
| Suivre un déploiement de bout en bout | D'un commit à la prod |
| Tout installer depuis zéro | Mise en place |
| Savoir où sont les secrets | Secrets et accès |
| Faire une opération courante | Opérations courantes, Dépannage |
| Réagir à une panne | Si le site tombe |
| Trouver un port, une variable, une version | Matrice des flux, Toutes les variables, Versions |
| Comprendre pourquoi ces outils | Choix techniques |
| Connaître les limites | Limites et améliorations |
| Voir comment l'infra a été construite | Historique |