Ejecuta el restaurante 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 requisitosDescarga tu plantilla
Abre Mis plantillas y descarga el ZIP de tu paquete.
Resultado esperado: Tienes en tus descargas un archivo con un nombre como
food-studio-full-stack-main-….zip.Descomprime y abre la carpeta
Extrae el ZIP y abre una terminal en la carpeta
food-studio-full-stack. En Windows, extráelo en el Explorador de archivos y luego abre una terminal en la carpeta.Terminalunzip food-studio-full-stack-*.zip cd food-studio-full-stackResultado esperado: La carpeta contiene
¿Tienes problemas?admin-dashboard,back-end,storefrontydocker-compose.yml.Inicia las aplicaciones
Construye e inicia la API, el sitio web de pedidos y el panel del personal. No hay que configurar nada antes. El primer inicio construye tres imágenes y llena la base de datos con el restaurante de demostración, lo que tarda unos minutos; los siguientes inicios tardan segundos.
Terminalenfood-studio-full-stackdocker compose up --build¿Un puerto ya está en uso?
Si el inicio se detiene con
Un puerto ya está en usoaddress already in useoport is already allocated, otro programa usa el 3030, el 3031 o el 8000. Detenlo, o crea un archivo llamado.enven la carpetafood-studio-full-stack, junto adocker-compose.yml, con el puerto que necesites, por ejemploADMIN_PORT=3041(SITE_PORTpara el sitio web,API_PORTpara la API). Vuelve a ejecutardocker compose up --buildy abre la aplicación en su nuevo puerto.Resultado esperado: Los tres servicios siguen en ejecución y el registro deja de desplazarse. Deja esta terminal abierta.
¿Tienes problemas?Abre el sitio web de pedidos
Abre localhost:3030Local. Para iniciar sesión como el cliente de demostración, usa
sam@foodstudio.examplecon la contraseñaFoodDemo2026!. El árabe está en/ar.Resultado esperado: El sitio web se abre en su página de inicio con el menú de demostración y sus imágenes.
¿Tienes problemas?Inicia sesión en el panel del personal
Abre localhost:3031Local. Inicia sesión con
owner@foodstudio.exampley la contraseñaFoodDemo2026!. Para el gerente o la cocina, escribemanager@foodstudio.exampleokitchen@foodstudio.examplecon la misma contraseña. Cambia estas contraseñas antes de que el restaurante sea accesible desde internet.Resultado esperado: El panel se abre en su resumen, con los pedidos de hoy y la cola de la cocina.
¿Tienes problemas?
Haz un recorrido
Así se ve el restaurante de demostración cuando todo está en marcha.

| Cuenta | Inicia sesión en | Correo electrónico | Contraseña |
|---|---|---|---|
| Propietario: todo, incluidos el equipo y los roles | Panel del personal | owner@foodstudio.example | FoodDemo2026! |
| Gerente: todo excepto el equipo y los roles | Panel del personal | manager@foodstudio.example | FoodDemo2026! |
| Cocina: los pedidos de la cocina Central, sin precios | Panel del personal | kitchen@foodstudio.example | FoodDemo2026! |
| Cliente, con puntos de recompensa de pedidos anteriores | Sitio web de pedidos | sam@foodstudio.example | FoodDemo2026! |
La carga de datos también añade dos gerentes más (rami.manager@foodstudio.example y nina.manager@foodstudio.example) y una cuenta de cocina para cada una de las otras tres cocinas (riverside.kitchen@, uptown.kitchen@ y harbor.kitchen@, todas en foodstudio.example), con la misma contraseña. Son solo cuentas de demostración en local.
Detén e inicia de nuevo
Pulsa Ctrl+C en la terminal para detener las aplicaciones, o ejecuta esto desde la carpeta food-studio-full-stack. Tus datos, la base de datos y los archivos subidos, se conservan en el volumen food-studio-data.
food-studio-full-stackdocker compose downVuelve a iniciar con el mismo comando del paso 3. Sin --build, reutiliza las imágenes que ya construiste.
food-studio-full-stackdocker compose upConserva tus datos
docker compose down -v también elimina el volumen de datos. El siguiente inicio carga una copia nueva del restaurante de demostración, y todo lo que creaste desaparece.
Ejecuta el sitio web de pedidos
Este paquete es el sitio web de pedidos por sí solo. Lo lee todo de la API de la plantilla, así que inicia primero la API. Salvo que lo construyas 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.
Descomprime y abre la carpeta
Terminalunzip food-studio-website-*.zip cd food-studio-websiteResultado esperado: La carpeta tiene un
¿Tienes problemas?Dockerfiley unpackage.json.Construye la imagen
Los valores
NEXT_PUBLIC_*se compilan en el JavaScript que carga el navegador, así que son argumentos de construcción. Sin ninguno, el sitio web usa la API enhttp://localhost:8000/api. Para una API en otro lugar, pasa su dirección.Terminalenfood-studio-websitedocker build -t foodstudio-site .Con tu propia API:
¿Tienes problemas?Terminalenfood-studio-websitedocker build -t foodstudio-site --build-arg NEXT_PUBLIC_API_BASE_URL=https://api.your-domain.com/api --build-arg NEXT_PUBLIC_MEDIA_HOSTNAME=media.your-domain.com .Inícialo
Si el puerto
3030está ocupado, cambia el número a la izquierda de-p, por ejemplo-p 3041:3030, abre ese puerto en su lugar y añade la nueva dirección aCORS_ORIGINde la API.Terminalenfood-studio-websitedocker run -p 3030:3030 foodstudio-siteResultado esperado: localhost:3030Local abre el sitio web con el menú de tu API. El inglés está en
¿Tienes problemas?/eny el árabe en/ar.
Ejecuta el panel del personal
Este paquete es el panel del personal por sí solo. Cada pantalla lee la API de la plantilla, así que inicia primero la API. Salvo que lo construyas 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.
Descomprime y abre la carpeta
Terminalunzip food-studio-staff-dashboard-*.zip cd food-studio-staff-dashboardResultado esperado: La carpeta tiene un
¿Tienes problemas?Dockerfiley unpackage.json.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/apipara las notificaciones en directo, y la dirección del sitio web para el enlace "View storefront".Terminalenfood-studio-staff-dashboarddocker build -t foodstudio-admin .Con tu propia API:
¿Tienes problemas?Terminalenfood-studio-staff-dashboarddocker build -t foodstudio-admin --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_STOREFRONT_URL=https://your-domain.com .Inícialo e inicia sesión
Si el puerto
3031está ocupado, cambia el número a la izquierda de-p, por ejemplo-p 3041:3031, abre ese puerto en su lugar y añade la nueva dirección aCORS_ORIGINde la API.Terminalenfood-studio-staff-dashboarddocker run -p 3031:3031 foodstudio-adminResultado esperado: localhost:3031Local abre el formulario de inicio de sesión. Inicia sesión con la cuenta del propietario
¿Tienes problemas?owner@foodstudio.exampley la contraseñaFoodDemo2026!, que acepta una API con los datos de demostración cargados.
Ejecuta la API
Este paquete es la API de NestJS por sí sola, con un archivo SQLite guardado en un volumen de Docker junto con los archivos subidos. El sitio web de pedidos y el panel del personal son paquetes aparte y no están en esta descarga.
Descomprime y abre la carpeta
Terminalunzip food-studio-backend-*.zip cd food-studio-backendResultado esperado: La carpeta tiene un
¿Tienes problemas?Dockerfile, unpackage.jsony un.env.example.Inícialo con el restaurante de demostración
Un volumen nuevo recibe tablas vacías y ninguna cuenta salvo que pidas el restaurante de demostración, así que mantén
-e SEED_DEMO_DATA=trueen el primer inicio. El volumen conserva la base de datos y los archivos subidos entre ejecuciones. Si el puerto8000está ocupado, cambia el número a la izquierda de-p, por ejemplo-p 8010:8000, y añade-e PUBLIC_MEDIA_URL=http://localhost:8010/mediapara que las direcciones de las imágenes también lo usen. Tus frontends deben apuntar entonces ahttp://localhost:8010/api.Terminalenfood-studio-backenddocker run -p 8000:8000 -v foodstudio-data:/data -e SEED_DEMO_DATA=true foodstudio-apiResultado esperado: localhost:8000/api/healthLocal responde
¿Tienes problemas?{"success":true,"data":{"status":"ok","database":"up"},"message":""}.
El contenedor acepta el sitio web en http://localhost:3030 y el panel en http://localhost:3031. Para otras direcciones, configura CORS_ORIGIN, FRONTEND_URL y STOREFRONT_URL con -e.
Para darle al contenedor tus propias claves (pagos, correo, R2, IA), crea .env a partir de .env.example con cp .env.example .env, rellénalo y añade --env-file .env a docker run. Sin un JWT_SECRET propio, o con el del ejemplo, el contenedor genera un secreto y lo guarda en el volumen.
La imagen no incluye el modelo de eliminación de fondo salvo que lo pidas. Para incluirlo, construye con:
food-studio-backenddocker build --build-arg FETCH_BG_MODEL=true -t foodstudio-api .