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.

5 min de leitura Equipe Python Brasil

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

AspectoHerokuRailwayVPS
FacilidadeAltaAltaMedia
ControleBaixoMedioTotal
CustoA partir de $5/mesA partir de $5/mesA partir de $4/mes
SSLAutomaticoAutomaticoManual (Let’s Encrypt)
EscalarFacilFacilManual
CI/CDGit pushGitHub integrationManual 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.

E

Equipe Python Brasil

Contribuidor do Python Brasil — Aprenda Python em Português