Saltar a contenido

Instalar con docker run

Para operadores que ya tienen Postgres 16 y Redis 7 administrados (RDS, Cloud SQL, un Postgres propio…) y solo quieren ejecutar el contenedor de la aplicación.

Requisitos previos

  • Postgres 16 con la extensión pgvector instalada y un schema vacío. La aplicación aplica las migraciones Prisma al arrancar.
  • Redis 7 accesible desde el contenedor.
  • Las 3 variables obligatorias: ADMIN_DATABASE_URL, REDIS_URL, AUTH_SECRET (32+ caracteres).

Ejecución

docker pull didactaio/community:<versión>

# Volumen para uploads + clave de cifrado autogenerada + contraseña
# autogenerada del rol de runtime didacta_app.
docker volume create didacta_data

docker run -d \
  --name didacta-app \
  -p 3000:3000 \
  -p 4000:4000 \
  -v didacta_data:/app/data \
  -e ADMIN_DATABASE_URL='postgresql://USER:PASS@HOST:5432/didacta?schema=public' \
  -e REDIS_URL='redis://HOST:6379' \
  -e AUTH_SECRET='cualquier-cadena-aleatoria-de-32+-caracteres' \
  -e STORAGE_DRIVER=local \
  -e STORAGE_ROOT=/app/data/storage \
  -e NODE_ENV=production \
  --restart unless-stopped \
  didactaio/community:<versión>

ADMIN_DATABASE_URL es el usuario superuser/owner que ya tenías: el entrypoint lo usa solo para migraciones + RLS + grants. No definas DATABASE_URL — el entrypoint la deriva sola hacia el rol de runtime didacta_app (sin BYPASSRLS, aislamiento RLS real), con una contraseña autogenerada y persistida en didacta_data la primera vez. Detalle en Base de datos.

El volumen didacta_data no es opcional en la práctica

Guarda los archivos subidos — cursos, certificados, evidencias — y una clave de cifrado autogenerada en el primer arranque para los secretos at-rest. Sin ese volumen montado, todo se pierde al recrear el contenedor.

Si usas S3 en lugar de disco local (elimina STORAGE_DRIVER/STORAGE_ROOT y añade S3_ENDPOINT, S3_BUCKET, S3_ACCESS_KEY, S3_SECRET_KEY), mantén igualmente el volumen montado para la clave de cifrado.

Verificar

docker logs -f didacta-app                  # bootstrap + migraciones Prisma
curl -fsS http://localhost:4000/healthz     # debe responder 200

Después abre http://localhost:3000 y sigue el asistente de configuración.

Variables opcionales útiles

Variable Para qué
S3_ENDPOINT, S3_BUCKET, S3_ACCESS_KEY, S3_SECRET_KEY Storage S3-compatible (MinIO, AWS, Hetzner…).
SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS, SMTP_FROM Emails transaccionales. Sin esto, los emails se registran en logs pero no se envían.
DIDACTA_LICENSE_KEY JWT firmado para activar capabilities Enterprise. Sin él, modo Community puro.
METRICS_TOKEN Bearer token que protege /metrics (Prometheus). Vacío = endpoint público.

La referencia 1 a 1 de todas las variables está en Variables de entorno.