{"title":"Liste de contrôle de déploiement","version":"4.1","locale":"fr","docname":"howto/deployment/checklist","url":"/fr/4.1/howto/deployment/checklist/","canonical":"https://djangodocs.dev/fr/4.1/howto/deployment/checklist/","summary":"Internet est un environnement hostile. Avant de déployer votre projet Django, il est recommandé de passer du temps à vérifier les réglages en ayant à l’esprit la…","html":"<h1>Liste de contrôle de déploiement<a class=\"heading-anchor\" href=\"#deployment-checklist\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Internet est un environnement hostile. Avant de déployer votre projet Django, il est recommandé de passer du temps à vérifier les réglages en ayant à l’esprit la sécurité, la performance et les opérations.</p>\n<p>Django contient beaucoup de <a class=\"reference internal\" href=\"/fr/4.1/topics/security/\"><span class=\"doc\">fonctionnalités liées à la sécurité</span></a>. Certaines sont intégrées et toujours actives. D’autres sont facultatives car elles ne sont pas toujours adéquates ou parce qu’elles ne conviennent pas durant le développement. Par exemple, l’utilisation exclusive de HTTPS ne convient pas à tous les sites Web et ce n’est pas réaliste lors du développement local.</p>\n<p>Les optimisations de performance sont une autre catégorie de compromis entre efficacité et commodité. Par exemple, l’utilisation de cache est utile en production, beaucoup moins lors du développement local. Les besoins en terme de signalement d’erreurs sont aussi très différents.</p>\n<p>La liste de contrôle suivante contient des réglages qui :</p>\n<ul class=\"simple\">\n<li><p>doivent être configurés correctement pour que Django puisse garantir le niveau de sécurité attendu ;</p></li>\n<li><p>sont généralement différents en fonction de chaque environnement ;</p></li>\n<li><p>activent des fonctionnalités de sécurité facultatives ;</p></li>\n<li><p>activent des optimisations de performance ;</p></li>\n<li><p>s’occupent du signalement des erreurs.</p></li>\n</ul>\n<p>Beaucoup de ces réglages sont sensibles et doivent être traités de manière confidentielle. Si vous publiez le code source de votre projet, une pratique courante est de publier des réglages convenant au développement, mais d’utiliser un module de réglages privés à destination de la production.</p>\n<section id=\"run-manage-py-check-deploy\">\n<h2>Lancez <code class=\"docutils literal notranslate\"><span class=\"pre\">manage.py</span> <span class=\"pre\">check</span> <span class=\"pre\">--deploy</span></code><a class=\"heading-anchor\" href=\"#run-manage-py-check-deploy\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Certains des contrôles présentés ci-dessous peuvent être automatisés en utilisant l’option <code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">--deploy</span></code>. Prenez garde de la lancer en activant le fichier de réglages de production comme décrit dans la documentation de l’option.</p>\n</section>\n<section id=\"critical-settings\">\n<h2>Réglages critiques<a class=\"heading-anchor\" href=\"#critical-settings\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"secret-key\">\n<h3><a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-SECRET_KEY\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECRET_KEY</span></code></a><a class=\"heading-anchor\" href=\"#secret-key\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><strong>La clé secrète doit être une longue valeur aléatoire et doit rester confidentielle.</strong></p>\n<p>Assurez-vous que la clé utilisée en production n’est employée nulle part ailleurs et ne l’ajoutez pas dans le système de gestion de versions. Cela réduit le nombre de vecteurs par lesquels un attaquant pourrait trouver la clé.</p>\n<p>Au lieu d’inscrire statiquement la clé secrète dans votre module de réglages, envisagez de la charger à partir d’une variable d’environnement :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">os</span>\n<span class=\"n\">SECRET_KEY</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">environ</span><span class=\"p\">[</span><span class=\"s1\">&#39;SECRET_KEY&#39;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>ou à partir d’un fichier :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;/etc/secret_key.txt&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"n\">SECRET_KEY</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">strip</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>If rotating secret keys, you may use <a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-SECRET_KEY_FALLBACKS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECRET_KEY_FALLBACKS</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">os</span>\n<span class=\"n\">SECRET_KEY</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">environ</span><span class=\"p\">[</span><span class=\"s1\">&#39;CURRENT_SECRET_KEY&#39;</span><span class=\"p\">]</span>\n<span class=\"n\">SECRET_KEY_FALLBACKS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">environ</span><span class=\"p\">[</span><span class=\"s1\">&#39;OLD_SECRET_KEY&#39;</span><span class=\"p\">],</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Ensure that old secret keys are removed from <code class=\"docutils literal notranslate\"><span class=\"pre\">SECRET_KEY_FALLBACKS</span></code> in a\ntimely manner.</p>\n<aside class=\"version-note version-changed\" data-version=\"4.1\">\n<p class=\"version-note-title\">Changed in Django 4.1</p><p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">SECRET_KEY_FALLBACKS</span></code> setting was added to support rotating secret\nkeys.</p>\n</aside>\n</section>\n<section id=\"debug\">\n<h3><a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a><a class=\"heading-anchor\" href=\"#debug\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><strong>Vous ne devez jamais activer ``DEBUG`` en production.</strong></p>\n<p>Vous développez certainement votre projet avec <a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span> <span class=\"pre\">=</span> <span class=\"pre\">True</span></code></a>, car cela offre des possibilités bien pratiques comme les traces d’appel détaillées dans votre navigateur.</p>\n<p>Dans un environnement de production, cependant, c’est une très mauvaise idée, parce que cela révèle de nombreuses informations sur votre projet : extraits de code source, variables locales, réglages, bibliothèques utilisées, etc.</p>\n</section>\n</section>\n<section id=\"environment-specific-settings\">\n<h2>Réglages spécifiques à l’environnement<a class=\"heading-anchor\" href=\"#environment-specific-settings\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"allowed-hosts\">\n<h3><a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-ALLOWED_HOSTS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ALLOWED_HOSTS</span></code></a><a class=\"heading-anchor\" href=\"#allowed-hosts\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Lorsque <a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span> <span class=\"pre\">=</span> <span class=\"pre\">False</span></code></a>, Django ne fonctionne pas du tout sans une valeur correcte de <a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-ALLOWED_HOSTS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ALLOWED_HOSTS</span></code></a>.</p>\n<p>Ce réglage est obligatoire pour protéger votre site contre certaines attaques CSRF. Si vous indiquez un caractère générique, vous devez effectuer vous-même la validation de l’en-tête HTTP <code class=\"docutils literal notranslate\"><span class=\"pre\">Host</span></code>, ou sinon vous assurer que vous n’êtes pas vulnérable à cette catégorie d’attaques.</p>\n<p>Il s’agit également de configurer le serveur Web placé devant Django pour valider l’hôte. En cas de requêtes avec des noms d’hôte incorrects, le serveur Web devrait répondre avec une page d’erreur statique ou ignorer ces requêtes au lieu de les transférer vers Django. De cette façon, cela évitera de polluer les journaux de Django avec des erreurs (ou des courriels si vous avez configuré le signalement d’erreur par ce biais). Par exemple avec nginx, il est possible de configurer le serveur afin qu’il renvoie par défaut des erreurs « 444 No Response » s’il détecte un hôte inconnu :</p>\n<div class=\"code-block\" data-language=\"nginx\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Nginx</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Nginx code\"><code><span class=\"k\">server</span><span class=\"w\"> </span><span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"kn\">listen</span><span class=\"w\"> </span><span class=\"mi\">80</span><span class=\"w\"> </span><span class=\"s\">default_server</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"kn\">return</span><span class=\"w\"> </span><span class=\"mi\">444</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n</section>\n<section id=\"caches\">\n<h3><a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-CACHES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CACHES</span></code></a><a class=\"heading-anchor\" href=\"#caches\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Si vous utilisez du cache, les paramètres de connexion peuvent être différents entre le développement et la production. Par défaut, Django utilise le <a class=\"reference internal\" href=\"/fr/4.1/topics/cache/#local-memory-caching\"><span class=\"std std-ref\">cache en mémoire locale</span></a>, ce qui n’est pas toujours le plus approprié.</p>\n<p>Les serveurs de cache ont souvent une faible authentification. Assurez-vous qu’ils n’acceptent de connexions que de vos serveurs d’applications.</p>\n</section>\n<section id=\"databases\">\n<h3><a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASES</span></code></a><a class=\"heading-anchor\" href=\"#databases\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Les paramètres de connexion à la base de données sont probablement différents entre le développement et la production.</p>\n<p>Les mots de passe de base de données sont très sensibles. Vous devez les protéger aussi bien que <a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-SECRET_KEY\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECRET_KEY</span></code></a>.</p>\n<p>Pour une sécurité maximale, assurez-vous que les serveurs de bases de données n’acceptent des connexions que de vos serveurs d’applications.</p>\n<p>Si vous n’avez pas configuré de sauvegardes pour votre base de données, faites-le maintenant !</p>\n</section>\n<section id=\"email-backend-and-related-settings\">\n<h3><a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-EMAIL_BACKEND\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">EMAIL_BACKEND</span></code></a> et réglages liés<a class=\"heading-anchor\" href=\"#email-backend-and-related-settings\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Si votre site envoie des courriels, ces valeurs doivent être définies correctement.</p>\n<p>Par défaut, Django envoie ses messages avec les adresses d’origine <a class=\"reference external\" href=\"mailto:webmaster&#37;&#52;&#48;localhost\">webmaster<span>&#64;</span>localhost</a> et <a class=\"reference external\" href=\"mailto:root&#37;&#52;&#48;localhost\">root<span>&#64;</span>localhost</a>. Toutefois, certains fournisseurs de messagerie rejettent les messages provenant de ces adresses. Pour utiliser des adresses d’expéditeur différentes, modifiez les réglages <a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-DEFAULT_FROM_EMAIL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEFAULT_FROM_EMAIL</span></code></a> et <a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-SERVER_EMAIL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SERVER_EMAIL</span></code></a>.</p>\n</section>\n<section id=\"static-root-and-static-url\">\n<h3><a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_ROOT</span></code></a> et <a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a><a class=\"heading-anchor\" href=\"#static-root-and-static-url\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Les fichiers statiques sont servis automatiquement par le serveur de développement. En production, vous devez définir un répertoire <a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_ROOT</span></code></a> dans lequel <a class=\"reference internal\" href=\"/fr/4.1/ref/contrib/staticfiles/#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">collectstatic</span></code></a> va copier les fichiers.</p>\n<p>Voir <a class=\"reference internal\" href=\"/fr/4.1/howto/static-files/\"><span class=\"doc\">Gestion des fichiers statiques (par ex. images, JavaScript, CSS)</span></a> pour plus d’informations.</p>\n</section>\n<section id=\"media-root-and-media-url\">\n<h3><a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-MEDIA_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_ROOT</span></code></a> et <a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-MEDIA_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_URL</span></code></a><a class=\"heading-anchor\" href=\"#media-root-and-media-url\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Les fichiers « média » sont téléversés par vos utilisateurs. Vous ne devez pas leur faire confiance ! Vérifiez que votre serveur Web n’essaie jamais de les interpréter. Par exemple, si un utilisateur téléverse un fichier <code class=\"docutils literal notranslate\"><span class=\"pre\">.php</span></code>, le serveur Web ne doit jamais l’exécuter.</p>\n<p>C’est maintenant le moment favorable de vérifier votre stratégie de sauvegarde pour ces fichiers.</p>\n</section>\n</section>\n<section id=\"https\">\n<h2>HTTPS<a class=\"heading-anchor\" href=\"#https\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Tout site Web autorisant des utilisateurs à se connecter devrait imposer l’accès HTTPS généralisé pour éviter de transmettre des jetons d’accès en clair. Dans Django, les jetons d’accès contiennent l’identifiant et le mot de passe, le cookie de session et les jetons de réinitialisation de mot de passe (vous ne pouvez guère mieux protéger les jetons de réinitialisation de mot de passe si vous les envoyer par courriel).</p>\n<p>La protection de zones sensibles comme les comptes des utilisateurs ou l’interface d’administration n’est pas suffisant, car le même cookie de session est utilisé à la fois pour HTTP et HTTPS. Votre serveur Web doit rediriger tout le trafic HTTP vers HTTPS et ne transmettre que les requêtes HTTPS à Django.</p>\n<p>Après avoir configuré HTTPS, activez les réglages suivants.</p>\n<section id=\"csrf-cookie-secure\">\n<h3><a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-CSRF_COOKIE_SECURE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CSRF_COOKIE_SECURE</span></code></a><a class=\"heading-anchor\" href=\"#csrf-cookie-secure\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Définissez-le à <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> pour éviter de transmettre le cookie CSRF accidentellement par HTTP.</p>\n</section>\n<section id=\"session-cookie-secure\">\n<h3><a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-SESSION_COOKIE_SECURE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SESSION_COOKIE_SECURE</span></code></a><a class=\"heading-anchor\" href=\"#session-cookie-secure\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Définissez-le à <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> pour éviter de transmettre le cookie de session accidentellement par HTTP.</p>\n</section>\n</section>\n<section id=\"performance-optimizations\">\n<h2>Optimisations de performance<a class=\"heading-anchor\" href=\"#performance-optimizations\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>La configuration de <a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span> <span class=\"pre\">=</span> <span class=\"pre\">False</span></code></a> désactive plusieurs fonctionnalités qui ne sont utiles qu’en cours de développement. De plus, vous pouvez affiner les réglages suivants.</p>\n<section id=\"sessions\">\n<h3>Sessions<a class=\"heading-anchor\" href=\"#sessions\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Envisagez l’utilisation de <a class=\"reference internal\" href=\"/fr/4.1/topics/http/sessions/#cached-sessions-backend\"><span class=\"std std-ref\">sessions en cache</span></a> pour améliorer les performances.</p>\n<p>Si vous utilisez des sessions stockées en base de données, ref:effacez régulièrement les anciennes sessions &lt;clearing-the-session-store&gt; afin d’éviter de stocker des données inutiles.</p>\n</section>\n<section id=\"conn-max-age\">\n<h3><a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-CONN_MAX_AGE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CONN_MAX_AGE</span></code></a><a class=\"heading-anchor\" href=\"#conn-max-age\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>L’activation des <a class=\"reference internal\" href=\"/fr/4.1/ref/databases/#persistent-database-connections\"><span class=\"std std-ref\">connexions persistantes à la base de données</span></a> peut significativement améliorer les performances quand la connexion à la base de données constitue une part importante du temps de traitement des requêtes.</p>\n<p>C’est un plus important sur des hôtes virtualisés dont la performance réseau est limitée.</p>\n</section>\n<section id=\"templates\">\n<h3><a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></code></a><a class=\"heading-anchor\" href=\"#templates\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>L’activation du cache des chargeurs de gabarits améliore souvent les performances de manière très importante, car cela évite de devoir recompiler les gabarits lors de chacun de leurs rendus. Lorsque <a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span> <span class=\"pre\">=</span> <span class=\"pre\">False</span></code></a>, le chargeur de gabarits en cache est activé automatiquement. Voir <a class=\"reference internal\" href=\"/fr/4.1/ref/templates/api/#django.template.loaders.cached.Loader\" title=\"django.template.loaders.cached.Loader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.template.loaders.cached.Loader</span></code></a> pour plus d’informations.</p>\n</section>\n</section>\n<section id=\"error-reporting\">\n<h2>Signalement d’erreurs<a class=\"heading-anchor\" href=\"#error-reporting\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Au moment de passer votre code en production, il est censé être robuste, mais on ne peut jamais exclure des erreurs inattendues. Heureusement, Django peut capturer les erreurs et vous en avertir.</p>\n<section id=\"logging\">\n<h3><a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-LOGGING\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOGGING</span></code></a><a class=\"heading-anchor\" href=\"#logging\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Analysez votre configuration de la journalisation avant de mettre votre site Web en production et contrôlez qu’elle fonctionne comme prévu dès que l’application commence à recevoir du trafic.</p>\n<p>Consultez <a class=\"reference internal\" href=\"/fr/4.1/topics/logging/\"><span class=\"doc\">Journalisation</span></a> pour plus de détails sur la journalisation.</p>\n</section>\n<section id=\"admins-and-managers\">\n<h3><a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-ADMINS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ADMINS</span></code></a> et <a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-MANAGERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MANAGERS</span></code></a><a class=\"heading-anchor\" href=\"#admins-and-managers\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Les <a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-ADMINS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ADMINS</span></code></a> sont avertis par courriel des erreurs de type 500.</p>\n<p>Les <a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-MANAGERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MANAGERS</span></code></a> sont avertis des erreurs 404. <a class=\"reference internal\" href=\"/fr/4.1/ref/settings/#std-setting-IGNORABLE_404_URLS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">IGNORABLE_404_URLS</span></code></a> peut aider à filtrer les signalements inopportuns.</p>\n<p>Consultez <a class=\"reference internal\" href=\"/fr/4.1/howto/error-reporting/\"><span class=\"doc\">Gestion du signalement des erreurs</span></a> pour plus de détails sur le signalement d’erreurs par courriel.</p>\n<aside class=\"admonition-error-reporting-by-email-doesn-t-scale-very-well admonition\">\n<p class=\"admonition-title\">Le signalement d’erreurs par courriel n’est pas adapté au fort trafic</p>\n<p>Considérez l’emploi d’un système de surveillance d’erreurs tel que <a class=\"reference external\" href=\"https://docs.sentry.io/\">Sentry</a> avant de voir votre boîte de réception inondée de messages. Sentry peut aussi collecter la journalisation.</p>\n</aside>\n</section>\n<section id=\"customize-the-default-error-views\">\n<h3>Personnalisation des vues d’erreurs par défaut<a class=\"heading-anchor\" href=\"#customize-the-default-error-views\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django inclut des vues et des gabarits par défaut pour plusieurs codes d’erreurs HTTP. Il peut être souhaitable de remplacer les gabarits par défaut en créant les gabarits suivants dans votre répertoire de gabarits racine : <code class=\"docutils literal notranslate\"><span class=\"pre\">404.html</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">500.html</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">403.html</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">400.html</span></code>. Les <a class=\"reference internal\" href=\"/fr/4.1/ref/views/#error-views\"><span class=\"std std-ref\">vues d’erreur par défaut</span></a> qui utilisent ces gabarits devraient convenir à 99 % des applications Web, mais vous pouvez très bien les <a class=\"reference internal\" href=\"/fr/4.1/topics/http/views/#customizing-error-views\"><span class=\"std std-ref\">adapter</span></a> aussi.</p>\n</section>\n</section>","rootId":"deployment-checklist","toc":[{"title":"Lancez manage.py check --deploy","anchor":"run-manage-py-check-deploy","children":[]},{"title":"Réglages critiques","anchor":"critical-settings","children":[{"title":"SECRET_KEY","anchor":"secret-key","children":[]},{"title":"DEBUG","anchor":"debug","children":[]}]},{"title":"Réglages spécifiques à l’environnement","anchor":"environment-specific-settings","children":[{"title":"ALLOWED_HOSTS","anchor":"allowed-hosts","children":[]},{"title":"CACHES","anchor":"caches","children":[]},{"title":"DATABASES","anchor":"databases","children":[]},{"title":"EMAIL_BACKEND et réglages liés","anchor":"email-backend-and-related-settings","children":[]},{"title":"STATIC_ROOT et STATIC_URL","anchor":"static-root-and-static-url","children":[]},{"title":"MEDIA_ROOT et MEDIA_URL","anchor":"media-root-and-media-url","children":[]}]},{"title":"HTTPS","anchor":"https","children":[{"title":"CSRF_COOKIE_SECURE","anchor":"csrf-cookie-secure","children":[]},{"title":"SESSION_COOKIE_SECURE","anchor":"session-cookie-secure","children":[]}]},{"title":"Optimisations de performance","anchor":"performance-optimizations","children":[{"title":"Sessions","anchor":"sessions","children":[]},{"title":"CONN_MAX_AGE","anchor":"conn-max-age","children":[]},{"title":"TEMPLATES","anchor":"templates","children":[]}]},{"title":"Signalement d’erreurs","anchor":"error-reporting","children":[{"title":"LOGGING","anchor":"logging","children":[]},{"title":"ADMINS et MANAGERS","anchor":"admins-and-managers","children":[]},{"title":"Personnalisation des vues d’erreurs par défaut","anchor":"customize-the-default-error-views","children":[]}]}],"breadcrumbs":[{"docname":"howto/index","title":"Guides pratiques","url":"/fr/4.1/howto/"},{"docname":"howto/deployment/index","title":"Comment déployer Django","url":"/fr/4.1/howto/deployment/"}],"prev":{"docname":"howto/deployment/asgi/uvicorn","title":"Comment utiliser Django avec Uvicorn","url":"/fr/4.1/howto/deployment/asgi/uvicorn/"},"next":{"docname":"howto/upgrade-version","title":"Mise à jour de Django à une version plus récente","url":"/fr/4.1/howto/upgrade-version/"},"formats":{"html":"/fr/4.1/howto/deployment/checklist/","markdown":"/fr/4.1/howto/deployment/checklist.md","json":"/fr/4.1/howto/deployment/checklist.json"},"source":"https://github.com/django/django/blob/stable/4.1.x/docs/howto/deployment/checklist.txt","official":"https://docs.djangoproject.com/fr/4.1/howto/deployment/checklist/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}