Descripción general del despliegue
Campbooks se despliega como una pila Docker Compose autocontenida. docker compose up ejecuta toda la aplicación en un único servidor — sin compilación de Node, sin Redis y sin servicios externos que configurar más allá de un proxy inverso que gestione el TLS.
¿Quieres el proceso paso a paso? Esta página es una panorámica general. La guía de autoalojamiento recorre un servidor real de producción de principio a fin.
La pila
docker compose up inicia tres contenedores:
| Servicio | Qué es |
|---|---|
postgres | PostgreSQL con la extensión pgvector (obligatorio — contiene los datos de la app, la caché, los jobs, Action Cable y las incrustaciones vectoriales) |
web | La aplicación Rails — Puma detrás de Thruster |
worker | Tareas en segundo plano — análisis de correo, IA, indexación, sincronización de calendario (Solid Queue) |
Un cuarto servicio, opensearch, es opcional (se activa con el perfil search) y solo alimenta el autocompletado de texto completo de contactos. Todo lo demás — búsqueda de correo, búsqueda de documentos, la paleta Cmd+K — usa Postgres + pgvector.
Los archivos subidos (adjuntos de correo guardados como Documentos) viven en un volumen Docker local por defecto, o en almacenamiento de objetos compatible con S3 si lo configuras.
Lo que necesitas
- Un servidor con Docker y el plugin Docker Compose (Docker Engine ≥ 24)
- Unos 2 GB de RAM para la pila predeterminada (añade ~1 GB si activas OpenSearch)
- Un nombre de dominio y un proxy inverso que gestione el TLS (Caddy, Traefik o nginx)
Configuración
Todo se configura mediante variables de entorno en .env. bin/generate-secrets rellena los secretos obligatorios; el resto son opcionales y cada uno activa una integración. La lista anotada está en .env.example.
| Variable | Obligatoria | Propósito |
|---|---|---|
SECRET_KEY_BASE | Sí | Clave de sesión/firma de Rails |
ACTIVE_RECORD_PRIMARY_KEY | Sí | Cifra tokens OAuth y claves de IA en reposo |
ACTIVE_RECORD_DETERMINISTIC_KEY | Sí | Igual que el anterior |
ACTIVE_RECORD_KEY_DERIVATION_SALT | Sí | Igual que el anterior |
CAMPBOOKS_DATABASE_PASSWORD | Sí | Contraseña para el Postgres integrado |
APP_HOST | Sí | El nombre de host con el que accedes a la app (debe coincidir con la cabecera Host) |
FORCE_SSL | Sí | true detrás de un proxy TLS, false para uso local sin HTTPS |
SELF_HOSTED | Sí | 1 — registro abierto + lee claves de IA desde el entorno |
No necesitas config/master.key. El autoalojamiento lee SECRET_KEY_BASE del entorno. Genera los secretos necesarios con bin/generate-secrets.
Puesta en producción
- Apunta un dominio al servidor y define
APP_HOST,FORCE_SSL=trueyWEB_PORTen.env. - Pon un proxy inverso con TLS delante (con Caddy son dos líneas de configuración — HTTPS automático).
docker compose up -d --build. El entrypoint ejecuta las migraciones de base de datos al arrancar.
Nunca expongas la aplicación en internet sin HTTPS. Con FORCE_SSL=false las sesiones y las cookies viajan sin cifrar. Usa siempre un proxy TLS en producción.
Actualizaciones
git pull
docker compose up -d --build # el entrypoint ejecuta las migraciones al arrancar
Haz una copia de seguridad de la base de datos primero.
Verificación de salud
Campbooks expone un endpoint de salud en /up (devuelve 200 cuando está sano). Úsalo para las comprobaciones de balanceadores de carga y monitorización — sigue siendo accesible por HTTP plano aunque FORCE_SSL=true esté activo.
Consulta la guía de autoalojamiento para el recorrido completo, incluyendo copias de seguridad y todas las integraciones.