Deploy de Aplicacao Python — 2026 | Python Brasil
Guia completo de deploy para aplicacoes Python. Aprenda a publicar em Heroku, Railway e VPS com exemplos praticos e configuracoes prontas.
Desenvolver uma aplicacao e apenas metade do caminho. O deploy, ou seja, colocar a aplicacao em producao para que usuarios reais possam acessa-la, e uma etapa que muitos desenvolvedores acham desafiadora. Neste guia, a gente vai explorar tres opcoes populares para deploy de aplicacoes Python: Heroku, Railway e VPS, com configuracoes prontas para usar.
Preparando a Aplicacao para Deploy
Antes de qualquer deploy, sua aplicacao precisa estar pronta para producao:
# app.py - Aplicacao FastAPI de exemplo
from fastapi import FastAPI
import os
app = FastAPI(title="Minha API")
@app.get("/")
def index():
return {"mensagem": "API em producao!", "versao": "1.0.0"}
@app.get("/saude")
def healthcheck():
return {"status": "ok"}
if __name__ == "__main__":
import uvicorn
porta = int(os.environ.get("PORT", 8000))
uvicorn.run(app, host="0.0.0.0", port=porta)
Arquivos essenciais:
meu-projeto/
app.py
requirements.txt
Procfile
runtime.txt
.env.example
.gitignore
O requirements.txt:
fastapi==0.109.0
uvicorn[standard]==0.27.0
gunicorn==21.2.0
python-dotenv==1.0.0
O .gitignore:
__pycache__/
*.pyc
.env
venv/
.venv/
*.db
Deploy no Heroku
Heroku e uma das plataformas mais tradicionais para deploy de aplicacoes Python.
Configuracao
Crie o Procfile (sem extensao):
web: gunicorn -w 4 -k uvicorn.workers.UvicornWorker app:app
O runtime.txt:
python-3.12.1
Passo a Passo
# Instalar Heroku CLI
# https://devcenter.heroku.com/articles/heroku-cli
# Login
heroku login
# Criar aplicacao
heroku create minha-api-python
# Configurar variaveis de ambiente
heroku config:set SECRET_KEY=minha-chave-secreta
heroku config:set DATABASE_URL=postgresql://...
heroku config:set ENVIRONMENT=production
# Deploy via Git
git add .
git commit -m "Deploy inicial"
git push heroku main
# Verificar logs
heroku logs --tail
# Escalar dynos
heroku ps:scale web=1
Banco de Dados no Heroku
# Adicionar PostgreSQL
heroku addons:create heroku-postgresql:essential-0
# Verificar URL do banco
heroku config:get DATABASE_URL
# Rodar migrations
heroku run python manage.py migrate
Deploy no Railway
Railway e uma alternativa moderna ao Heroku, com deploy automatico via GitHub:
Configuracao
Crie o arquivo railway.toml:
[build]
builder = "nixpacks"
[deploy]
startCommand = "gunicorn -w 4 -k uvicorn.workers.UvicornWorker app:app --bind 0.0.0.0:$PORT"
healthcheckPath = "/saude"
healthcheckTimeout = 30
restartPolicyType = "on_failure"
restartPolicyMaxRetries = 3
Ou use um Procfile:
web: gunicorn -w 4 -k uvicorn.workers.UvicornWorker app:app --bind 0.0.0.0:$PORT
Passo a Passo
# Instalar Railway CLI
npm install -g @railway/cli
# Login
railway login
# Inicializar projeto
railway init
# Adicionar PostgreSQL
railway add --plugin postgresql
# Configurar variaveis
railway variables set SECRET_KEY=minha-chave
railway variables set ENVIRONMENT=production
# Deploy
railway up
# Ver logs
railway logs
Railway detecta automaticamente o Python pelo requirements.txt e configura o ambiente. A integracao com GitHub permite deploys automaticos a cada push.
Configuracao com Docker no Railway
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD gunicorn -w 4 -k uvicorn.workers.UvicornWorker app:app --bind 0.0.0.0:$PORT
Deploy em VPS (Servidor Virtual)
Para controle total, uma VPS (Digital Ocean, AWS EC2, Hetzner) e a melhor opcao:
Configuracao do Servidor
# Conectar ao servidor
ssh usuario@ip-do-servidor
# Atualizar sistema
sudo apt update && sudo apt upgrade -y
# Instalar dependencias
sudo apt install -y python3-pip python3-venv nginx certbot python3-certbot-nginx
# Criar usuario para a aplicacao
sudo useradd -m -s /bin/bash appuser
sudo su - appuser
# Clonar projeto
git clone https://github.com/usuario/meu-projeto.git
cd meu-projeto
# Criar ambiente virtual
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Systemd Service
Crie o servico para manter a aplicacao rodando:
# /etc/systemd/system/minha-app.service
[Unit]
Description=Minha Aplicacao Python
After=network.target
[Service]
User=appuser
Group=appuser
WorkingDirectory=/home/appuser/meu-projeto
Environment="PATH=/home/appuser/meu-projeto/venv/bin"
EnvironmentFile=/home/appuser/meu-projeto/.env
ExecStart=/home/appuser/meu-projeto/venv/bin/gunicorn \
-w 4 \
-k uvicorn.workers.UvicornWorker \
--bind 127.0.0.1:8000 \
app:app
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Ativar o servico:
sudo systemctl daemon-reload
sudo systemctl enable minha-app
sudo systemctl start minha-app
sudo systemctl status minha-app
Nginx como Reverse Proxy
# /etc/nginx/sites-available/minha-app
server {
listen 80;
server_name meudominio.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;
}
location /static/ {
alias /home/appuser/meu-projeto/static/;
}
}
Ativar e configurar SSL:
# Ativar site
sudo ln -s /etc/nginx/sites-available/minha-app /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
# Certificado SSL com Let's Encrypt
sudo certbot --nginx -d meudominio.com.br
Script de Deploy Automatizado
#!/usr/bin/env python3
"""Script de deploy para VPS."""
import subprocess
import sys
def executar(comando):
"""Executa comando e verifica resultado."""
print(f"Executando: {comando}")
resultado = subprocess.run(comando, shell=True)
if resultado.returncode != 0:
print(f"Erro no comando: {comando}")
sys.exit(1)
def deploy():
"""Realiza deploy completo."""
print("Iniciando deploy...")
executar("git pull origin main")
executar("source venv/bin/activate && pip install -r requirements.txt")
executar("python manage.py migrate") # Se usar banco de dados
executar("sudo systemctl restart minha-app")
print("Deploy concluido com sucesso!")
if __name__ == "__main__":
deploy()
Comparacao das Plataformas
| Aspecto | Heroku | Railway | VPS |
|---|---|---|---|
| Facilidade | Alta | Alta | Media |
| Controle | Baixo | Medio | Total |
| Custo | A partir de $5/mes | A partir de $5/mes | A partir de $4/mes |
| SSL | Automatico | Automatico | Manual (Let’s Encrypt) |
| Escalar | Facil | Facil | Manual |
| CI/CD | Git push | GitHub integration | Manual ou GitHub Actions |
Checklist de Deploy
Antes de publicar, verifique estes itens:
- Variaveis de ambiente configuradas (sem segredos no codigo)
- Debug desativado em producao
- HTTPS habilitado
- Logs configurados adequadamente
- Healthcheck endpoint funcionando
- Banco de dados com backup automatico
- Monitoramento de erros configurado (Sentry)
- Rate limiting ativo nas APIs
- CORS configurado corretamente
Boas Praticas
Ao fazer deploy de aplicacoes Python, siga estas recomendacoes:
- Use gunicorn com workers uvicorn para aplicacoes ASGI em producao
- Configure variaveis de ambiente para cada ambiente (dev, staging, prod)
- Implemente CI/CD com GitHub Actions para deploys automaticos
- Monitore a aplicacao com ferramentas como Sentry e Prometheus
- Faca backups regulares do banco de dados
- Use health checks para reinicio automatico em caso de falha
Conclusao
Cada plataforma de deploy tem seus pontos fortes. Heroku e Railway sao ideais para comecar rapido sem se preocupar com infraestrutura. Uma VPS oferece controle total e pode ser mais economica para projetos maiores. Independente da escolha, o importante e seguir boas praticas de seguranca, monitoramento e automacao. Comece com a opcao mais simples e migre quando necessario.
Equipe Python Brasil
Contribuidor do Python Brasil — Aprenda Python em Português