Pon Ottoch en marcha en minutos

Docker Compose para ambas ediciones — Redis está incluido en el stack. La edición community es gratuita, no requiere licencia.

Docker Compose — nivel gratuito

Dos servicios: la app y Redis para limitar la tasa de peticiones. SQLite está integrado — no necesitas una base de datos externa.

Want to try it with sample data first?

Skip writing your own compose file — ottoch-demo bundles the app, Redis, and one of every supported database (PostgreSQL, MySQL, MariaDB, SQL Server, ClickHouse, SQLite), pre-seeded with a shared sample dataset so you can try real queries across engines before connecting anything of your own.

git clone https://github.com/ottochapp/ottoch-demo
cd ottoch-demo
cp .env.example .env
docker compose up -d

1. Crea tu archivo compose

services:
  redis:
    image: redis:7-alpine
    restart: unless-stopped
    command: redis-server --save "" --appendonly no --maxmemory 128mb --maxmemory-policy allkeys-lru

  app:
    image: registry.ottoch.com/ottoch:latest-ce
    restart: unless-stopped
    depends_on:
      - redis
    ports:
      - "80:80"
      - "443:443"
    env_file: .env
    volumes:
      - ottoch_data:/data

volumes:
  ottoch_data:

2. Crea tu archivo .env

DJANGO_SECRET_KEY=replace-with-a-long-random-string
ENCRYPTION_KEY=replace-with-a-fernet-key
REDIS_URL=redis://redis:6379/0
DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1
ADMIN_URL=admin/

Genera DJANGO_SECRET_KEY:

python -c "import secrets; print(secrets.token_urlsafe(50))"

Genera ENCRYPTION_KEY:

python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"

3. Inicia el stack

docker compose up -d
docker compose logs app

Consulta los logs para ver tus credenciales de administrador generadas automáticamente en el primer arranque.

4
Abre http://localhost e inicia sesión

Usa las credenciales de los logs. Se te pedirá que cambies tu contraseña en el primer inicio de sesión.

5
Añade tu clave de IA

Configuración → Configuración LLM. Compatible con OpenAI, Anthropic, Gemini y cualquier endpoint compatible con OpenAI.

6
Conecta tu base de datos y empieza a preguntar

Añade una conexión, activa las tablas que quieres exponer, luego abre el panel y empieza a chatear.

Variables de entorno

Configura estas variables en tu archivo .env, junto al archivo Compose.

VariableDescripciónPor defecto
DJANGO_SECRET_KEY Django secret key — long random string, never reuse across instances Obligatorio
ENCRYPTION_KEY Fernet key — encrypts stored credentials and AI keys at rest Obligatorio
REDIS_URL Redis connection URL for query rate limiting redis://redis:6379/0
DATABASE_URL Database URL — CE uses SQLite by default, EE typically uses PostgreSQL SQLite
DJANGO_ALLOWED_HOSTS Comma-separated list of allowed host headers — add your domain in production localhost,127.0.0.1
ADMIN_URL Path to the Django admin — change to something non-obvious (must end with /) admin/
OTTOCH_SITE_URL Public URL of your instance https://ottoch.com
OTTOCH_OUTBOUND_IPS Comma-separated server outbound IPs, shown to users for firewall setup vacío
LICENSE_KEY_SALT License validation salt — Enterprise Edition only Solo EE
SENTRY_DSN Sentry DSN for error tracking opcional
EMAIL_HOST / EMAIL_HOST_USER / EMAIL_HOST_PASSWORD SMTP settings for system emails opcional

Docker Compose con PostgreSQL

Tres servicios: Redis, PostgreSQL y la app. Incluye LDAP/Active Directory, RBAC multiusuario, detección de preguntas de seguimiento y activación basada en licencia.

1. Inicia sesión en el registro Enterprise

La imagen EE no es pública — necesitas el usuario y la contraseña del registro que te enviamos al comprar tu licencia.

docker login ee-registry.ottoch.com

2. docker-compose.yml

services:
  redis:
    image: redis:7-alpine
    restart: unless-stopped
    command: redis-server --save "" --appendonly no --maxmemory 128mb --maxmemory-policy allkeys-lru

  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: ottoch
      POSTGRES_USER: ottoch
      POSTGRES_PASSWORD: changeme
    volumes:
      - pgdata:/var/lib/postgresql/data

  app:
    image: ee-registry.ottoch.com/ottoch:latest-ee
    restart: unless-stopped
    depends_on:
      - redis
      - db
    ports:
      - "80:80"
      - "443:443"
    env_file: .env
    volumes:
      - ottoch_data:/data

volumes:
  pgdata:
  ottoch_data:

3. .env

DJANGO_SECRET_KEY=replace-with-a-long-random-string
ENCRYPTION_KEY=replace-with-a-fernet-key
LICENSE_KEY_SALT=replace-with-your-license-salt
DATABASE_URL=postgres://ottoch:changeme@db:5432/ottoch
REDIS_URL=redis://redis:6379/0
DJANGO_ALLOWED_HOSTS=yourdomain.com
ADMIN_URL=your-secret-admin-path/

4. Inicia el stack

docker compose up -d

docker compose pull necesitará de nuevo el inicio de sesión del paso 1 en cualquier máquina donde no se haya ejecutado antes.

✓ Sustituye changeme por una contraseña real de Postgres tanto en el servicio db como en DATABASE_URL.
✓ LICENSE_KEY_SALT debe coincidir con el salt configurado en tu portal de Ottoch. Cada cliente activa su propia clave de licencia.
✓ Se requiere una clave de licencia enterprise para desbloquear el acceso multiusuario. Solicítala aquí.

HTTPS con tu propio dominio

Ottoch incluye Caddy, que gestiona HTTPS automáticamente a través de Let's Encrypt.

1
Apunta tu dominio al servidor

Crea un registro A que apunte tudominio.com a la IP de tu servidor. Un TTL de 300s está bien para la configuración inicial.

2
Actualiza tu .env y reinicia

Configura DJANGO_ALLOWED_HOSTS=tudominio.com y OTTOCH_SITE_URL=https://tudominio.com, luego ejecuta docker compose up -d. Caddy obtiene un certificado HTTPS automáticamente en la primera solicitud.

✓ Los puertos 80 y 443 deben estar abiertos en tu firewall para la emisión de certificados de Let's Encrypt.
✓ Caddy renueva los certificados automáticamente antes de que caduquen — sin gestión manual de certificados.

Mantener tus datos seguros

Edición Community (volumen SQLite)

docker run --rm \
  -v ottoch_data:/data \
  -v $(pwd):/backup \
  alpine \
  tar czf /backup/ottoch-backup.tar.gz /data

Crea ottoch-backup.tar.gz en el directorio actual. Prográmalo con cron o cualquier herramienta de copia de seguridad.

Edición Enterprise (PostgreSQL)

docker compose exec db \
  pg_dump -U ottoch ottoch \
  | gzip > ottoch-$(date +%Y%m%d).sql.gz

pg_dump estándar. Restaura con gunzip | psql.

Mantenerse actualizado

Los datos persisten en volúmenes con nombre. Descarga la nueva imagen y recrea el contenedor — el volumen se conserva.

Edición Community

docker compose pull
docker compose up -d

Edición Enterprise

docker compose pull
docker compose up -d
✓ Todas las conexiones, sesiones, configuración LLM y ajustes de usuario se guardan en el volumen y sobreviven a la actualización.
✓ Las migraciones de base de datos se ejecutan automáticamente al iniciar el contenedor. No se requieren pasos manuales.

¿Preguntas? ¿Necesitas una licencia enterprise?

Estaremos encantados de ayudarte a configurarlo.

Solicitar una licencia → Contáctanos