<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4770335184075840901</id><updated>2026-04-05T19:21:46.605-03:00</updated><category term="javascript"/><category term="C#"/><category term="microsoft"/><category term="oracle"/><category term="delphi"/><category term=".NET"/><category term="select"/><category term="Java"/><category term="sgbd"/><category term="ASP"/><category term="sql"/><category term="order by"/><category term="array"/><category term="android"/><category term="function"/><category term="funções"/><category term="where"/><category term="função"/><category term="Eclipse"/><category term="dicas"/><category term="from"/><category term="politica"/><category term="group by"/><category term="métodos"/><category term="object"/><category term="react"/><category term="Silverlight"/><category term="arquivo"/><category term="desenvolvimento"/><category term="having"/><category term="php"/><category term="string"/><category term="windows"/><category term="campanha"/><category term="estrutura"/><category term="google"/><category term="operadores"/><category term="table"/><category term="tutoriais"/><category term="Scrum"/><category term="arquivos"/><category term="artigos"/><category term="browser"/><category term="corrupção"/><category term="gridview"/><category term="loop"/><category term="python"/><category term="view"/><category term="web"/><category term="clojure"/><category term="constraints"/><category term="consulta"/><category term="corrupçao"/><category term="create"/><category term="data hora"/><category term="delete"/><category term="design"/><category term="escopo"/><category term="funcional"/><category term="functional"/><category term="layout"/><category term="mysql"/><category term="number"/><category term="objetos"/><category term="pattern"/><category term="repetição"/><category term="twitter"/><category term="variáveis"/><category term="IIFE"/><category term="alterar"/><category term="argumento"/><category term="atualidades"/><category term="boolean"/><category term="classes"/><category term="configuração"/><category term="consciência"/><category term="construtores"/><category term="def"/><category term="deputados"/><category term="dispositivos"/><category term="edit"/><category term="escandalo"/><category term="firefox"/><category term="flask"/><category term="html"/><category term="if"/><category term="insert"/><category term="internet"/><category term="móveis"/><category term="netduino"/><category term="poo"/><category term="propriedades"/><category term="props"/><category term="push"/><category term="return"/><category term="self join"/><category term="sequence"/><category term="setState"/><category term="sqlserver"/><category term="state"/><category term="sun"/><category term="tecnologia"/><category term="update"/><category term="with"/><category term="Blog Action Day"/><category term="Fichas Suja"/><category term="Self"/><category term="acesso"/><category term="adsense"/><category term="ajax"/><category term="alter"/><category term="atualizar"/><category term="bigode"/><category term="blog"/><category term="blogagem"/><category term="break"/><category term="castelão"/><category term="check"/><category term="cliente/servidor"/><category term="coletiva"/><category term="combobox"/><category term="condicionais"/><category term="conexão"/><category term="css"/><category term="database"/><category term="datatable"/><category term="dbgrid"/><category term="deletar"/><category term="dicionário de dados"/><category term="docker"/><category term="dockerfile"/><category term="dotnet"/><category term="ecologia"/><category term="elixir"/><category term="else"/><category term="else if"/><category term="email"/><category term="emprego"/><category term="expression"/><category term="falsy"/><category term="ficha limpa"/><category term="for"/><category term="foreign"/><category term="geoprocessamento"/><category term="georeferenciamento"/><category term="git"/><category term="gps"/><category term="ie"/><category term="iex"/><category term="immediatley"/><category term="index"/><category term="inserir"/><category term="instruções"/><category term="invoked"/><category term="j2me"/><category term="join"/><category term="linux"/><category term="map"/><category term="menu"/><category term="modify"/><category term="mudança"/><category term="natal"/><category term="netbeans"/><category term="not null"/><category term="outer join"/><category term="pacotes"/><category term="pagamento"/><category term="pen drive"/><category term="petrobras"/><category term="pop"/><category term="postgres"/><category term="primary"/><category term="programação"/><category term="projeto"/><category term="pt"/><category term="right join"/><category term="role"/><category term="sarney"/><category term="script"/><category term="silverlight toolkit"/><category term="so"/><category term="strategy"/><category term="subquery"/><category term="switch"/><category term="synonyn"/><category term="texto"/><category term="this"/><category term="tipos"/><category term="top-n"/><category term="truthy"/><category term="undefined"/><category term="unique"/><category term="using"/><category term="usuário"/><category term="voltando"/><category term="while"/><category term="xaml"/><category term="!!"/><category term=".ini"/><category term=".res"/><category term="1thz"/><category term="2009"/><category term=":"/><category term="?"/><category term="Executing Anonymous"/><category term="Falsidade Ideológica"/><category term="Improbidade Administrativa"/><category term="JSON.parse"/><category term="JSON.stringify"/><category term="MDI"/><category term="Master Page"/><category term="Object.isPrototypeOf"/><category term="Object.keys"/><category term="Sanguessugas"/><category term="ambiente"/><category term="arduino"/><category term="arguments"/><category term="arrow"/><category term="automaticamente"/><category term="bigO"/><category term="bind"/><category term="bing"/><category term="biometria"/><category term="blackberry"/><category term="bll"/><category term="blogs"/><category term="bmp"/><category term="body"/><category term="bug"/><category term="busca"/><category term="buscas"/><category term="caching"/><category term="camera"/><category term="campo"/><category term="canvas"/><category term="case"/><category term="castelo"/><category term="centralizar"/><category term="chain"/><category term="chain of responsibility"/><category term="chave"/><category term="chrome"/><category term="cidadania"/><category term="cigarros"/><category term="clj"/><category term="cloud computing"/><category term="code gear"/><category term="coluna"/><category term="command"/><category term="commit"/><category term="compactação"/><category term="componentes"/><category term="compra"/><category term="compress"/><category term="computex"/><category term="concat"/><category term="conj"/><category term="connect by"/><category term="console"/><category term="conspiração"/><category term="continue"/><category term="controlador"/><category term="copiar"/><category term="core"/><category term="cores"/><category term="correlated"/><category term="corrupão"/><category term="count"/><category term="cpi"/><category term="crescimento"/><category term="crimes"/><category term="crt"/><category term="cube"/><category term="cursor"/><category term="cursos"/><category term="dal"/><category term="datagrama"/><category term="date"/><category term="day"/><category term="decimal"/><category term="default"/><category term="defn"/><category term="demora"/><category term="desativa"/><category term="descobrir"/><category term="desculpa"/><category term="destrutores"/><category term="devops"/><category term="diagonal"/><category term="dinamicamente"/><category term="diretorio"/><category term="diversos"/><category term="do"/><category term="doação"/><category term="dto"/><category term="e3"/><category term="earth"/><category term="edmar"/><category term="eletrica"/><category term="embarcadero"/><category term="encapsulamento"/><category term="encontrou"/><category term="enter"/><category term="equijoin"/><category term="erro"/><category term="espião"/><category term="evento"/><category term="every"/><category term="exagero"/><category term="excel"/><category term="exceções"/><category term="exemplo"/><category term="existe"/><category term="exists"/><category term="exportar"/><category term="expressão regular"/><category term="facial"/><category term="facil"/><category term="fantasmas"/><category term="file"/><category term="filme"/><category term="filter"/><category term="flashback"/><category term="flávia"/><category term="forEach"/><category term="free"/><category term="full join"/><category term="gb-1001"/><category term="generics"/><category term="geral"/><category term="globo"/><category term="graduação"/><category term="grafeno"/><category term="grant"/><category term="gratuitos"/><category term="gripe"/><category term="grouping"/><category term="grouping set"/><category term="gunicorn"/><category term="h1n1"/><category term="hack"/><category term="hangfire"/><category term="hasOwnProperty"/><category term="head"/><category term="hemocentro"/><category term="herança"/><category term="hoisting"/><category term="holografico"/><category term="honestidade"/><category term="horizontal"/><category term="hyperlink"/><category term="ibot"/><category term="imagem"/><category term="in"/><category term="informações"/><category term="iniciar"/><category term="inivisivel"/><category term="inner join"/><category term="input"/><category term="insert all"/><category term="insert first"/><category term="instalação"/><category term="instr"/><category term="intersect"/><category term="introdução"/><category term="iris"/><category term="json"/><category term="justiça"/><category term="kane"/><category term="kaywa"/><category term="key"/><category term="keys"/><category term="lcd"/><category term="left join"/><category term="lei"/><category term="length"/><category term="let"/><category term="letra"/><category term="list"/><category term="lista"/><category term="listar"/><category term="listbox"/><category term="log"/><category term="login"/><category term="lwuit"/><category term="léxica"/><category term="lógicos"/><category term="macos"/><category term="mafia"/><category term="maiusculo"/><category term="malandro"/><category term="maldito"/><category term="manipulando"/><category term="manipular"/><category term="manipulação"/><category term="merge"/><category term="method"/><category term="midia"/><category term="militares"/><category term="minus"/><category term="mit"/><category term="modelo"/><category term="monetização"/><category term="monitores"/><category term="mounting"/><category term="mouse"/><category term="mover"/><category term="multiple-column"/><category term="multiple-row"/><category term="mvc"/><category term="módulo"/><category term="nanotecnologia"/><category term="natural join"/><category term="new"/><category term="nginx"/><category term="node"/><category term="nome"/><category term="non-equijoin"/><category term="non-schema"/><category term="normal"/><category term="notebooks"/><category term="npm"/><category term="observer"/><category term="office"/><category term="open"/><category term="opera"/><category term="oplitica"/><category term="pagecontrol"/><category term="pagina"/><category term="paradigma"/><category term="parametro"/><category term="parar"/><category term="parceria"/><category term="parse"/><category term="parâmetro"/><category term="pcs"/><category term="perl"/><category term="pirataria"/><category term="polimorfismo"/><category term="pontos"/><category term="portable"/><category term="post"/><category term="primeira"/><category term="primitivos"/><category term="println"/><category term="prior"/><category term="problemas"/><category term="processador"/><category term="programming"/><category term="prototype"/><category term="protótipo"/><category term="pátria"/><category term="qr code"/><category term="radio"/><category term="reciclagem"/><category term="reconhecimento"/><category term="recurso"/><category term="rede"/><category term="rede elétrica"/><category term="reduce"/><category term="reduceRight"/><category term="regexp_instr"/><category term="regexp_like"/><category term="regexp_replace"/><category term="regexp_substr"/><category term="registro"/><category term="regulamentada"/><category term="relacional"/><category term="remover"/><category term="repeater"/><category term="responsibility"/><category term="retirar"/><category term="retorno"/><category term="reverse"/><category term="ria"/><category term="rico"/><category term="rollback"/><category term="rollup"/><category term="ruby"/><category term="sangue"/><category term="savepoint"/><category term="scalar"/><category term="schema"/><category term="segurança"/><category term="senado"/><category term="separador"/><category term="serlets"/><category term="servidor"/><category term="servidores"/><category term="serviços"/><category term="set"/><category term="shift"/><category term="siblings"/><category term="single-row"/><category term="skmmenu"/><category term="slice"/><category term="some"/><category term="sort"/><category term="splice"/><category term="start with"/><category term="strict"/><category term="stringify"/><category term="suina"/><category term="svo"/><category term="synonym"/><category term="sys_connect_by_path"/><category term="sys_connect_by_root"/><category term="tableless"/><category term="tag"/><category term="tamanho"/><category term="telefone"/><category term="televisores"/><category term="template method"/><category term="templated"/><category term="tempo"/><category term="terabyte"/><category term="terceiro"/><category term="ternário"/><category term="teste"/><category term="textarea"/><category term="timestamp"/><category term="tinyurl"/><category term="toString"/><category term="tratadas"/><category term="trigger"/><category term="twittada"/><category term="twitterfox"/><category term="typeof"/><category term="ui"/><category term="unidade"/><category term="union"/><category term="union all"/><category term="unmounting"/><category term="unshift"/><category term="unused"/><category term="unários"/><category term="updateprogress"/><category term="updating"/><category term="upload"/><category term="usb"/><category term="use"/><category term="usp"/><category term="varchar2"/><category term="verificar"/><category term="vetor"/><category term="viagens"/><category term="videos"/><category term="visão"/><category term="vírgula"/><category term="wb"/><category term="wherecloud"/><category term="window"/><category term="windows 7"/><category term="wolverine"/><category term="wrapper"/><category term="yahoo"/><category term="zebrado"/><category term="zip"/><title type='text'>PROGRAMERO</title><subtitle type='html'>Desenvolvimento e Tecnologia da Informação</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://programero.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4770335184075840901/posts/default?max-results=1&amp;redirect=false'/><link rel='alternate' type='text/html' href='http://programero.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4770335184075840901/posts/default?start-index=2&amp;max-results=1&amp;redirect=false'/><author><name>Eduardo Teixeira</name><uri>http://www.blogger.com/profile/07555342217742534840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>257</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>1</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4770335184075840901.post-5834879239115355292</id><published>2025-01-30T19:00:00.002-03:00</published><updated>2025-01-30T19:00:00.232-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="database"/><category scheme="http://www.blogger.com/atom/ns#" term="flask"/><category scheme="http://www.blogger.com/atom/ns#" term="gunicorn"/><category scheme="http://www.blogger.com/atom/ns#" term="nginx"/><category scheme="http://www.blogger.com/atom/ns#" term="postgres"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>Aplicação Flask usando Nginx e Gunicorn</title><content type='html'>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Aplicação Flask usando Nginx e Gunicorn&lt;/h2&gt;
&lt;p&gt;Se você já desenvolveu uma aplicação Flask básica, sabe que o servidor de desenvolvimento embutido não é ideal para produção. Ele não é projetado para lidar com altos volumes de tráfego ou conexões simultâneas. Para tornar sua aplicação Flask mais robusta e pronta para produção, podemos usar o &lt;strong&gt;Gunicorn&lt;/strong&gt; como servidor de aplicação e o &lt;strong&gt;Nginx&lt;/strong&gt; como proxy reverso.&lt;/p&gt;
&lt;p&gt;Neste artigo, vamos adaptar o exemplo anterior (&lt;a href=&quot;https://programero.blogspot.com/2025/01/criando-uma-aplicacao-crud-com-flask.html&quot; target=&quot;_blank&quot;&gt;Criando uma Aplicação CRUD com Flask, PostgreSQL e Docker&lt;/a&gt;) para incluir o Nginx e o Gunicorn.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;O que são Nginx e Gunicorn?&lt;/h3&gt;
&lt;h4&gt;Gunicorn&lt;/h4&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://gunicorn.org/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;71&quot; data-original-width=&quot;248&quot; height=&quot;115&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi__F_qsnyH3TE7MldhyphenhyphenPJtPES4pnOn3LuxNHn5FrVyWKTPJQxUo1uLLUGoJtJrgoj_JMo6TOpSxkXPHy63KLeoh-WE0My_5JcuudHsChSvimDv6WMG9PHxyEIBSM3skNCRcGyaOJ43e58HpbKwIzSNlyPIC4MW2xVxoZj27ci3wx6bFjLels73SOg7oupH/w400-h115/gunicorn-logo.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;O &lt;strong&gt;Gunicorn&lt;/strong&gt; (Green Unicorn) é um servidor de aplicação WSGI que roda aplicações Python como o Flask. Ele é eficiente e simples de configurar, lidando com múltiplas requisições ao mesmo tempo, algo que o servidor embutido do Flask não faz bem.&lt;/p&gt;
&lt;h4&gt;Nginx&lt;/h4&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://nginx.org/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;417&quot; data-original-width=&quot;1051&quot; height=&quot;159&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPr3Qr0WhrwpygZB4xdmmxll9ukq2CoZVriM1nKH0li8WNKEZqpKAJsyw0pg69r8H4973kLB_4diDCZydqBpe_rUJHP0TLjLzicb7tJ34VaeX2E9r3N5tievS31Aki1Z_YtcT2ZigDUyRHMaaGSqtSkKYhbKl5srOIU12xZXxBVLH_m3X4788o3siO33os/w400-h159/nginx_logo.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;O &lt;strong&gt;Nginx&lt;/strong&gt; é um servidor web que atua como um proxy reverso. Ele recebe requisições HTTP e as encaminha ao Gunicorn. Além disso, o Nginx pode:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Servir arquivos estáticos (como imagens e CSS) diretamente.&lt;/li&gt;
&lt;li&gt;Gerenciar conexões HTTPS.&lt;/li&gt;
&lt;li&gt;Balancear carga entre várias instâncias do Gunicorn.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3&gt;Estrutura do Projeto&lt;/h3&gt;
&lt;p&gt;A estrutura do projeto permanece similar ao exemplo anterior, com algumas adições para o Nginx.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;crud-app/
|-- app/
|   |-- app.py
|   |-- templates/
|   |   |-- index.html
|   |   |-- edit.html
|-- Dockerfile
|-- requirements.txt
|-- docker-compose.yml
|-- nginx.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h3&gt;Alterações Necessárias&lt;/h3&gt;
&lt;h4&gt;Passo 1: Atualizando o&amp;nbsp;&lt;code inline=&quot;&quot;&gt;requeriments.txt&lt;/code&gt;&lt;/h4&gt;&lt;h4&gt;&lt;p style=&quot;font-weight: 400;&quot;&gt;No arquivo&amp;nbsp;&lt;code inline=&quot;&quot;&gt;requeriments.txt&lt;/code&gt;, incluimos uma nova dependencia para disponibilzar o Gunicorn, substitua o conteúdo anterior pelo seguinte:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Flask==2.2.2
Flask-SQLAlchemy==3.0.2
psycopg2-binary==2.9.3
Werkzeug==2.2.2
gunicorn==20.1.0
&lt;/code&gt;&lt;/pre&gt;&lt;hr style=&quot;font-weight: 400;&quot; /&gt;&lt;/h4&gt;&lt;h4&gt;Passo 2: Atualizando o &lt;code inline=&quot;&quot;&gt;Dockerfile&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;No arquivo &lt;code inline=&quot;&quot;&gt;Dockerfile&lt;/code&gt;, configuramos o Gunicorn para servir a aplicação Flask. Substitua o conteúdo anterior pelo seguinte:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;FROM python:3.9

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 5000
CMD [&quot;gunicorn&quot;, &quot;-b&quot;, &quot;0.0.0.0:5000&quot;, &quot;app.app:app&quot;]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Aqui, usamos o Gunicorn para executar a aplicação Flask. O comando &lt;code inline=&quot;&quot;&gt;gunicorn -b 0.0.0.0:5000 app.app:app&lt;/code&gt; diz ao Gunicorn para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ligar-se ao endereço &lt;code inline=&quot;&quot;&gt;0.0.0.0&lt;/code&gt; na porta &lt;code inline=&quot;&quot;&gt;5000&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Rodar a aplicação Flask localizada na pasta&amp;nbsp;&lt;span style=&quot;font-family: monospace;&quot;&gt;app&lt;/span&gt;&amp;nbsp;no arquivo&amp;nbsp;&lt;code inline=&quot;&quot;&gt;app.py&lt;/code&gt; (o formato é&amp;nbsp;&lt;code inline=&quot;&quot;&gt;&amp;lt;pasta&amp;gt;.&amp;lt;arquivo&amp;gt;:&amp;lt;objeto&amp;gt;&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h4&gt;Passo 3: Adicionando a Configuração do Nginx&lt;/h4&gt;
&lt;p&gt;Crie um arquivo &lt;code inline=&quot;&quot;&gt;nginx.conf&lt;/code&gt; na raiz do projeto com o seguinte conteúdo:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-nginx&quot;&gt;# nginx.conf
events {
    worker_connections 1024;
}

http {
    server {
        listen 80;

        location / {
            proxy_pass http://web:5000;  # Encaminha requisições para o Gunicorn
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        location /static/ {
            alias /app/static/;  # Serve arquivos estáticos diretamente
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;O Nginx aqui está configurado para encaminhar as requisições para o serviço &lt;code inline=&quot;&quot;&gt;web&lt;/code&gt; (que executará o Gunicorn no Docker).&lt;/p&gt;
&lt;hr /&gt;
&lt;h4&gt;Passo 4: Atualizando o &lt;code inline=&quot;&quot;&gt;docker-compose.yml&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Adicione o serviço do Nginx ao &lt;code inline=&quot;&quot;&gt;docker-compose.yml&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;services:
  web:
    build: .
    expose:
      - &quot;5000&quot;
    depends_on:
      - db
  db:
    image: postgres:13
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: crud_db
    ports:
      - &quot;5432:5432&quot;
  nginx:
    image: nginx
    ports:
      - &quot;80:80&quot;
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - web
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h3&gt;Passo 5: Executando o Projeto&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Suba os contêineres com o comando:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker-compose up --build
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Acesse a aplicação em &lt;a href=&quot;http://localhost/&quot;&gt;http://localhost&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h3&gt;Benefícios da Nova Configuração&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Desempenho Melhorado&lt;/strong&gt;: O Gunicorn gerencia múltiplas requisições e o Nginx é otimizado para lidar com tráfego pesado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Segurança&lt;/strong&gt;: O Nginx adiciona uma camada de proteção contra ataques comuns.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Escalabilidade&lt;/strong&gt;: Fácil de escalar adicionando mais instâncias do Gunicorn.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gerenciamento de Arquivos Estáticos&lt;/strong&gt;: O Nginx pode servir arquivos estáticos de forma eficiente.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 style=&quot;-webkit-text-stroke-width: 0px; color: black; font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; orphans: 2; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;&quot;&gt;Conclusão&lt;/h3&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;Como vimos é importante pensar na segurança e na escalabilidade de nossas aplicações, ao usar o Nginx e o Gunicorn em nossas aplicações Flask garantimos um ambiente de produção robusto e escalável.&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;O projeto de exemplo pode ser encontrado &lt;a href=&quot;https://github.com/dunirvana/app_flask_with_db_and_nginx&quot; target=&quot;_blank&quot;&gt;aqui&lt;/a&gt;.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://programero.blogspot.com/feeds/5834879239115355292/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://programero.blogspot.com/2025/01/aplicacao-flask-usando-nginx-e-gunicorn.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4770335184075840901/posts/default/5834879239115355292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4770335184075840901/posts/default/5834879239115355292'/><link rel='alternate' type='text/html' href='http://programero.blogspot.com/2025/01/aplicacao-flask-usando-nginx-e-gunicorn.html' title='Aplicação Flask usando Nginx e Gunicorn'/><author><name>Eduardo Teixeira</name><uri>http://www.blogger.com/profile/07555342217742534840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi__F_qsnyH3TE7MldhyphenhyphenPJtPES4pnOn3LuxNHn5FrVyWKTPJQxUo1uLLUGoJtJrgoj_JMo6TOpSxkXPHy63KLeoh-WE0My_5JcuudHsChSvimDv6WMG9PHxyEIBSM3skNCRcGyaOJ43e58HpbKwIzSNlyPIC4MW2xVxoZj27ci3wx6bFjLels73SOg7oupH/s72-w400-h115-c/gunicorn-logo.jpg" height="72" width="72"/><thr:total>0</thr:total></entry></feed>