Saltar al contenido principal

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:

ServicioQué es
postgresPostgreSQL con la extensión pgvector (obligatorio — contiene los datos de la app, la caché, los jobs, Action Cable y las incrustaciones vectoriales)
webLa aplicación Rails — Puma detrás de Thruster
workerTareas 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.

VariableObligatoriaPropósito
SECRET_KEY_BASEClave de sesión/firma de Rails
ACTIVE_RECORD_PRIMARY_KEYCifra tokens OAuth y claves de IA en reposo
ACTIVE_RECORD_DETERMINISTIC_KEYIgual que el anterior
ACTIVE_RECORD_KEY_DERIVATION_SALTIgual que el anterior
CAMPBOOKS_DATABASE_PASSWORDContraseña para el Postgres integrado
APP_HOSTEl nombre de host con el que accedes a la app (debe coincidir con la cabecera Host)
FORCE_SSLtrue detrás de un proxy TLS, false para uso local sin HTTPS
SELF_HOSTED1 — 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

  1. Apunta un dominio al servidor y define APP_HOST, FORCE_SSL=true y WEB_PORT en .env.
  2. Pon un proxy inverso con TLS delante (con Caddy son dos líneas de configuración — HTTPS automático).
  3. 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.