- Python 3.11+
- PostgreSQL 13+
- Redis 6+ (opcional, para cache)
- Git
pip install -r requirements.txt# Copiar arquivo de exemplo
cp .env.example .env
# Editar configurações
nano .env# Aplicação
APP_NAME="Fiscal XML API"
DEBUG=false
LOG_LEVEL=INFO
# Servidor
HOST=0.0.0.0
PORT=8000
# Banco de Dados
DATABASE_URL=postgresql+asyncpg://user:password@localhost:5432/fiscal_api
# API Governamental
GOVERNMENT_API_BASE_URL=https://piloto-cbs.tributos.gov.br/servico/calculadora-consumo/api
GOVERNMENT_API_TIMEOUT=30
# Segurança
SECRET_KEY=your-super-secret-key-here
JWT_ALGORITHM=HS256
# Cache (opcional)
REDIS_URL=redis://localhost:6379/0FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]version: '3.8'
services:
api:
build: .
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgresql+asyncpg://postgres:password@db:5432/fiscal_api
- REDIS_URL=redis://redis:6379/0
depends_on:
- db
- redis
db:
image: postgres:13
environment:
POSTGRES_DB: fiscal_api
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:6-alpine
ports:
- "6379:6379"
volumes:
postgres_data:# Instalar Heroku CLI
# Criar app
heroku create fiscal-xml-api
# Configurar variáveis
heroku config:set DATABASE_URL=your-postgres-url
heroku config:set SECRET_KEY=your-secret-key
# Deploy
git push heroku main# Build e push da imagem
docker build -t fiscal-xml-api .
docker tag fiscal-xml-api:latest your-ecr-repo/fiscal-xml-api:latest
docker push your-ecr-repo/fiscal-xml-api:latest
# Deploy via ECS Task Definition# Build e deploy
gcloud run deploy fiscal-xml-api \
--source . \
--platform managed \
--region us-central1 \
--allow-unauthenticated# Verificar saúde da aplicação
curl http://localhost:8000/api/v1/health
# Verificar métricas
curl http://localhost:8000/api/v1/metrics# Logs estruturados em JSON
tail -f logs/app.log | jq .
# Filtrar por nível
tail -f logs/app.log | jq 'select(.level == "ERROR")'server {
listen 443 ssl;
server_name your-domain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}# Adicionar ao main.py
from slowapi import Limiter, _rate_limit_exceeded_handler
from slowapi.util import get_remote_address
from slowapi.errors import RateLimitExceeded
limiter = Limiter(key_func=get_remote_address)
app.state.limiter = limiter
app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler)# Produção com Gunicorn
gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000upstream fiscal_api {
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://fiscal_api;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}name: Deploy to Production
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.11
- name: Install dependencies
run: |
pip install -r requirements.txt
- name: Run tests
run: |
python -m pytest
- name: Deploy to production
run: |
# Seu script de deploy aqui# Verificar conectividade
pg_isready -h localhost -p 5432
# Testar conexão
psql -h localhost -U postgres -d fiscal_api# Monitorar uso de memória
htop
# Ajustar workers do Gunicorn
gunicorn main:app -w 2 --max-requests 1000# Verificar conectividade
curl -I https://piloto-cbs.tributos.gov.br/servico/calculadora-consumo/api
# Ajustar timeout
export GOVERNMENT_API_TIMEOUT=60- Load balancer (Nginx/HAProxy)
- Múltiplas instâncias da aplicação
- Cache distribuído (Redis Cluster)
- Banco de dados com read replicas
- Aumentar CPU/RAM do servidor
- Otimizar queries do banco
- Implementar cache em memória
- Usar connection pooling
# Backup diário
pg_dump -h localhost -U postgres fiscal_api > backup_$(date +%Y%m%d).sql
# Restore
psql -h localhost -U postgres fiscal_api < backup_20250809.sql# Rotação de logs
logrotate /etc/logrotate.d/fiscal-apiPreparado por: Manus AI
Data: 09 de Agosto de 2025
Versão: 1.0