Skip to content

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.

ServiceAdresse
Site webtime.jostud.com
APIapi.time.jostud.com
CI (Jenkins)ci.time.jostud.com
Documentationdocs.time.jostud.com

L'architecture ​

L'architecture est répartie sur deux machines virtuelles :

  • tm-prod fait tourner l'application : Traefik (reverse proxy et TLS), le site web, l'API et la base de données.
  • tm-tooling fait 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 ​

SujetDétail
HébergementGoogle Cloud, région europe-west1, 2 VM Ubuntu 24.04 LTS
Configuration des machinesAnsible
Exécution des servicesDocker et Docker Compose
Entrée HTTPSTraefik v3.3, certificats Let's Encrypt
CI/CDJenkins, configuré entièrement par fichiers (Configuration as Code, Job DSL)
Registre d'imagesGitHub Container Registry (ghcr.io)
Scan de sécuritéTrivy
DNSHostinger
Coûtenviron 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.yml

Les 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 aiderArriver dans l'équipe
Comprendre Docker, SSH, Ansible depuis zéroLes bases à connaître
Savoir par où passe une requêteLe trajet d'une requête
Connaître les machines, le pare-feu et le DNSInfrastructure
Comprendre une briqueAnsible, Conteneurs et réseaux, Traefik, Jenkins, Pipelines
Suivre un déploiement de bout en boutD'un commit à la prod
Tout installer depuis zéroMise en place
Savoir où sont les secretsSecrets et accès
Faire une opération couranteOpérations courantes, Dépannage
Réagir à une panneSi le site tombe
Trouver un port, une variable, une versionMatrice des flux, Toutes les variables, Versions
Comprendre pourquoi ces outilsChoix techniques
Connaître les limitesLimites et améliorations
Voir comment l'infra a été construiteHistorique