Tempo de leitura: 3 minutos
O servidor de desenvolvimento do Flask é ótimo para testar, mas não foi feito para produção. Para deixar a sua API no ar de verdade, o combo clássico é Flask com Gunicorn, controlado pelo systemd e atrás do Nginx. Dá para montar tudo em poucos minutos.
Aplicações Python rodam bem em qualquer VPS Linux com recursos garantidos. Se você ainda não tem onde rodar isso, a Cloud VPS Brasil já entrega o servidor pronto.
A arquitetura
- Flask: o seu código.
- Gunicorn: servidor de aplicação que roda vários workers do seu código.
- systemd: mantém o Gunicorn ligado, reinicia em caso de falha e sobe junto com o servidor.
- Nginx: recebe as visitas, entrega o HTTPS e repassa para o Gunicorn.
Passo 1: preparar o ambiente
sudo apt update
sudo apt install python3-venv python3-pip nginx -y
sudo mkdir -p /opt/meuapp && cd /opt/meuapp
python3 -m venv venv
source venv/bin/activate
pip install flask gunicorn
Passo 2: criar a aplicação
Crie o arquivo /opt/meuapp/app.py:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/")
def inicio():
return jsonify(status="ok", mensagem="API no ar")
Teste direto com o Gunicorn:
gunicorn --workers 3 --bind 127.0.0.1:8000 app:app
Para testar sem abrir porta, use um túnel SSH (ssh -L 8000:127.0.0.1:8000 usuario@IP_DA_VPS) e abra http://127.0.0.1:8000 no navegador do seu computador: deve aparecer o JSON. Pare o teste no servidor com Ctrl+C.
Passo 3: criar o serviço no systemd
Crie um usuário sem login para rodar o app e dê a ele a pasta:
sudo useradd --system --no-create-home --shell /usr/sbin/nologin meuapp
sudo chown -R meuapp:meuapp /opt/meuapp
Crie /etc/systemd/system/meuapp.service:
[Unit]
Description=Minha API Flask (Gunicorn)
After=network.target
[Service]
User=meuapp
Group=meuapp
WorkingDirectory=/opt/meuapp
ExecStart=/opt/meuapp/venv/bin/gunicorn --workers 3 --bind 127.0.0.1:8000 app:app
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
Ative e inicie:
sudo systemctl daemon-reload
sudo systemctl enable --now meuapp
sudo systemctl status meuapp
Para entender melhor os comandos, veja Systemctl na VPS Linux.
Passo 4: configurar o Nginx como proxy reverso
Crie /etc/nginx/sites-available/meuapp:
server {
listen 80;
server_name api.seudominio.com.br;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Ative, teste e recarregue:
sudo ln -s /etc/nginx/sites-available/meuapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Mais detalhes em Nginx como Proxy Reverso na VPS. Para o HTTPS, use o Certbot.
Quantos workers usar
Uma regra comum é (2 x núcleos de CPU) + 1. Numa VPS de 2 núcleos, 5 workers. Se a sua aplicação usa muita memória, reduza.
Como ver os logs
sudo journalctl -u meuapp -f
Erros comuns
- 502 Bad Gateway: o Gunicorn não está rodando ou a porta está errada. Veja
systemctl status meuapp. - Permissão negada: confira o dono da pasta e o usuário do serviço.
- Mudou o código e nada mudou: reinicie com
sudo systemctl restart meuapp.
Sua API Python numa VPS estável
O código fica no ar o tempo todo quando o servidor também fica. Na Cloud VPS Brasil você conta com Intel Xeon Gold, SSD NVMe, baixa latência, tráfego ilimitado, preço fixo em reais e suporte humano via WhatsApp e ticket. Fale com a equipe pelo WhatsApp e escolha o plano ideal para o seu projeto.