Deployer Flutter Web sur Scalingo
Le guide complet pour livrer une app Flutter Web sur un PaaS souverain avec buildpack custom et Nginx.
Le probleme
Flutter est devenu un standard pour le cross-platform, mais l'hebergement de la version web reste souvent limite a des plateformes americaines. Si vos clients ont des contraintes fortes de souverainete, de conformite RGPD ou de gouvernance des donnees, Scalingo est une option naturelle cote Europe.
Le point bloquant: il n'existe pas de buildpack Flutter officiel natif. Bonne nouvelle: un buildpack custom open source permet de combler ce manque proprement.
Architecture de deploiement
Le principe est simple et suit le meme pattern que Scalingo recommande pour Angular ou React:
Le buildpack Flutter telecharge le SDK, compile votre projet en fichiers statiques
(flutter build web), puis le buildpack Nginx de Scalingo sert ces fichiers.
En production, aucun SDK Flutter n'est present: uniquement les fichiers HTML/JS/CSS compiles.
Mise en place pas a pas
1) Fichiers de configuration
Ajoutez ces fichiers a la racine du projet Flutter.
## .buildpacks
https://github.com/asrour1/builpack-flutter-scalingo.git
https://github.com/Scalingo/nginx-buildpack.git
## nginx.conf
root /app/build/web;
location / {
try_files $uri $uri/ /index.html =404;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot|map)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
location = /index.html {
add_header Cache-Control "no-cache, no-store, must-revalidate";
add_header Pragma "no-cache";
expires 0;
}
## Procfile
web: bin/run
Le script bin/run est genere automatiquement par le buildpack Nginx.
2) Creer l'application Scalingo
# Creer l'application
scalingo create mon-app-flutter
# Definir la version Flutter
scalingo -a mon-app-flutter env-set FLUTTER_VERSION=3.41.7
# Ajouter le remote git
git remote add scalingo git@ssh.osc-fr1.scalingo.io:mon-app-flutter.git
3) Deployer
git add .buildpacks nginx.conf Procfile
git commit -m "Configuration Scalingo Flutter Web"
git push scalingo main
Le point cle: compatibilite Dart et Flutter
La plupart des echelles de build viennent d'un mismatch entre la contrainte Dart
de pubspec.yaml et la version Dart embarquee par Flutter.
Si ca diverge, vous verrez une erreur version solving failed.
environment:
sdk: ^3.10.1
| Dart SDK | Flutter recommande |
|---|---|
^3.5.0 | 3.24.0 |
^3.6.0 | 3.27.0 |
^3.10.0 | 3.38.0 |
^3.10.1 | 3.41.7 |
Variables d'environnement utiles
| Variable | Defaut | Usage |
|---|---|---|
FLUTTER_VERSION | 3.24.0 | Version du SDK Flutter |
FLUTTER_CHANNEL | stable | Canal Flutter |
FLUTTER_BUILD_ARGS | --release | Arguments passes a flutter build web |
FLUTTER_CLEANUP | true | Nettoie SDK et sources du slug final |
FLUTTER_SOURCE_DIR | - | Sous-dossier du projet (monorepo) |
FLUTTER_DEPLOY_DIR | build/web | Dossier des fichiers deployes |
Cas avances
Injecter des variables de build
scalingo -a mon-app env-set FLUTTER_BUILD_ARGS="--release --dart-define=API_URL=https://api.example.com"
Monorepo avec Flutter dans un sous-dossier
scalingo -a mon-app env-set FLUTTER_SOURCE_DIR=frontend
Forcer un rebuild propre
git commit --allow-empty -m "clean rebuild"
git push scalingo main
Depannage rapide
- Erreur version solving failed: ajustez
FLUTTER_VERSIONselon la contrainte Dart. - Routes 404: verifiez la regle Nginx
try_files $uri $uri/ /index.html =404;. - Slug trop lourd: auditez vos assets web; le buildpack nettoie deja le reste.
Pourquoi ce setup fonctionne bien
Cette approche donne un compromis solide entre souverainete, simplicite d'exploitation et performance. Vous gardez l'experience Flutter pour les equipes produit, tout en deployant une app web statique classique, facile a monitorer et a faire evoluer.
Besoin d'un deployement Flutter industriel ?
On peut vous aider a industrialiser le pipeline, securiser la configuration et fiabiliser vos releases.
Parler de votre projet →