Référence paas.toml

Le fichier paas.toml en détail. Toutes les sections, leurs clés, leurs valeurs par défaut, leurs effets.

Le fichier paas.toml à la racine de votre repo configure votre app de manière déclarative. Il est optionnel : la plateforme détecte les défauts raisonnables. Mais dès que vous avez plusieurs process, du scaling, ou une release task, il devient utile.

Exemple minimal

Le fichier le plus basique pour une app web. La plateforme détecte le langage automatiquement.

[[processes]]
type = "web"
command = "gunicorn app:app --bind 0.0.0.0:$PORT"

Section [build]

Personnalise le build. Optionnelle.

[build]
buildpack = "auto" # ou "heroku/python"
include = ["src/", "Pipfile*"]
exclude = ["tests/", "*.md"]
env = { NODE_ENV = "production" }
CléDescription
buildpack"auto" (détection) ou un buildpack explicite. Liste sur /docs/buildpacks.
includeGlobs des fichiers à inclure dans le build. Par défaut tout sauf .git/
excludeGlobs à exclure
envVariables d'environnement disponibles uniquement pendant le build

Section [[processes]]

Liste des process types. Au moins un web est attendu pour qu'une URL soit exposée.

[[processes]]
type = "web"
command = "gunicorn config.wsgi:application --bind 0.0.0.0:$PORT"

[[processes]]
type = "worker"
command = "celery -A config worker --loglevel=info"

[[processes]]
type = "cron-cleanup"
command = "python manage.py cleanup"
schedule = "0 3 * * *"   # 3h du matin tous les jours
CléDescription
typeweb, worker, ou nom personnalisé pour cron
commandCommande à exécuter
scheduleCron expression (uniquement pour les types personnalisés cron)
portPort HTTP pour les process web. Défaut : $PORT injecté par la plateforme

Section [scaling]

Configure le scaling auto par type de process. Par défaut, manuel à 1 instance.

[scaling.web]
min = 2
max = 8
target_cpu = 70  # scale up si CPU moyen > 70 %
target_rps = 200 # ou si requêtes par seconde > 200

[scaling.worker]
min = 1
max = 4
target_queue_depth = 100 # scale selon la profondeur de queue

Section [observability]

[observability]
tracing = true     # auto-instrumentation OpenTelemetry
sample_rate = 0.1 # 10 % des traces collectées
log_level = "info"
metrics_path = "/metrics" # endpoint Prometheus custom

Section [release]

Commande exécutée à chaque release, avant le routage du trafic. Idéal pour les migrations de base de données.

[release]
command = "python manage.py migrate --noinput"
timeout = 600 # secondes
on_failure = "rollback" # ou "abort", "warn"
Si la commande release échoue, par défaut la release est annulée et l'ancienne version reste en production. Vous pouvez changer ce comportement avec on_failure.