# Despliegue Docker

Este paquete queda listo para:

1. subir el `.zip` al servidor,
2. descomprimirlo,
3. configurar `.env`,
4. ejecutar `install.sh`.

## Requisitos del servidor

- Docker Engine
- Docker Compose Plugin (`docker compose`)
- Al menos 8 GB de RAM recomendados
- Espacio suficiente para:
  - imagen Docker,
  - volumen persistente `/data`,
  - indices FAISS,
  - logs y documentos cargados

## Estructura

- `Dockerfile`
- `docker-compose.yml`
- `.env.example`
- `.python-version`
- `install.sh`
- `up.sh`
- `down.sh`
- codigo de aplicación y archivos de datos

MongoDB y Redis se ejecutan dentro del contenedor de la aplicación usando `supervisord`.

## Instalación rápida

```bash
chmod +x install.sh up.sh down.sh
cp .env.example .env
nano .env
./install.sh
```

Luego abre:

```text
http://IP_DEL_SERVIDOR:7000
```

Si subes el proyecto completo en vez del paquete `dist`, no copies `.venv`, `dist`, `logs`, caches ni cargas temporales al servidor.

## Variables mínimas a cambiar

- `SECRET_KEY`
- `ADMIN_PASSWORD`
- `MONGO_APP_PASSWORD`
- `GROQ_API_KEY` o `GEMINI_API_KEY`

## Operación

Levantar:

```bash
./up.sh
```

Detener:

```bash
./down.sh
```

Ver logs:

```bash
docker compose logs -f
```

Estado:

```bash
docker compose ps
curl http://127.0.0.1:7000/health
```

## Persistencia

Los datos persisten en el volumen Docker:

- `epicrisis-data`

Incluye:

- MongoDB
- Redis appendonly
- logs
- uploads batch e individuales
- indices FAISS persistidos dentro de `/data/runtime`

## Actualizacion

Para actualizar el sistema:

1. sube una nueva version del paquete,
2. reemplaza los archivos del directorio,
3. conserva `.env`,
4. ejecuta:

```bash
docker compose down
docker compose build --no-cache
docker compose up -d
```

## Observaciones

- El worker Celery ya queda levantado dentro del contenedor.
- En Linux el pool de Celery usa `prefork`, que es adecuado para servidor.
- El contenedor arranca MongoDB temporalmente para bootstrap, migraciones y usuario de aplicación; luego levanta el stack estable con `supervisord`.
- El paquete limpio de despliegue se genera con `python scripts/build_docker_bundle.py`.
