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.
La plateforme comporte deux stacks qui coexistent :
| Stack | Rôle | Où | 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/).
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)
app/run.py — c’est le seul fichier à lancer pour démarrer Flask.app/src/ (routes, services, DB, templates, static). Voir app/README.md et app/src/README.md.app/) : _config.yml, _layouts/, _includes/, _posts/, assets/, data/, index.html, about.md, etc. Ces dossiers sont bien intégrés : Jekyll les lit au build.bundle exec jekyll build → sortie dans app/_site/ (généré, non versionné).app/_site/ seul est déployé sur GitHub Pages ; _layouts/, _posts/, etc. ne sont pas envoyés tels quels, ils servent uniquement à produire _site/.bundle exec jekyll serve → http://localhost:4000.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 »).
| 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). |
app/_site/ est déployé comme site GitHub Pages (URL du repo, ex. https://<org>.github.io/<repo>/).app/Dockerfile est poussée puis déployée sur Cloud Run (service Flask, port 8080). Les secrets (GCP, etc.) sont dans les variables/secrets du dépôt.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.
cd app
bundle install
bundle exec jekyll serve
→ http://localhost:4000
Ou via Makefile :
make run-jekyll
.env dans app/ (ou à la racine) si votre config le charge (ex. python-dotenv).FLASK_ENV=development, PORT=8080, RATELIMIT_STORAGE_URL=memory:// (sans Redis). Voir docs/ENV_VARIABLES.md si présent.curl http://localhost:8080/api/rate-limitPYTHONPATH=app python3 -m pytest tests/ -v (ou make test)main ou develop)
app/_site/ produit et artefact “pages” uploadé.main uniquement :
app/, image Flask) → GHCR.app/_site/)./health.main quand app/** ou le workflow change.app/, vérifie _site/, uploade l’artefact pour GitHub Pages.app/, push, deploy). Utilise les secrets GCP (ex. GCP_SA_KEY).deploy-pages alimentent cette source.GCP_SA_KEY (JSON du compte de service).GCP_PROJECT_ID, GCP_REGION (sinon valeurs par défaut dans les workflows).environment, debug).| 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 |
docs/STRUCTURE.mdapp/README.mdapp/src/ : app/README.md (section “Comment app/src/ s’intègre à la plateforme”) et app/src/README.mddocs/MIGRATION_FASTAPI_FLASK.mddocs/ENV_VARIABLES.mddocs/CONTRIBUTING.md