Daya

Comment tout ça marche — et comment l’implémenter

Ce document décrit le fonctionnement global de la plateforme (Jekyll + Flask, CI/CD, déploiement) et les étapes concrètes pour l’exécuter en local et en production.


1. Vue d’ensemble

La plateforme comporte deux stacks qui coexistent :

Stack Rôle Déploiement
Jekyll Site statique (blog, pages, assets) app/ (sources : _config.yml, _layouts/, _posts/, _includes/, assets/, data/ → build → app/_site/) GitHub Pages (déploiement de _site/ uniquement)
Flask API REST + pages dynamiques (/, /about, /blog, /monitoring) app/run.py + app/src/ Cloud Run (optionnel)

En parallèle, une nouvelle architecture (Backend FastAPI + Frontend Flask séparés) est décrite dans docs/MIGRATION_FASTAPI_FLASK.md ; le présent guide se concentre sur l’usage actuel (Jekyll + Flask dans app/).


2. Comment les pièces s’emboîtent

2.1 Application Flask (app/)

run.py
  │
  ├── sys.path ← app/   (pour que "import src" fonctionne)
  ├── create_app(FLASK_ENV)  dans  src/__init__.py
  │     ├── Config (base → development | production | testing)
  │     ├── DB (SQLAlchemy), CORS, logging, rate limiting
  │     ├── Blueprints : main, blog, admin, api_routes, export_routes, api/v1 (articles, projects, experiences)
  │     ├── Erreurs, health, métriques, sécurité, filtres Jinja2
  │     └── return app
  └── app.run(host='0.0.0.0', port=8080)

2.2 Jekyll (site statique)

Jekyll et Flask ne partagent pas de processus : ce sont deux serveurs distincts. Flask n’utilise pas _layouts/ ni _posts/ ; il a ses propres app/src/templates/ et app/src/static/. Pour le détail des dossiers Jekyll, voir app/README.md (section « Comment les dossiers Jekyll s’intègrent à la plateforme »).

2.3 Workflows GitHub Actions

Fichier Déclencheur Rôle
ci.yml Push/PR sur main ou develop Tests, lint, traductions, build Jekyll, build Docker, déploiement Pages + Cloud Run (sur push main).
jekyll-pages.yml Push main avec changements dans app/** ou le workflow Build Jekyll depuis app/, déploie l’artefact vers GitHub Pages.
deploy.yml Push main avec changements dans app/** (Flask/Docker) ou manuel Valide Dockerfile, build image, déploie sur Cloud Run (Flask).

3. Implémentation — En local

3.1 Prérequis

3.2 Lancer l’application Flask (backend actuel)

Sans script dédié (toujours possible) :

cd app
python3 -m venv .venv    # une seule fois
source .venv/bin/activate
pip install -r requirements.txt
python run.py

→ Serveur sur http://localhost:8080 (/, /about, /blog, /api/…, /health, /metrics).

Avec Makefile (si scripts/dev/launch_app.sh n’existe pas, le Makefile fait cd app && python run.py) :

make run-flask

Avec script (si vous créez scripts/dev/launch_app.sh) : ce script peut faire cd app, activer un venv (.venv ou venv), puis lancer python run.py. Voir app/README.md pour la doc.

3.3 Lancer Jekyll (site statique)

cd app
bundle install
bundle exec jekyll serve

http://localhost:4000

Ou via Makefile :

make run-jekyll

3.4 Variables d’environnement (Flask)

3.5 Vérifications rapides


4. Implémentation — CI/CD et déploiement

4.1 Ce qui se passe sur push / PR

  1. ci.yml (sur push/PR main ou develop)
    • Tests & lint : Python (pytest, flake8, black, isort), validation des traductions.
    • Security : Trivy, TruffleHog.
    • Build Jekyll : app/_site/ produit et artefact “pages” uploadé.
    • Sur push sur main uniquement :
      • Build Docker (contexte app/, image Flask) → GHCR.
      • Deploy frontend : GitHub Pages (artefact app/_site/).
      • Deploy backend : Cloud Run avec l’image construite, puis health check sur /health.
  2. jekyll-pages.yml
    • Se déclenche sur push main quand app/** ou le workflow change.
    • Build Jekyll dans app/, vérifie _site/, uploade l’artefact pour GitHub Pages.
  3. deploy.yml
    • Déploiement Flask sur Cloud Run (build image depuis app/, push, deploy). Utilise les secrets GCP (ex. GCP_SA_KEY).

4.2 Configurer le déploiement

4.3 Déclencher à la main


5. Résumé des commandes utiles

Objectif Commande
Lancer Flask (app/) cd app && python run.py ou make run-flask
Lancer Jekyll cd app && bundle exec jekyll serve ou make run-jekyll
Tests PYTHONPATH=app python3 -m pytest tests/ -v ou make test
Health local curl http://localhost:8080/health
Build Jekyll (sans serveur) cd app && bundle exec jekyll build

6. Où trouver plus d’infos