Exploitation
GET /health/ exécute SELECT 1 sur la base :
| Réponse | Signification |
|---|---|
200 {"status": "ok"} |
Application et base disponibles |
503 {"status": "error"} |
Base injoignable (détail dans les journaux) |
Le contrôle répond avant la validation de l’hôte et la redirection HTTPS : il sert de sonde au HEALTHCHECK de l’image Docker, aux plateformes PaaS et aux services de surveillance.
Journaux
Section intitulée « Journaux »Tout est écrit sur la sortie standard, au format date niveau logger message. Le niveau se règle avec LOG_LEVEL (INFO par défaut) ; les requêtes HTTP sortantes de httpx ne sont journalisées qu’à partir de WARNING.
docker compose logs -f web # requêtes (journal d'accès Gunicorn) et erreursdocker compose logs -f scheduler # synchronisation des prix et rappelsMessages utiles :
| Message | Origine |
|---|---|
Synced <slug>: N records, M new |
pricing.sync, après chaque ingrédient |
Open data request failed: <url> (...) |
integrations.http, après épuisement des tentatives |
Health check failed |
core.views.health |
Administration
Section intitulée « Administration »Le chemin est défini par ADMIN_URL. On y gère ingrédients, recettes (avec recalcul des métriques à l’enregistrement), magasins, relevés de prix, utilisateurs, jetons d’API et adresses email.
docker compose exec web python manage.py createsuperuserdocker compose exec web python manage.py changepassword admin@example.orgDépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
Bad Request (400) |
Domaine absent de ALLOWED_HOSTS |
Ajoutez le domaine, ou définissez DOMAIN avec docker-compose.prod.yml |
CSRF verification failed à l’envoi d’un formulaire |
Origine absente de CSRF_TRUSTED_ORIGINS, ou proxy qui ne transmet pas X-Forwarded-Proto |
Ajoutez https://votre-domaine ; vérifiez la configuration du proxy |
| Boucle de redirections HTTPS | Proxy qui termine TLS sans transmettre X-Forwarded-Proto |
Configurez le proxy, ou en dernier recours SECURE_SSL_REDIRECT=false derrière un proxy qui force HTTPS |
| Pages sans styles | collectstatic non lancé ou static/css/app.css non compilé |
L’image Docker le fait ; en local, npm run build |
| Prix absents | sync_prices jamais lancé ou ingrédients sans catégorie |
Lancez la commande et vérifiez off_category |
| CO2 vide sur les recettes | Impact CO2 indisponible lors du calcul | refresh_metrics |
| Erreur après une dizaine de secondes à l’inscription | Serveur SMTP injoignable | Voir Dépannage des emails |
| Image cassée ou bloquée | Domaine absent de la CSP (console du navigateur) | Pour un stockage S3, vérifiez AWS_S3_CUSTOM_DOMAIN ou AWS_S3_ENDPOINT_URL |
| Limitation de débit incohérente | Cache local à chaque processus | Configurez REDIS_URL |
Pour diagnostiquer, docker compose exec web python manage.py shell donne accès aux modèles et aux services, et python manage.py check --deploy signale les réglages de sécurité manquants.

