Traduction automatique supervisée
Ce contenu est traduit à l'aide d'une génération automatique guidée par des glossaires et des guides de style élaborés par des humains. Le texte n'étant pas relu manuellement ligne par ligne, des erreurs ou des tournures maladroites peuvent occasionnellement apparaître.
En cas de divergence, la version anglaise constitue la source de référence.
Déploiement
Exécuter l'admin derrière un reverse proxy change deux points que vous pouvez sinon ignorer en développement local : la secret key doit être stable entre les processus worker, et les URL générées doivent refléter HTTPS même si votre application ne voit jamais que du HTTP simple en provenance du proxy.
Guides de déploiement spécifiques aux frameworks
Cette page couvre uniquement ce qui est spécifique à Admin. Pour l'application sous-jacente et le serveur ASGI, consultez :
- FastAPI : Documentation de déploiement FastAPI
- Uvicorn : Documentation de déploiement Uvicorn
import os
from sqlalchemy import create_engine
from starlette.applications import Starlette
from starlette_admin.contrib.sqla import Admin, ModelView
from myapp.models import Post
engine = create_engine(os.environ["DATABASE_URL"])
app = Starlette()
admin = Admin(
engine,
title="My Admin",
base_url="/admin",
secret_key=os.environ["ADMIN_SECRET_KEY"],
)
admin.add_view(ModelView(Post))
admin.mount_to(app)
Secret key
Admin génère une secret_key aléatoire au démarrage lorsque vous n'en fournissez pas. C'est acceptable pour un processus local unique, mais chaque processus worker génère sa propre clé de manière indépendante ; un jeton CSRF signé par un worker ne sera donc pas validable par un autre. Définissez secret_key à partir d'une variable d'environnement avant d'exécuter plusieurs processus. Consultez Security pour le détail complet des défaillances en mode multi-worker et pour comprendre comment la clé est utilisée.
Reverse proxy et HTTPS
Admin construit chaque lien interne (pages de liste, formulaires d'édition, exports, le mount /static, fichiers téléversés servis via /_files/...) en appelant request.url_for(...), dont le schéma est déduit de la requête entrante. Lorsqu'un proxy tel que Nginx, Caddy ou Traefik termine TLS et transmet du HTTP simple à votre application, Starlette ne peut pas savoir que la requête d'origine était en HTTPS, sauf si le proxy envoie X-Forwarded-Proto et que votre serveur ASGI lui fait confiance. Sans cette configuration, les liens générés rétrogradent en http://, ce que les navigateurs bloquent ou réécrivent lorsque la page elle-même a été chargée en HTTPS.
Corrigez cela à deux endroits :
-
Le proxy transmet l'en-tête :
-
Uvicorn lui fait confiance, via
--proxy-headersaccompagné de--forwarded-allow-ipsdésignant l'IP du proxy (ou'*'si le proxy n'est joignable que depuis l'intérieur de votre réseau) :
Le worker uvicorn.workers.UvicornWorker de Gunicorn lit les deux mêmes paramètres depuis --forwarded-allow-ips. Consultez la documentation de déploiement d'Uvicorn pour l'ensemble des options relatives aux gestionnaires de processus.
Warning
--forwarded-allow-ips='*' fait confiance aux en-têtes transmis provenant de n'importe quelle source. N'utilisez cette option que si l'application est inaccessibile autrement que via votre proxy, par exemple lorsqu'elle est liée à un réseau privé ou à un socket Unix. Si l'application est directement accessible, restreignez ce paramètre à l'adresse IP réelle du proxy. Dans le cas contraire, un client peut usurper directement X-Forwarded-Proto et X-Forwarded-For.
Fichiers statiques
Les CSS et JS de l'admin sont livrés au sein du package starlette_admin, et Admin les sert lui-même via un mount /static sous base_url plutôt que depuis un hôte statique distinct. Le paramètre static_dir permet uniquement de remplacer certains fichiers (voir Templates), il ne déplace pas la distribution des assets hors du processus de votre application. Aucune option intégrée ne permet de servir ces fichiers depuis un CDN. Si vous en avez besoin, ajoutez plutôt une règle Cache-Control adaptée à la mise en cache pour {base_url}/static/* au niveau du proxy.
Les fichiers téléversés fonctionnent différemment : LocalStorage les sert également via l'application (/_files/{storage}/{path}, de sorte que le middleware d'authentification reste appliqué), mais S3Storage et autres backends distants peuvent être servis directement par le fournisseur. Consultez File Storage.
Et ensuite ?
- Security : Le piège de la
secret_keyen multi-worker en détail, ainsi que tout ce que les protections intégrées couvrent — et ne couvrent pas. - Authentication : Contrôlez l'accès à l'admin avant qu'il ne soit accessible en production.
- File Storage : Configuration de
S3Storageet des autres backends distants.