> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Rode Flask ou Django em produção com Gunicorn

> Gunicorn para Flask e Django na Square Cloud: faça bind em 0.0.0.0:80, ajuste os workers à sua RAM com gunicorn.conf.py e defina o START na configuração.

O Gunicorn é um servidor HTTP WSGI para Python que roda Flask, Django e outras aplicações WSGI em produção. Este guia mostra como iniciar a sua aplicação com o Gunicorn, ajustá-lo à RAM do seu plano e rodá-lo na Square Cloud.

## Instale o Gunicorn

Instale o Gunicorn na sua máquina:

```bash theme={"system"}
pip install gunicorn
```

Adicione também o `gunicorn` ao seu `requirements.txt`, para que a Square Cloud o instale junto com as suas outras dependências:

```txt requirements.txt theme={"system"}
flask
gunicorn
```

## Uso básico

Para rodar uma aplicação com o Gunicorn, você precisa de uma aplicação WSGI, como uma feita com Flask ou Django, e precisa saber o nome do módulo e o nome da variável que contém o objeto da aplicação WSGI.

Por exemplo, se você tiver uma aplicação Flask em um arquivo chamado `app.py` e a instância do Flask se chamar `app`, você pode executá-la com o Gunicorn usando o seguinte comando:

```bash theme={"system"}
python -m gunicorn --bind 0.0.0.0:80 app:app
```

Neste comando:

* `python -m gunicorn` executa o Gunicorn como um módulo Python.
* `--bind 0.0.0.0:80` faz o Gunicorn escutar em todas as interfaces de rede na porta 80.
* `app:app` especifica o nome do módulo (`app`) e o nome da variável (`app`) que contém o objeto da aplicação WSGI.

Para Django, aponte o Gunicorn para o módulo `wsgi.py` que o Django cria dentro do pacote do seu projeto (troque `myproject` pelo nome do seu projeto):

```bash theme={"system"}
python -m gunicorn --bind 0.0.0.0:80 myproject.wsgi:application
```

## Opções adicionais

O Gunicorn fornece diversas opções para personalizar seu comportamento. Estas são as mais comuns; a [referência oficial de configurações do Gunicorn](https://gunicorn.org/reference/settings/) lista todas elas.

### Workers

* `--workers <número>`

Essa opção define o número de processos *workers* responsáveis por lidar com as requisições. Cada worker é um processo separado com a sua própria cópia da aplicação na memória, então na Square Cloud o limite costuma ser a RAM, não a CPU. Comece com 2 workers e adicione mais só depois de aumentar o `MEMORY`. Se a sua aplicação parar com `LACK_OF_RAM`, diminua o número de workers.

<Warning>Não dimensione os workers com `multiprocessing.cpu_count()` nem com a fórmula `(2 x $num_cores) + 1`: dentro de um container, a contagem de núcleos pode ser a da máquina host, o que inicia dezenas de workers e esgota a sua RAM.</Warning>

### Name

* `--name <nome>`
* `-n <nome>`

Essa opção define o nome do processo para o Gunicorn.

### Worker class

* `--worker-class <classe>`
* `-k <classe>`

Essa opção define o tipo de worker a ser usado. O padrão é `sync`, mas você também pode usar `gevent`, `eventlet`, `tornado` ou outros tipos de workers.

## Arquivo de configuração

Você também pode definir opções do Gunicorn em um arquivo de configuração Python. O Gunicorn carrega automaticamente um arquivo chamado `gunicorn.conf.py` do diretório onde ele roda, que na Square Cloud é a raiz do seu projeto. Para qualquer outro nome de arquivo, passe-o com `-c <arquivo>`.

```python gunicorn.conf.py theme={"system"}
import os

# A Square Cloud define PORT=80; o valor padrão mantém o arquivo funcionando em qualquer lugar
bind = f"0.0.0.0:{os.getenv('PORT', '80')}"
# Cada worker usa sua própria parte da RAM: aumente WEB_CONCURRENCY só junto com o MEMORY
workers = int(os.getenv("WEB_CONCURRENCY", 2))
```

Com esse arquivo no seu projeto, o comando de início não precisa mais da opção `--bind`.

## Rode na Square Cloud

Crie um arquivo `squarecloud.app` na raiz do projeto e coloque o comando do Gunicorn no campo `START`, para que a Square Cloud inicie a sua aplicação com o Gunicorn em vez do padrão `python app.py`:

<CodeGroup>
  ```systemd Linha de comando theme={"system"}
  DISPLAY_NAME=My Flask App
  MAIN=app.py
  MEMORY=512
  VERSION=recommended
  SUBDOMAIN=my-flask-app
  START=python -m gunicorn --bind 0.0.0.0:80 app:app
  ```

  ```systemd Com gunicorn.conf.py theme={"system"}
  DISPLAY_NAME=My Flask App
  MAIN=app.py
  MEMORY=512
  VERSION=recommended
  SUBDOMAIN=my-flask-app
  START=python -m gunicorn app:app
  ```
</CodeGroup>

<Note>O Gunicorn precisa fazer bind em `0.0.0.0:80`: a Square Cloud entrega o tráfego do seu subdomínio na porta `80` da sua aplicação. A Square Cloud também define a variável de ambiente `PORT` como `80`, e o Gunicorn a lê: sem a opção `--bind`, ele escuta em `0.0.0.0:$PORT` quando a `PORT` está definida.</Note>

Para Django, use `myproject.wsgi:application` no `START` e o `manage.py` do seu projeto como `MAIN`. Os tutoriais de [Flask](/pt-br/tutorials/api/flask) e [Django](/pt-br/tutorials/api/django) cobrem o deploy completo.

## Próximos passos

<CardGroup cols={3}>
  <Card title="Flask" icon="flask" href="/pt-br/tutorials/api/flask">
    Faça deploy de uma aplicação Flask com o Gunicorn.
  </Card>

  <Card title="Django" icon="python" href="/pt-br/tutorials/api/django">
    Faça deploy de um projeto Django com o Gunicorn.
  </Card>

  <Card title="A aplicação não inicia" icon="triangle-exclamation" href="/pt-br/platform/troubleshooting/app-wont-start">
    Corrija EADDRINUSE, LACK\_OF\_RAM e outras falhas na inicialização.
  </Card>
</CardGroup>

## Gostou desse artigo?

* Criamos este conteúdo com o máximo de cuidado para oferecer a melhor ajuda possível.
  Se o artigo contribuiu de alguma forma, valorize nosso trabalho! Desenvolvedores já avaliaram a Square Cloud com **4,9/5 em 402 avaliações** no Google e Trustpilot: deixe a sua também! Isso nos ajuda a entender o que é mais importante para você.

<CardGroup cols={2}>
  <Card title="Google Reviews" icon="google" href="https://g.page/r/CYZenpQcDgTzEAI/review">
    Deixe sua avaliação no Google Reviews.
  </Card>

  <Card title="Trustpilot" icon="star" href="https://www.trustpilot.com/review/squarecloud.app">
    Deixe sua avaliação no Trustpilot.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.