Run it on your servers. Corré todo en tus servidores.

Quelora ships as a Docker Compose stack. You own the data, you control the rollout, and you can scale individual services horizontally when traffic asks for it. Quelora se distribuye como stack Docker Compose. Vos sos dueño de los datos, controlás el rollout y podés escalar servicios individualmente cuando el tráfico lo pide.

1 · PrerequisitesRequisitos

What you need on the host.Qué necesitás en el host.

Docker≥ 24.x
Docker Composev2 plugin
RAM2 GB minimum, 4 GB comfortable2 GB mínimo, 4 GB cómodo
Storage10 GB starter (logs + DB)10 GB para empezar (logs + DB)
OSLinux (any modern distro)
Ports80 · 443 · 25 · 587
DomainA subdomain you can DNSUn subdominio que puedas DNS-ear
Suggested DNSDNS sugerido
api.your.tldpublic-api
api-dashboard.your.tlddashboard-api
dashboard.your.tlddashboard SPA
cdn.your.tldwidget bundlebundle del widget

2 · Quick startInicio rápido

One repo, one make command, full stack.Un repo, un make, stack completo.

For evaluation, demos and local development. The quelora-dx-env repo bundles every component plus an installer that handles local SSL (via mkcert), DNS mapping, dependencies and a fully-seeded MongoDB. Expect a working stack in ~5 minutes. Para evaluar, demos y desarrollo local. El repo quelora-dx-env agrupa todos los componentes y un instalador que se encarga del SSL local (mkcert), del DNS, de las dependencias y de un MongoDB con seed. Stack funcionando en ~5 minutos.

terminal
# Clone the orchestration repo
git clone https://github.com/Quelora/quelora-dx-env
cd quelora-dx-env

# Full setup — clones components, configures SSL+DNS, installs deps, seeds DB
make setup

# Bring up the stack
make up

# Then open in your browser:
#   https://demo.quelora.dev       — embeddable widget in action
#   https://dashboard.quelora.dev  — admin SPA
#
# Default dashboard credentials (change them on first login):
#   admin demo:  demo / Quelora26*/
#   god mode:    quelora / Quelora26*/
Common make targetsTargets más usados del make
make setupFirst-time install (clone + SSL + DNS + deps + DB seed).Instalación inicial (clone + SSL + DNS + deps + seed).
make up / downStart / stop the core stack.Arrancar / parar el stack core.
make start / stopCascading start / stop of Core + WordPress + ML environments.Arrancar / parar en cascada Core + WordPress + ML.
make wp-setupSpin up the bundled WordPress demo with the plugin pre-installed.Levantar el demo de WordPress con el plugin pre-instalado.
make ml-upStart the optional Detoxify ML moderation API.Arrancar la API ML de moderación (Detoxify).
make logsTail logs in real time.Logs en vivo.
make rebuild-apiRebuild backend services only.Rebuild solo de los servicios backend.
make helpFull list of targets with descriptions.Lista completa de targets con descripciones.
make nukeFull cleanup — irreversible. Wipes DBs, repos, certs. Asks for typed confirmation.Limpieza total — irreversible. Borra DBs, repos, certs. Pide confirmación tipeada.

For production deployments where you want fine control over images, secrets, and your own SSL/DNS — the manual path below is the right starting point. Para producción, donde querés control fino sobre imágenes, secretos y tu propio SSL/DNS — la ruta manual de abajo es el punto de partida.

3 · Clone & configureClonar y configurar

Pull each component you'll run.Traé cada componente que vayas a correr.

terminal
# Pick the components you need from github.com/Quelora
git clone https://github.com/Quelora/quelora-public-api      # required
git clone https://github.com/Quelora/quelora-dashboard-api   # required
git clone https://github.com/Quelora/quelora-dashboard       # required
git clone https://github.com/Quelora/quelora-worker          # required
git clone https://github.com/Quelora/quelora-jobs            # required
git clone https://github.com/Quelora/quelora-widget-community# required (built & served)
git clone https://github.com/Quelora/quelora-wp-plugin       # optional (WordPress)

# Copy .env templates and fill in secrets
cp quelora-public-api/.env.example      quelora-public-api/.env
cp quelora-dashboard-api/.env.example   quelora-dashboard-api/.env

# Generate strong secrets
openssl rand -hex 32  # JWT_SECRET
openssl rand -hex 32  # JWT_ADMIN_SECRET
openssl rand -hex 32  # ENCRYPTION_KEY

4 · Bring up the stackLevantar el stack

Docker Compose handles the rest.Docker Compose se ocupa del resto.

docker-compose.yml
services:
  mongo:    { image: mongo:4.4, volumes: [ mongo:/data/db ] }
  redis:    { image: redis:alpine }
  public-api:
    build: ./quelora-public-api
    env_file: ./quelora-public-api/.env
    depends_on: [ mongo, redis ]
  dashboard-api:
    build: ./quelora-dashboard-api
    env_file: ./quelora-dashboard-api/.env
    depends_on: [ mongo, redis ]
  dashboard:
    build: ./quelora-dashboard
  worker:
    build: ./quelora-worker
    env_file: ./quelora-public-api/.env
  jobs:
    build: ./quelora-jobs
    env_file: ./quelora-public-api/.env
  nginx:
    image: nginx:mainline-alpine
    ports: [ "80:80", "443:443" ]
    volumes: [ ./nginx.conf:/etc/nginx/nginx.conf:ro ]

volumes:
  mongo: {}
terminal
docker compose up -d
docker compose ps
docker compose logs -f public-api dashboard-api worker jobs

5 · Environment variablesVariables de entorno

The essentials, copy-pasteable.Lo esencial, listo para copiar.

Both APIs share a common variable layout. Below is the minimum to get the public API alive.Ambas APIs comparten un layout común. Lo de abajo es el mínimo para que la API pública arranque.

.env
# Server
PORT=3000
BASE_URL=https://api.your.tld
DASHBOARD_URL=https://dashboard.your.tld

# Data
MONGO_URI=mongodb://mongo:27017/quelora
CACHE_REDIS_URL=redis://redis:6379

# Secrets (rotate these)
JWT_SECRET=...64-hex...
JWT_ADMIN_SECRET=...64-hex...
ENCRYPTION_KEY=...64-hex...

# Moderation (optional)
PERSPECTIVE_API_KEY=
TOXICITY_THRESHOLD=0.7

# VAPID push (optional)
VAPID_PUBLIC_KEY=
VAPID_PRIVATE_KEY=
VAPID_EMAIL=admin@your.tld

# Tenant identity
CID=QU-XXXXXXXX-XXXXX

6 · Scaling notesNotas de escala

Where to grow when traffic grows.Dónde crecer cuando crece el tráfico.

HorizontalHorizontal

The public API and dashboard API are stateless. Run multiple replicas behind nginx and they share Redis + Mongo. quelora-worker and quelora-jobs also scale by replica count.

La API pública y la de dashboard son stateless. Corré múltiples réplicas detrás de nginx y comparten Redis + Mongo. quelora-worker y quelora-jobs también escalan por réplicas.

VerticalVertical

Mongo and Redis are usually the first to feel the pressure. Move them to managed instances (Atlas, Elasticache) before you scale anything else.

Mongo y Redis suelen ser los primeros en sentir presión. Pasalos a instancias gestionadas (Atlas, Elasticache) antes que cualquier otra cosa.

7 · HardeningEndurecimiento

Sensible defaults are not enough.Los defaults sensatos no alcanzan.

  • Terminate TLS at nginx with Let's Encrypt; redirect HTTP to HTTPS.
  • Terminá TLS en nginx con Let's Encrypt; redirigí HTTP a HTTPS.
  • Set MONGO_SYNC_INDEXES=true on the first boot only — disable in production after.
  • Activá MONGO_SYNC_INDEXES=true solo en el primer arranque — desactivá en producción después.
  • Put Redis behind the internal Docker network — it has no auth by default.
  • Mantené Redis en la red interna de Docker — no tiene auth por default.
  • Rotate JWT_SECRET, JWT_ADMIN_SECRET and ENCRYPTION_KEY on a schedule that matches your threat model.
  • Rotá JWT_SECRET, JWT_ADMIN_SECRET y ENCRYPTION_KEY según tu modelo de amenazas.
  • Back up the Mongo volume — every relation lives there.
  • Hacé backups del volumen de Mongo — toda relación vive ahí.