{"title":"Lista de verificação para distribuição","version":"6.1","locale":"pt-br","docname":"howto/deployment/checklist","url":"/pt-br/6.1/howto/deployment/checklist/","canonical":"https://djangodocs.dev/pt-br/6.1/howto/deployment/checklist/","summary":"A internet é um ambiente hostil. Antes de publicar seu projeto Django, você deve tirar um tempo para rever suas configurações, tendo em mente segurança, performance…","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>A internet é um ambiente hostil. Antes de publicar seu projeto Django, você deve tirar um tempo para rever suas configurações, tendo em mente segurança, performance e operações.</p>\n<p>O Django inclui muitos <a class=\"reference internal\" href=\"/pt-br/6.1/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/6.1/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=\"switch-away-from-manage-py-runserver\">\n<h2>Switch away from <code class=\"docutils literal notranslate\"><span class=\"pre\">manage.py</span> <span class=\"pre\">runserver</span></code><a class=\"heading-anchor\" href=\"#switch-away-from-manage-py-runserver\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>The <a class=\"reference internal\" href=\"/pt-br/6.1/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">runserver</span></code></a> command is not designed for a production setting. Be\nsure to switch to a production-ready WSGI or ASGI server. For a few common\noptions, see <a class=\"reference internal\" href=\"/pt-br/6.1/howto/deployment/wsgi/\"><span class=\"doc\">WSGI servers</span></a> or\n<a class=\"reference internal\" href=\"/pt-br/6.1/howto/deployment/asgi/\"><span class=\"doc\">ASGI servers</span></a>.</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/6.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\">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/6.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\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>Certifique-se de que as chaves secretas antigas sejam removidas de <code class=\"docutils literal notranslate\"><span class=\"pre\">SECRET_KEY_FALLBACKS</span></code> em tempo hábil.</p>\n</section>\n<section id=\"debug\">\n<h3><a class=\"reference internal\" href=\"/pt-br/6.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\">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/6.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>, 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/6.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\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Quando <a class=\"reference internal\" href=\"/pt-br/6.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>, o Django não irá funcionar de maneira alguma sem um valor adequado para o <a class=\"reference internal\" href=\"/pt-br/6.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>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>Você também deve configurar o servidor web que fica na frente do Django para validar o host. Ele deve responder com uma página de erro estática ou ignorar solicitações de hosts incorretos em vez de encaminhar a solicitação para o Django. Desta forma você evitará erros espúrios em seus logs do Django (ou e-mails se você tiver o relatório de erros configurado dessa forma). Por exemplo, no nginx você pode configurar um servidor padrão para retornar “444 No Response” em um host não reconhecido:</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/6.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\">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/6.1/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/6.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\">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/6.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>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=\"mailers-and-related-settings\">\n<h3><a class=\"reference internal\" href=\"/pt-br/6.1/ref/settings/#std-setting-MAILERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MAILERS</span></code></a> and related settings<a class=\"heading-anchor\" href=\"#mailers-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>In development, email is often configured to be printed to the console or\nstored in a local file. For production, you probably want to send real email\nmessages. <a class=\"reference internal\" href=\"/pt-br/6.1/topics/email/#topic-email-configuration\"><span class=\"std std-ref\">Configuring email</span></a> has more information about setting\n<a class=\"reference internal\" href=\"/pt-br/6.1/ref/settings/#std-setting-MAILERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MAILERS</span></code></a> to use production email servers.</p>\n<p>By default, Django sends email from <code class=\"docutils literal notranslate\"><span class=\"pre\">webmaster&#64;localhost</span></code> and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">root&#64;localhost</span></code>. However, many mail providers reject email from these\naddresses. To use different sender addresses, modify the\n<a class=\"reference internal\" href=\"/pt-br/6.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> and <a class=\"reference internal\" href=\"/pt-br/6.1/ref/settings/#std-setting-SERVER_EMAIL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SERVER_EMAIL</span></code></a> settings.</p>\n</section>\n<section id=\"static-root-and-static-url\">\n<h3><a class=\"reference internal\" href=\"/pt-br/6.1/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/6.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\">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/6.1/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/6.1/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/6.1/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/6.1/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/6.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\">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/6.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\">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/6.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\">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/6.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> 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/6.1/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/6.1/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/6.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\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Habilitando <a class=\"reference internal\" href=\"/pt-br/6.1/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/6.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\">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/6.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>, the cached template loader is enabled\nautomatically. See <a class=\"reference internal\" href=\"/pt-br/6.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> 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/6.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\">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/6.1/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/6.1/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/6.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\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><a class=\"reference internal\" href=\"/pt-br/6.1/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/6.1/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/6.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> pode ajudar a filtrar erros ilegítimos.</p>\n<p>Veja <a class=\"reference internal\" href=\"/pt-br/6.1/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/6.1/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/6.1/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":"Switch away from manage.py runserver","anchor":"switch-away-from-manage-py-runserver","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":"MAILERS and related settings","anchor":"mailers-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":"How-to guides","url":"/pt-br/6.1/howto/"},{"docname":"howto/deployment/index","title":"How to deploy Django","url":"/pt-br/6.1/howto/deployment/"}],"prev":{"docname":"howto/deployment/asgi/uvicorn","title":"How to use Django with Uvicorn","url":"/pt-br/6.1/howto/deployment/asgi/uvicorn/"},"next":{"docname":"howto/static-files/deployment","title":"How to deploy static files","url":"/pt-br/6.1/howto/static-files/deployment/"},"formats":{"html":"/pt-br/6.1/howto/deployment/checklist/","markdown":"/pt-br/6.1/howto/deployment/checklist.md","json":"/pt-br/6.1/howto/deployment/checklist.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/howto/deployment/checklist.txt","official":"https://docs.djangoproject.com/pt-br/6.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","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}