Ir al artículo
Aniq-UI

TicketoryEjecuta Ticketory en local

Ejecuta Ticketory en local

Pon en marcha tu paquete en tu equipo, con Docker.

Para el paquete Full Stack

Antes de empezar: instala y abre Docker Desktop, o Docker Engine con Compose.

Ver los requisitos
  1. Descarga tu plantilla

    Abre Mis plantillas y descarga el ZIP de tu paquete.

    Resultado esperado: En tus descargas hay un archivo con un nombre como ticketory-full-stack-….zip.

  2. Descomprime y abre la carpeta

    Abre una terminal donde esté el ZIP, extráelo y entra en la carpeta ticketory-full-stack. En Windows, puedes extraerlo en el Explorador de archivos y luego abrir una terminal en la carpeta.

    Terminal
    unzip -q ticketory-full-stack-*.zip
    cd ticketory-full-stack
    ls

    Resultado esperado: La carpeta contiene admin-dashboard, back-end, storefront y docker-compose.yml, junto a README.md, QUICKSTART.md y LICENSE.md.

    ¿Tienes problemas?
  3. Inicia las aplicaciones

    Construye e inicia la API, el sitio web público y el panel del organizador. No hace falta configurar nada antes. El primer inicio construye tres imágenes y llena la base de datos con los organizadores de ejemplo y sus eventos, lo que tarda unos minutos; los siguientes inicios tardan segundos.

    Terminalen ticketory-full-stack
    docker compose up --build

    ¿Un puerto ya está en uso?

    Si el inicio se detiene con ports are not available, address already in use o port is already allocated, otro programa usa 3030, 3031 o 8000. Detén ese programa, o crea un archivo llamado .env en la carpeta ticketory-full-stack, junto a docker-compose.yml, con el puerto que necesites, por ejemplo ADMIN_PORT=3041 (SITE_PORT para el sitio web, API_PORT para la API). Vuelve a ejecutar docker compose up --build y abre la aplicación en su nuevo puerto.

    Un puerto ya está en uso

    Resultado esperado: Los tres servicios siguen en ejecución y el registro deja de desplazarse. Deja esta terminal abierta.

    ¿Tienes problemas?
  4. Abre el sitio web público

    Abre localhost:3030Local. El inglés está en /en y el árabe en /ar. Cualquiera puede comprar sin cuenta; para ver las entradas, los pedidos y los eventos guardados de un asistente, inicia sesión con attendee@example.test y la contraseña DemoOnly!2026.

    Resultado esperado: El sitio web se abre en su página de inicio con los eventos de ejemplo y sus imágenes.

    ¿Tienes problemas?
  5. Inicia sesión en el panel del organizador

    Abre localhost:3031Local. Inicia sesión con owner@example.test y la contraseña DemoOnly!2026. Todas las cuentas de ejemplo usan esa contraseña; cámbialas antes de que la pila sea accesible desde internet.

    Resultado esperado: El panel se abre en su resumen, con las ventas de entradas, la puerta en vivo y los próximos eventos.

    ¿Tienes problemas?

Haz un recorrido

Cómo se ven los organizadores de ejemplo cuando todo está en marcha.

CuentaCorreo electrónicoDónde
Propietario: todo, incluidos los reembolsos, el equipo, los roles y los ajustesowner@example.testPanel
Gerente: eventos, recintos, control de acceso, informes, consultas, el estudio y el asistente; pedidos solo de lecturamanager@example.testPanel
Finanzas: el resumen, los pedidos, los reembolsos, la reemisión y la anulación de entradas, y los informesfinance@example.testPanel
Control de acceso: solo la puerta, para las sesiones que tenga asignadascheckin@example.testPanel
Asistente Taylor Morgan: ocho pedidos y cuatro eventos guardadosattendee@example.testSitio web

Todas las cuentas inician sesión con la contraseña DemoOnly!2026. Son solo cuentas de demostración locales.

Los datos de ejemplo añaden cuatro organizadores, cada uno con su propio espacio de trabajo, entre los que el propietario cambia desde la barra superior del panel: Northline Events, Kiln & Co., Mill Street Talks y Meadow Days. Entre todos tienen 9 recintos, 36 eventos (22 en el sitio web, 3 de ellos en curso, 9 ya terminados, 1 cancelado y 4 borradores), 1.145 pedidos y 14 cuentas de personal, así que cada pantalla se abre llena.

Detén e inicia de nuevo

Pulsa Ctrl+C en la terminal para detener las aplicaciones, o ejecuta esto desde la carpeta ticketory-full-stack. Tus datos, la base de datos, las subidas y las exportaciones CSV, se conservan en el volumen ticketory-data.

Terminalen ticketory-full-stack
docker compose down

Vuelve a iniciar con el mismo comando del paso 3. Sin --build, reutiliza las imágenes que ya construiste.

Terminalen ticketory-full-stack
docker compose up

Conserva tus datos

docker compose down -v también borra el volumen de datos. El siguiente inicio crea una copia nueva de los organizadores de ejemplo, y todo lo que hayas creado desaparece.

Ejecuta el sitio web público

Este paquete es el sitio web público por sí solo. Lee todo de la API de Ticketory, así que inicia primero la API. Si no lo construyes con otra dirección, el sitio web espera la API en http://localhost:8000. La API es un paquete aparte y no está en esta descarga.

  1. Descarga tu plantilla

    Abre Mis plantillas y descarga el ZIP de Ticketing Website.

  2. Descomprime y abre la carpeta

    Terminal
    unzip -q ticketory-website-*.zip
    cd ticketory-website
    ls

    Resultado esperado: La carpeta tiene un Dockerfile y un package.json.

    ¿Tienes problemas?
  3. Construye la imagen

    Los valores NEXT_PUBLIC_* se compilan en el JavaScript que carga el navegador, por eso son argumentos de construcción. Sin ninguno, el sitio web usa la API en http://localhost:8000/api, se llama a sí mismo http://localhost:3030 y envía a los organizadores al panel en http://localhost:3031. Para una API en otro lugar, pasa su dirección.

    Terminalen ticketory-website
    docker build -t ticketory-website .

    Con tu propia API y tus dominios:

    Terminalen ticketory-website
    docker build -t ticketory-website --build-arg NEXT_PUBLIC_API_BASE_URL=https://api.your-domain.com/api --build-arg NEXT_PUBLIC_SITE_URL=https://www.your-domain.com --build-arg NEXT_PUBLIC_DASHBOARD_URL=https://dashboard.your-domain.com .
    ¿Tienes problemas?
  4. Inícialo

    Dentro del contenedor, localhost es el propio contenedor, así que API_INTERNAL_URL le indica al servidor del sitio web dónde encontrar la API en tu equipo, para los títulos de las páginas de evento, el primer renderizado de las páginas de inicio, evento, recinto y organizador, y el mapa del sitio. --add-host hace que host.docker.internal funcione en Linux; Docker Desktop ya lo tiene. Si el puerto 3030 está ocupado, cambia el número de la izquierda de -p, por ejemplo -p 3040:3030, abre ese puerto en su lugar, añade http://localhost:3040 al CORS_ORIGIN de la API y defínelo como STOREFRONT_URL de la API.

    Terminalen ticketory-website
    docker run -p 3030:3030 -e API_INTERNAL_URL=http://host.docker.internal:8000/api --add-host=host.docker.internal:host-gateway ticketory-website

    Resultado esperado: localhost:3030Local abre el sitio web con los eventos de tu API. El inglés está en /en, el árabe en /ar.

    ¿Tienes problemas?

Para que la API actualice las páginas de evento, recinto y organizador en cuanto cambien, añade -e REVALIDATE_SECRET= seguido del mismo valor que REVALIDATE_SECRET en el .env de la API. Sin esto, esas páginas se actualizan solas en el plazo de una hora.

Ejecuta el panel del organizador

Este paquete es el panel del organizador por sí solo. Cada pantalla lee la API de Ticketory, así que inicia primero la API. Si no lo construyes con otra dirección, el panel espera la API en http://localhost:8000. La API es un paquete aparte y no está en esta descarga.

  1. Descarga tu plantilla

    Abre Mis plantillas y descarga el ZIP de Organiser Dashboard.

  2. Descomprime y abre la carpeta

    Terminal
    unzip -q ticketory-dashboard-*.zip
    cd ticketory-dashboard
    ls

    Resultado esperado: La carpeta tiene un Dockerfile y un package.json.

    ¿Tienes problemas?
  3. Construye la imagen

    Sin argumentos de construcción, el panel usa la API en http://localhost:8000/api. Para una API en otro lugar, pasa su dirección, su dirección sin /api para las notificaciones en vivo, el host que sirve sus imágenes y la dirección del sitio web para el enlace "Ver sitio web".

    Terminalen ticketory-dashboard
    docker build -t ticketory-dashboard .

    Con tu propia API:

    Terminalen ticketory-dashboard
    docker build -t ticketory-dashboard --build-arg NEXT_PUBLIC_API_BASE_URL=https://api.your-domain.com/api --build-arg NEXT_PUBLIC_WEBSOCKET_BASE_URL=https://api.your-domain.com --build-arg NEXT_PUBLIC_MEDIA_HOSTNAME=api.your-domain.com --build-arg NEXT_PUBLIC_SITE_URL=https://your-domain.com .
    ¿Tienes problemas?
  4. Inícialo e inicia sesión

    Si el puerto 3031 está ocupado, cambia el número de la izquierda de -p, por ejemplo -p 3041:3031, abre ese puerto en su lugar, añade http://localhost:3041 al CORS_ORIGIN de la API y define su FRONTEND_URL con él (la dirección desde la que se conectan las notificaciones en vivo), y luego reinicia la API.

    Terminalen ticketory-dashboard
    docker run -p 3031:3031 ticketory-dashboard

    Resultado esperado: localhost:3031Local abre el formulario de inicio de sesión. Inicia sesión con owner@example.test y la contraseña DemoOnly!2026, que acepta una API con datos de ejemplo.

    ¿Tienes problemas?

Ejecuta la API

Este paquete es la API NestJS por sí sola, sobre un archivo SQLite guardado en un volumen de Docker con las subidas y las exportaciones CSV. El sitio web público y el panel del organizador son paquetes aparte y no están en esta descarga.

  1. Descarga tu plantilla

    Abre Mis plantillas y descarga el ZIP de API Backend.

  2. Descomprime y abre la carpeta

    Terminal
    unzip -q ticketory-backend-*.zip
    cd ticketory-backend
    ls

    Resultado esperado: La carpeta tiene un Dockerfile, un docker-entrypoint.sh y un package.json.

    ¿Tienes problemas?
  3. Construye la imagen

    Terminalen ticketory-backend
    docker build -t ticketory-api .
    ¿Tienes problemas?
  4. Inícialo con los datos de ejemplo

    Un volumen nuevo tiene tablas vacías y ninguna cuenta, salvo que pidas los organizadores de ejemplo, así que conserva -e SEED_DEMO_DATA=true en el primer inicio. El volumen ticketory-api-data conserva la base de datos, las subidas y las exportaciones CSV entre ejecuciones. Si el puerto 8000 está ocupado, cambia el número de la izquierda de -p, por ejemplo -p 8010:8000, y añade -e PUBLIC_MEDIA_URL=http://localhost:8010/media y -e PUBLIC_API_URL=http://localhost:8010 para que las direcciones de las imágenes y los enlaces de descarga de las entradas también lo usen. Tus frontends deberán apuntar entonces a http://localhost:8010/api.

    Terminalen ticketory-backend
    docker run -p 8000:8000 -v ticketory-api-data:/data -e SEED_DEMO_DATA=true ticketory-api

    Resultado esperado: localhost:8000/api/healthLocal responde con "status":"ok" y "database":"up".

    ¿Tienes problemas?

El contenedor acepta el sitio web en http://localhost:3030 y el panel en http://localhost:3031. En otras direcciones, define con -e CORS_ORIGIN (ambas, separadas por comas), FRONTEND_URL (el panel) y STOREFRONT_URL (el sitio web).

Para darle al contenedor tus propias claves (pagos, correo, IA, R2, MCP), crea .env a partir de .env.example con cp .env.example .env, rellénalo y añade --env-file .env -e NODE_ENV=production a docker run:

Terminalen ticketory-backend
docker run -p 8000:8000 -v ticketory-api-data:/data -e SEED_DEMO_DATA=true --env-file .env -e NODE_ENV=production ticketory-api

Un valor dado con -e gana al mismo nombre del archivo, así que el contenedor se ejecuta en producción diga lo que diga .env, y mueve las rutas relativas del archivo (SQLITE_DATABASE, MEDIA_UPLOAD_DIR, EXPORT_DIR) al volumen. Sin un JWT_SECRET propio, o con el del ejemplo, el contenedor genera un secreto y lo guarda en el volumen, de modo que los inicios de sesión sobreviven a un reinicio.

Siguiente

¿Te atascaste en un paso?

Busca una solución antes de empezar de nuevo.

Solución de problemas

Preferencias de Cookies

Utilizamos cookies para mejorar tu experiencia de navegación, analizar el tráfico del sitio y personalizar el contenido. Al hacer clic en "Aceptar Todo", consientes nuestro uso de cookies para análisis y publicidad personalizada.