Guía de despliegue
Requisitos previos
- Docker y Docker Compose instalados.
- PostgreSQL con la base de datos creada y los datos electorales cargados (schema en
db_schema.sql). - Archivo
.envconfigurado con las variables de entorno.
Variables de entorno
Copia .env.example a .env y ajusta los valores:
cp .env.example .env| Variable | Descripción | Ejemplo |
|---|---|---|
DB_HOST |
Host de PostgreSQL | localhost |
DB_PORT |
Puerto | 5432 |
DB_NAME |
Nombre de la base de datos | eleccionesdb |
DB_USER |
Usuario | eleccionesdb_api |
DB_PASSWORD |
Contraseña | changeme |
DB_SCHEMA |
Esquema (vacío = public) | |
APP_ENV |
Entorno | development / production |
ROOT_PATH |
Prefijo para reverse proxy | /api |
Configuración de DB_HOST según el escenario
| Escenario | Valor de DB_HOST |
|---|---|
| Local sin Docker | localhost |
| Docker en Windows/Mac (BD en el host) | host.docker.internal |
| Docker en Linux (BD en el host) | 172.17.0.1 |
| BD en otra máquina | IP o hostname del servidor |
Nota
host.docker.internal funciona de forma nativa en Docker Desktop (Windows/Mac). En Linux, funciona gracias a extra_hosts configurado en docker-compose.yml.
Desarrollo local sin Docker
# Crear entorno virtual
python -m venv venv
venv\Scripts\activate # Windows
# source venv/bin/activate # Linux/Mac
# Instalar dependencias
pip install -r requirements.txt
# Configurar .env (DB_HOST=localhost)
# Arrancar con recarga automática
uvicorn app.main:app --reloadLa documentación interactiva estará disponible en http://localhost:8000/docs.
Desarrollo local con Docker
# Ajustar DB_HOST en .env:
# Windows/Mac: host.docker.internal
# Linux: 172.17.0.1
docker compose up --buildAcceder a http://localhost:8000/docs.
Producción con Docker Compose
# Ajustar .env:
# DB_HOST=<ip-del-servidor-de-bd>
# APP_ENV=production
# ROOT_PATH=/api (si va detrás de Nginx en /api)
docker compose up -d --buildLa imagen Docker usa un multi-stage build que produce un contenedor optimizado (~150 MB) sin herramientas de compilación.
Nginx reverse proxy
Si la API se sirve en https://midominio.com/api:
location /api/ {
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;
}
En .env configurar ROOT_PATH=/api para que FastAPI genere correctamente las rutas de la documentación interactiva.
Verificar el despliegue
Una vez arrancada la API, comprobar que responde correctamente:
curl http://localhost:8000/healthRespuesta esperada:
{
"status": "ok",
"environment": "production",
"database": "ok"
}