Skip to content

feat(deploy): déploiement sur Debian/Ubuntu avec FrankenDeploy (v2.9.0) - #169

Merged
bfoujols merged 5 commits into
2.xfrom
deploy
Oct 21, 2026
Merged

bfoujols merged 5 commits into
2.xfrom
deploy

Conversation

@bfoujols

Copy link
Copy Markdown
Contributor

Résumé

Permet de déployer une application Edu-Framework sur un VPS Debian 12+ / Ubuntu 22.04+ avec FrankenDeploy (HTTPS Let's Encrypt, base MariaDB gérée, déploiement sans coupure, rollback).

FrankenDeploy est pensé pour Symfony : cette PR rend le framework compatible sans fork de l'outil.

Changements

  • Dockerfile multi-stage : frankenphp_base, frankenphp_prod (contrat FrankenDeploy : HTTP sur le port 8080, utilisateur non-root app, php.ini-production, OPcache sans revalidation, sessions dans var/sessions, healthcheck, sans Excimer) et frankenphp_dev (ciblé explicitement par compose.yaml, le dev local ne change pas)
  • docker-entrypoint.sh : attend la base de données avant de démarrer FrankenPHP. Doit rester dans le projet, sinon FrankenDeploy génère sa version Symfony (bin/console), qui casse le build
  • Variables d'environnement — nouvelle méthode ConfigCore::loadEnv() utilisée par l'app et bin/edu :
    • .env et .env.local optionnels, .env.local prioritaire
    • getEnv() / existEnv() lisent aussi l'environnement du processus (variables Docker absentes de $_ENV avec php.ini-production)
    • les DB_* manquantes sont déduites de DATABASE_URL (injectée par FrankenDeploy)
    • getEnv() ne lève plus d'avertissement pour une variable absente, bin/edu démarre sans .env
  • Commande php bin/edu make:deploy : génère frankendeploy.yaml (--domain, --name, --database=mariadb|mysql|sqlite|none, --force) avec les dossiers partagés (.env.local, var/logs, var/sessions, var/sqlite, public/upload)
  • Doc : nouvelle page « Déployer son application », mises à jour de command-edu.md et docker.md
  • Version v2.9.0 : changelogs et eduframe.yml

Tests

  • 17 nouveaux tests (LoadEnvTest, CreateDeployCommandTest) passent ; les 5 erreurs restantes sont préexistantes (MySQL local non démarré, base SQLite verrouillée)
  • Simulation locale d'un déploiement FrankenDeploy : image frankenphp_prod + MariaDB 11 sur un réseau dédié, DATABASE_URL injectée, .env.local en lecture seule, dossiers partagés → conteneur healthy, HTTP 200, connexion MariaDB OK, barre de debug absente, sessions et logs écrits dans les dossiers partagés
  • Image frankenphp_dev construite, docker compose config cible bien frankenphp_dev
  • Site de documentation généré sans erreur
  • Déploiement réel frankendeploy deploy sur un VPS Debian (non testé)

🤖 Generated with Claude Code

bfoujols and others added 3 commits October 21, 2026 09:42
- Dockerfile multi-stage : frankenphp_base, frankenphp_prod (port 8080,
  utilisateur app, php.ini-production, healthcheck) et frankenphp_dev
  (ciblé par compose.yaml)
- docker-entrypoint.sh : attend la base de données avant FrankenPHP
- ConfigCore::loadEnv() : .env et .env.local optionnels, lecture de
  l'environnement du processus, déduction des DB_* depuis DATABASE_URL
- commande make:deploy : génère frankendeploy.yaml
- doc « Déployer son application », changelog v2.9.0

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@codacy-production

codacy-production Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 31 complexity · 0 duplication

Metric Results
Complexity 31
Duplication 0

View in Codacy

🟢 Coverage 98.41% diff coverage · +0.93% coverage variation

Metric Results
Coverage variation ✅ +0.93% coverage variation (-1.00%)
Diff coverage ✅ 98.41% diff coverage

View coverage diff in Codacy

Coverage variation details
Coverable lines Covered lines Coverage
Common ancestor commit (a03a99b) 1965 1640 83.46%
Head commit (222a6f3) 2082 (+117) 1757 (+117) 84.39% (+0.93%)

Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch: <coverage of head commit> - <coverage of common ancestor commit>

Diff coverage details
Coverable lines Covered lines Diff coverage
Pull request (#169) 126 124 98.41%

Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified: <covered lines added or modified>/<coverable lines added or modified> * 100%

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

@deepsource-io

deepsource-io Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

DeepSource Code Review

We reviewed changes in a03a99b...222a6f3 on this pull request. Below is the summary for the review, and you can see the individual issues we found as inline review comments.

See full review on DeepSource ↗

PR Report Card

Overall Grade   Security  

Reliability  

Complexity  

Hygiene  

Code Review Summary

Analyzer Status Updated (UTC) Details
PHP Oct 21, 2026 8:37a.m. Review ↗
Shell Oct 21, 2026 8:37a.m. Review ↗

Important

AI Review is run only on demand for your team. We're only showing results of static analysis review right now. To trigger AI Review, comment @deepsourcebot review on this thread.

…ure)

Codacy :
- docker-entrypoint.sh : SC2016 désactivé (code PHP volontairement entre
  guillemets simples)
- ConfigCore : lecture/écriture des variables via le dépôt phpdotenv
  (plus d'accès direct à $_ENV), loadDatabaseUrl simplifiée
- CreateDeployCommand : $io renommé $console

Relecture :
- loadEnv : une variable visible uniquement par getenv() (php -S, mod_php)
  reste prioritaire sur .env et .env.local
- DATABASE_URL MySQL/MariaDB/PostgreSQL mal formée (ex. mot de passe avec #
  tronqué par phpdotenv) : ErrorConfigException explicite, et arrêt du
  conteneur au démarrage avec le message
- tests : APP_ENV hérité du shell ou du conteneur neutralisé dans bootstrap
- make:deploy : --name requis dans le conteneur (/app), commandes SQLite
  une variable par commande, avertissement qui indique où récupérer les
  fichiers Docker, healthcheck à aligner avec le Dockerfile
- doc : projets créés avant 2.9.0, caractère #, env set une variable,
  DATABASE_URL d'une base gérée, procédure d'import corrigée, SQLite,
  ne pas lancer frankendeploy build / init --force / dev

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- dossiers temporaires des tests créés en 0700 au lieu de 0777 (PHP-A1006)
- docblocks des méthodes et classes ajoutées (PHP-D1001, PHP-D1002)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@bfoujols
bfoujols merged commit 5c9a768 into 2.x Oct 21, 2026
10 checks passed
@bfoujols
bfoujols deleted the deploy branch October 21, 2026 08:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant