{"title":"Lista de verificação para distribuição","version":"4.2","locale":"pt-br","docname":"howto/deployment/checklist","url":"/pt-br/4.2/howto/deployment/checklist/","canonical":"https://djangodocs.dev/pt-br/4.2/howto/deployment/checklist/","summary":"The internet is a hostile environment. Before deploying your Django project, you should take some time to review your settings, with security, performance, and…","html":"<h1>Lista de verificação para distribuição<a class=\"heading-anchor\" href=\"#deployment-checklist\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>The internet is a hostile environment. Before deploying your Django project,\nyou should take some time to review your settings, with security, performance,\nand operations in mind.</p>\n<p>O Django inclui muitos <a class=\"reference internal\" href=\"/pt-br/4.2/topics/security/\"><span class=\"doc\">security features</span></a>. Agumas são embutidas e sempre habilitadas. Outras são opcionais porque nem sempre são apropriadas, ou porque são inconvenientes para desenvolvimento. Por exemplo, forçar HTTPS talvez não seja bom para todos os websites e não prático para desenvolvimento local.</p>\n<p>Otimização de desempenho são outra categoria de “perde-ganha” com a conveniência. Por exemplo, “cache” é útil em produção, mas não em desenvolvimento. Necessidades de relatórios de erros também são amplamente diferentes.</p>\n<p>As seguinte lista de verificação inclui configurações que:</p>\n<ul class=\"simple\">\n<li><p>devem ser configuradas propriamente para que o Django forneça o nível esperado de segurança.</p></li>\n<li><p>espera-se que sejam diferentes  em cada ambiente.</p></li>\n<li><p>habilitam características de segurança opcionais;</p></li>\n<li><p>habilitam otimização de desempenho.</p></li>\n<li><p>fornece relatório de erro.</p></li>\n</ul>\n<p>Muitas destas configurações são sensíveis e devem ser tratadas confidencialmente. Se você está publicando o código fonte do seu projeto, uma prática comum é publicar configurações adequadas para desenvolvimento, e usar o módulo de configuração para produção.</p>\n<section id=\"run-manage-py-check-deploy\">\n<h2>Execute <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\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Algumas das verificações descritas abaixo podem ser automatizadas usando a opção <a class=\"reference internal\" href=\"/pt-br/4.2/ref/django-admin/#cmdoption-check-deploy\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">check</span> <span class=\"pre\">--deploy</span></code></a>. Assegure-se de executá-lo com o arquivo de configuração como descrito  na documentação de configuração.</p>\n</section>\n<section id=\"critical-settings\">\n<h2>Configurações críticas.<a class=\"heading-anchor\" href=\"#critical-settings\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"secret-key\">\n<h3><a class=\"reference internal\" href=\"/pt-br/4.2/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\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><strong>A chave secreta deve ser um valor randômico e longo e deve ser mantido em segredo</strong></p>\n<p>Tenha ceteza que a chave usada em produção não é usada em nenhum outro local e evite “commitar” isso no código fonte. Isso reduz o número de vetores dos quais um atacante possa acessar a chave.</p>\n<p>Ao invés de “hardecodear” a chave secreta no módulo de configuração, considere carrega-lo de uma variável de ambiente:</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\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=\"s2\">&quot;SECRET_KEY&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>ou de um arquivo:</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=\"s2\">&quot;/etc/secret_key.txt&quot;</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=\"/pt-br/4.2/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\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=\"s2\">&quot;CURRENT_SECRET_KEY&quot;</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=\"s2\">&quot;OLD_SECRET_KEY&quot;</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=\"/pt-br/4.2/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\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><strong>Nunca habilite o debug em produção</strong></p>\n<p>Certamente você desenvolvimento seu projeto com  <a class=\"reference internal\" href=\"/pt-br/4.2/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>, já que isso habilita características convenientes como “tracebakcs” no seu browser.</p>\n<p>Para o ambiente de produção, embora, isso é realmente uma má idéia, porque ele abre uma série de informações sobre seu projeto: dicas de seu código fonte, variáveis locais, configurações, bibliotecas usadas, etc.</p>\n</section>\n</section>\n<section id=\"environment-specific-settings\">\n<h2>Configurações específicas de configurações<a class=\"heading-anchor\" href=\"#environment-specific-settings\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"allowed-hosts\">\n<h3><a class=\"reference internal\" href=\"/pt-br/4.2/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\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Quando <a class=\"reference internal\" href=\"/pt-br/4.2/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>, o Django não irá funcionar de maneira alguma sem um valor adequado para o <a class=\"reference internal\" href=\"/pt-br/4.2/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>Essa configuração é requerida para proteger seu site de ataques CSRF. Se usar um caracter corínga, você deve fazer sua própria validação do cabeçalho HTTP do <code class=\"docutils literal notranslate\"><span class=\"pre\">Host</span></code>, ou de outra maneira tenha certeza que você não está vulnerável a esse tipo de ataque.</p>\n<p>You should also configure the web server that sits in front of Django to\nvalidate the host. It should respond with a static error page or ignore\nrequests for incorrect hosts instead of forwarding the request to Django. This\nway you’ll avoid spurious errors in your Django logs (or emails if you have\nerror reporting configured that way). For example, on nginx you might set up a\ndefault server to return “444 No Response” on an unrecognized host:</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=\"/pt-br/4.2/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\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Se você estiver usando um “cache”, os parâmetros de conexão do embiente de desenvolvimento talvez sejam diferentes dos parâmetros de produção. O padrão do Django é “per-processo” <a class=\"reference internal\" href=\"/pt-br/4.2/topics/cache/#local-memory-caching\"><span class=\"std std-ref\">local-memory caching</span></a> o qual talvez não seja o desejável.</p>\n<p>Servidores de “cache” tem em geral uma autenticação fraca. Assegure-se que somente aceite conexões de seus servidores de aplicações.</p>\n</section>\n<section id=\"databases\">\n<h3><a class=\"reference internal\" href=\"/pt-br/4.2/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\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Parâmetros de conexões de bancos de dados são provavelmente diferentes em desenvolvimento e em produção.</p>\n<p>Senhas de bancos de dados são muito sensíveis. Você deve protegê-las tal como o <a class=\"reference internal\" href=\"/pt-br/4.2/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>Para máxima segurança, certifique que os servidores de bancos de dados somente aceitem conexões de seus servidores de aplicação.</p>\n<p>Se não configurou backup para seu banco de dados, faça isso já!</p>\n</section>\n<section id=\"email-backend-and-related-settings\">\n<h3><a class=\"reference internal\" href=\"/pt-br/4.2/ref/settings/#std-setting-EMAIL_BACKEND\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">EMAIL_BACKEND</span></code></a> e configurações relacionadas<a class=\"heading-anchor\" href=\"#email-backend-and-related-settings\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Se seu site envia e-mails, estes valores precisam ser definidos corretamente.</p>\n<p>Por padrão, o Django envia email de <a class=\"reference external\" href=\"mailto:webmaster&#37;&#52;&#48;localhost\">webmaster<span>&#64;</span>localhost</a> e <a class=\"reference external\" href=\"mailto:root&#37;&#52;&#48;localhost\">root<span>&#64;</span>localhost</a>. Entretanto, alguns provedores de email rejeitam emails destes endereços. Para usar endereços de envio diferentes, modifique as configurações <a class=\"reference internal\" href=\"/pt-br/4.2/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> e <a class=\"reference internal\" href=\"/pt-br/4.2/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=\"/pt-br/4.2/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_ROOT</span></code></a> e <a class=\"reference internal\" href=\"/pt-br/4.2/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\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Arquivos estáticos são automaticamente servidos pelo servidor de desenvolvimento. Em produção, você deve definir o diretório <a class=\"reference internal\" href=\"/pt-br/4.2/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_ROOT</span></code></a> onde o <a class=\"reference internal\" href=\"/pt-br/4.2/ref/contrib/staticfiles/#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">collectstatic</span></code></a> irá copiá-los.</p>\n<p>Veja <a class=\"reference internal\" href=\"/pt-br/4.2/howto/static-files/\"><span class=\"doc\">How to manage static files (e.g. images, JavaScript, CSS)</span></a> para mais informações.</p>\n</section>\n<section id=\"media-root-and-media-url\">\n<h3><a class=\"reference internal\" href=\"/pt-br/4.2/ref/settings/#std-setting-MEDIA_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_ROOT</span></code></a> e <a class=\"reference internal\" href=\"/pt-br/4.2/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\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Arquivos de media são enviados por usuários. Eles não são confiáveis! Assegure-se que seu servidor web nunca tente interpretá-los. Por exemplo, se um usuário enviar um arquivo <code class=\"docutils literal notranslate\"><span class=\"pre\">.php</span></code>, o servidor web não deve executá-lo.</p>\n<p>Agora é uma boa hora para verificar sua estratégia de backup para estes arquivos.</p>\n</section>\n</section>\n<section id=\"https\">\n<h2>HTTPS<a class=\"heading-anchor\" href=\"#https\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Qualquer website que possibilita autenticação de usuários deveria exigir HTTPS em todo o site para evitar a transmissão de tokens planos. No Djano, os tokes de acesso incluem o login/senha, a “cookie” da sessão e o token de reset de senha. (Não é possível fazer muito para proteger bem os tokens de reset de senha se são enviados via email).</p>\n<p>Proteger áreas sensíveis como a conta do usuário e o admin não são sificientes, porque o mesmo “cookie” de sessão é usado para HTTP e HTTPS. Seu servidor WEB deve redirecionar todas as requisições HTTP para HTTPS, e somente transmitir requests HTTPS para o Django.</p>\n<p>Uma vez que tenha configurado HTTPS, habilite as seguintes configurações.</p>\n<section id=\"csrf-cookie-secure\">\n<h3><a class=\"reference internal\" href=\"/pt-br/4.2/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\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Defina este como <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> para evitar transmissão do “cookie” de CSRF através de HTTP acidentalmente.</p>\n</section>\n<section id=\"session-cookie-secure\">\n<h3><a class=\"reference internal\" href=\"/pt-br/4.2/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\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Defina este como <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> para evitar transmissão do “cookie” da sessão através de HTTP acidentalmente.</p>\n</section>\n</section>\n<section id=\"performance-optimizations\">\n<h2>Otimizações de desempenho.<a class=\"heading-anchor\" href=\"#performance-optimizations\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>A Configuração <a class=\"reference internal\" href=\"/pt-br/4.2/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> desabilita muitas características que são úteis somente em desenvolvimento. Além disso, você pode ajustar as seguintes configurações.</p>\n<section id=\"sessions\">\n<h3>Sessões<a class=\"heading-anchor\" href=\"#sessions\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Consider using <a class=\"reference internal\" href=\"/pt-br/4.2/topics/http/sessions/#cached-sessions-backend\"><span class=\"std std-ref\">cached sessions</span></a> to improve\nperformance.</p>\n<p>If using database-backed sessions, regularly <a class=\"reference internal\" href=\"/pt-br/4.2/topics/http/sessions/#clearing-the-session-store\"><span class=\"std std-ref\">clear old sessions</span></a> to avoid storing unnecessary data.</p>\n</section>\n<section id=\"conn-max-age\">\n<h3><a class=\"reference internal\" href=\"/pt-br/4.2/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\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Habilitando <a class=\"reference internal\" href=\"/pt-br/4.2/ref/databases/#persistent-database-connections\"><span class=\"std std-ref\">persistent database connections</span></a> pode resultar em um bom aumento de velocidade no tempo de processamento de requisições quando se conecta a contas do banco de dados.</p>\n<p>Isso ajuda muito em Hosts virtualizados com desempenho de rede limitado.</p>\n</section>\n<section id=\"templates\">\n<h3><a class=\"reference internal\" href=\"/pt-br/4.2/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\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Enabling the cached template loader often improves performance drastically, as\nit avoids compiling each template every time it needs to be rendered. When\n<a class=\"reference internal\" href=\"/pt-br/4.2/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>, the cached template loader is enabled\nautomatically. See <a class=\"reference internal\" href=\"/pt-br/4.2/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> for more\ninformation.</p>\n</section>\n</section>\n<section id=\"error-reporting\">\n<h2>Relatório de erro<a class=\"heading-anchor\" href=\"#error-reporting\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Na hora em que o código é enviado para produção, espera-se robustez, mas não podemos ter erros inexperados. Menos mal, o Django pode capturar estes erros e noticá-los de acordo.</p>\n<section id=\"logging\">\n<h3><a class=\"reference internal\" href=\"/pt-br/4.2/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\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Reveja a sua configuração de log antes de colocar seu website em produção, e verifique se este está funcionando como esperado tão logo receba algum tráfego.</p>\n<p>Veja <a class=\"reference internal\" href=\"/pt-br/4.2/topics/logging/\"><span class=\"doc\">Logging</span></a> para detalhes de log.</p>\n</section>\n<section id=\"admins-and-managers\">\n<h3><a class=\"reference internal\" href=\"/pt-br/4.2/ref/settings/#std-setting-ADMINS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ADMINS</span></code></a> e <a class=\"reference internal\" href=\"/pt-br/4.2/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\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><a class=\"reference internal\" href=\"/pt-br/4.2/ref/settings/#std-setting-ADMINS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ADMINS</span></code></a> será notificado de erros do tipo 500 por email.</p>\n<p><a class=\"reference internal\" href=\"/pt-br/4.2/ref/settings/#std-setting-MANAGERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MANAGERS</span></code></a> serão notificados de erros do tipo 404. <a class=\"reference internal\" href=\"/pt-br/4.2/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> pode ajudar a filtrar erros ilegítimos.</p>\n<p>Veja <a class=\"reference internal\" href=\"/pt-br/4.2/howto/error-reporting/\"><span class=\"doc\">How to manage error reporting</span></a> para detalhes sobre relatórios de erros por email.</p>\n<aside class=\"admonition-error-reporting-by-email-doesn-t-scale-very-well admonition\">\n<p class=\"admonition-title\">Relatórios de erros por email não escalam muito bem.</p>\n<p>Considere usar um sistema de monitoramento de erros tal como o <a class=\"reference external\" href=\"https://docs.sentry.io/\">Sentry</a> antes que sua caixa postal seja cheia de relatórios. O Sentry pode também agregar logs.</p>\n</aside>\n</section>\n<section id=\"customize-the-default-error-views\">\n<h3>Customize as views de erro padrão<a class=\"heading-anchor\" href=\"#customize-the-default-error-views\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django includes default views and templates for several HTTP error codes. You\nmay want to override the default templates by creating the following templates\nin your root template directory: <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>, and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">400.html</span></code>. The <a class=\"reference internal\" href=\"/pt-br/4.2/ref/views/#error-views\"><span class=\"std std-ref\">default error views</span></a> that use these\ntemplates should suffice for 99% of web applications, but you can\n<a class=\"reference internal\" href=\"/pt-br/4.2/topics/http/views/#customizing-error-views\"><span class=\"std std-ref\">customize them</span></a> as well.</p>\n</section>\n</section>","rootId":"deployment-checklist","toc":[{"title":"Execute manage.py check --deploy","anchor":"run-manage-py-check-deploy","children":[]},{"title":"Configurações críticas.","anchor":"critical-settings","children":[{"title":"SECRET_KEY","anchor":"secret-key","children":[]},{"title":"DEBUG","anchor":"debug","children":[]}]},{"title":"Configurações específicas de configurações","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 e configurações relacionadas","anchor":"email-backend-and-related-settings","children":[]},{"title":"STATIC_ROOT e STATIC_URL","anchor":"static-root-and-static-url","children":[]},{"title":"MEDIA_ROOT e 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":"Otimizações de desempenho.","anchor":"performance-optimizations","children":[{"title":"Sessões","anchor":"sessions","children":[]},{"title":"CONN_MAX_AGE","anchor":"conn-max-age","children":[]},{"title":"TEMPLATES","anchor":"templates","children":[]}]},{"title":"Relatório de erro","anchor":"error-reporting","children":[{"title":"LOGGING","anchor":"logging","children":[]},{"title":"ADMINS e MANAGERS","anchor":"admins-and-managers","children":[]},{"title":"Customize as views de erro padrão","anchor":"customize-the-default-error-views","children":[]}]}],"breadcrumbs":[{"docname":"howto/index","title":"Guias de “como fazer”","url":"/pt-br/4.2/howto/"},{"docname":"howto/deployment/index","title":"How to deploy Django","url":"/pt-br/4.2/howto/deployment/"}],"prev":{"docname":"howto/deployment/asgi/uvicorn","title":"How to use Django with Uvicorn","url":"/pt-br/4.2/howto/deployment/asgi/uvicorn/"},"next":{"docname":"howto/upgrade-version","title":"How to upgrade Django to a newer version","url":"/pt-br/4.2/howto/upgrade-version/"},"formats":{"html":"/pt-br/4.2/howto/deployment/checklist/","markdown":"/pt-br/4.2/howto/deployment/checklist.md","json":"/pt-br/4.2/howto/deployment/checklist.json"},"source":"https://github.com/django/django/blob/stable/4.2.x/docs/howto/deployment/checklist.txt","official":"https://docs.djangoproject.com/pt-br/4.2/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"]}