Ejecuta el negocio de reservas 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: Un archivo con un nombre como
hollina-vacation-rental-full-stack-….zipestá en tus descargas.Descomprime y abre la carpeta
Abre una terminal donde esté el ZIP, extráelo y entra en la carpeta
hollina-vacation-rental-full-stack. En Windows, puedes extraerlo en el Explorador de archivos y abrir después una terminal en la carpeta.Terminalunzip -q hollina-vacation-rental-full-stack-*.zip cd hollina-vacation-rental-full-stackResultado esperado: La carpeta contiene
¿Tienes problemas?admin-dashboard,back-end,storefrontydocker-compose.yml, junto aREADME.md,QUICKSTART.mdyLICENSE.md.Inicia las aplicaciones
Construye e inicia la API, el sitio web de alojamientos y el panel de reservas. No hace falta configurar nada antes. El primer inicio construye tres imágenes y llena la base de datos con la empresa de demostración, lo que tarda unos minutos; los inicios siguientes tardan segundos.
Terminalenhollina-vacation-rental-full-stackdocker compose up --build¿Un puerto ya está en uso?
Si el inicio se detiene con
Un puerto ya está en usoports are not available,address already in useoport is already allocated, otro programa usa 3030, 3031 u 8000. Detén ese programa, o crea un archivo llamado.enven la carpetahollina-vacation-rental-full-stack, junto adocker-compose.yml, con el puerto que necesites, comoADMIN_PORT=3041(SITE_PORTpara el sitio web,API_PORTpara la API). Ejecutadocker compose up --buildde nuevo y 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 alojamientos
Abre localhost:3030Local. El inglés está en
/eny el árabe en/ar. El sitio web no tiene cuentas: los alojamientos guardados se conservan en el navegador del visitante, y un huésped vuelve a encontrar una reserva con su referencia y el correo electrónico con el que se hizo. Sin claves de pago, el simulador incluido acepta todas las reservas con tarjeta y PayPal, así que todo el proceso de pago funciona; un número de tarjeta que termina en0es rechazado, para mostrar el camino del fallo.Resultado esperado: El sitio web se abre en su página de inicio con los alojamientos de demostración, sus fotografías y los destinos.
¿Tienes problemas?Inicia sesión en el panel de reservas
Abre localhost:3031Local. Inicia sesión con
admin@hollina.exampley la contraseñaAdmin@123. Para el manager, escribemanager@hollina.exampleconManager@123. Cambia ambas contraseñas antes de que la instalación sea accesible desde internet.Resultado esperado: El panel se abre en su resumen, con la ocupación y los ingresos de este mes, las llegadas y salidas de hoy y las últimas reservas.
¿Tienes problemas?
Haz un recorrido
Cómo se ve la empresa de demostración cuando todo está en marcha.
| Cuenta | Correo electrónico | Contraseña |
|---|---|---|
| Super Admin: todas las páginas y permisos | admin@hollina.example | Admin@123 |
| Manager: el resumen, el calendario, las reservas, los alojamientos, las consultas, las reseñas y el asistente de IA; sin administradores, roles ni ajustes de la empresa | manager@hollina.example | Manager@123 |
La carga inicial añade 14 alojamientos (12 publicados, 2 borradores) con 42 fotografías, 6 destinos, 18 comodidades, 60 reservas a lo largo del año, 8 rangos bloqueados, 12 preguntas de huéspedes, 24 reseñas y 6 preguntas de la página de inicio, así que cada pantalla se abre llena. Las fechas se guardan como desplazamientos respecto al día de la carga, así que una base de datos nueva siempre tiene llegadas hoy. Son solo cuentas de demostración locales.
Detén e inicia de nuevo
Pulsa Ctrl+C en la terminal para detener las aplicaciones, o ejecuta esto desde la carpeta hollina-vacation-rental-full-stack. Tus datos, la base de datos y las subidas, se conservan en el volumen hollina-data.
hollina-vacation-rental-full-stackdocker compose downVuelve a iniciar con el mismo comando del paso 3. Sin --build, reutiliza las imágenes que ya construiste.
hollina-vacation-rental-full-stackdocker compose upConserva tus datos
docker compose down -v también elimina el volumen de datos. El siguiente inicio carga una copia nueva de la empresa de demostración, y todo lo que creaste desaparece.
Ejecuta el sitio web de alojamientos
Este paquete es el sitio web de alojamientos por sí solo. Lee todo de la API de Hollina, así que inicia la API primero. 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.
Descomprime y abre la carpeta
Terminalunzip -q hollina-website-*.zip cd hollina-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/apiy se llama a sí mismohttp://localhost:3030. Para una API en otro lugar, pasa su dirección.Terminalenhollina-websitedocker build -t hollina-website .Con tu propia API y dominio:
Terminalenhollina-websitedocker build -t hollina-website --build-arg NEXT_PUBLIC_API_BASE_URL=https://api.your-company.com/api --build-arg NEXT_PUBLIC_SITE_URL=https://www.your-company.com --build-arg NEXT_PUBLIC_MEDIA_HOSTNAME=media.your-company.com .¿Tienes problemas?Inícialo
Dentro del contenedor,
localhostes el propio contenedor, así queAPI_INTERNAL_URLindica al servidor del sitio web dónde encontrar la API en tu equipo, para los títulos de página, el primer renderizado de las páginas de inicio y de alojamiento, y el mapa del sitio.--add-hosthace quehost.docker.internalfuncione en Linux; Docker Desktop ya lo tiene. Si el puerto3030está ocupado, cambia el número a la izquierda de-p, por ejemplo-p 3041:3030, abre ese puerto en su lugar y añadehttp://localhost:3041alCORS_ORIGINde la API.Terminalenhollina-websitedocker run -p 3030:3030 -e API_INTERNAL_URL=http://host.docker.internal:8000/api --add-host=host.docker.internal:host-gateway hollina-websiteResultado esperado: localhost:3030Local abre el sitio web con los alojamientos de tu API. El inglés está en
¿Tienes problemas?/en, el árabe en/ar.
Ejecuta el panel de reservas
Este paquete es el panel de reservas por sí solo. Cada pantalla lee la API de Hollina, así que inicia la API primero. 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.
Descomprime y abre la carpeta
Terminalunzip -q hollina-booking-dashboard-*.zip cd hollina-booking-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 "Volver al sitio web" y el "Ver alojamiento" del editor de alojamientos.Terminalenhollina-booking-dashboarddocker build -t hollina-dashboard .Con tu propia API:
Terminalenhollina-booking-dashboarddocker build -t hollina-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?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ñadehttp://localhost:3041alCORS_ORIGINde la API (y pon suFRONTEND_URLcon esa dirección, desde la que se conectan las notificaciones en directo).Terminalenhollina-booking-dashboarddocker run -p 3031:3031 hollina-dashboardResultado esperado: localhost:3031Local abre el formulario de inicio de sesión. Inicia sesión con
¿Tienes problemas?admin@hollina.exampley la contraseñaAdmin@123, que una API con datos iniciales acepta.
Ejecuta la API
Este paquete es la API NestJS por sí sola, sobre un archivo SQLite guardado en un volumen de Docker junto con las subidas. El sitio web de alojamientos y el panel de reservas son paquetes aparte y no están en esta descarga.
Descomprime y abre la carpeta
Terminalunzip -q hollina-backend-*.zip cd hollina-backendResultado esperado: La carpeta tiene un
¿Tienes problemas?Dockerfile, undocker-entrypoint.shy unpackage.json.Inícialo con la empresa de demostración
Un volumen nuevo tiene tablas vacías y ninguna cuenta a menos que pidas la empresa de demostración, así que conserva
-e SEED_DEMO_DATA=trueen el primer inicio. El volumenhollina-api-dataconserva la base de datos y las subidas 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 fotografías también lo usen. Tus frontends deberán entonces apuntar ahttp://localhost:8010/api.Terminalenhollina-backenddocker run -p 8000:8000 -v hollina-api-data:/data -e SEED_DEMO_DATA=true hollina-apiResultado esperado: localhost:8000/
¿Tienes problemas?api/ healthLocal responde con "status":"ok"y"database":"up".
El contenedor acepta el sitio web en http://localhost:3030 y el panel en http://localhost:3031. En otras direcciones, define CORS_ORIGIN (ambas, separadas por comas), FRONTEND_URL (el panel) y SITE_URL (el sitio web, adonde un procesador de pagos devuelve al huésped) con -e. Sin claves de pago, el simulador incluido liquida todas las reservas con tarjeta y PayPal.
Para dar al contenedor tus propias claves (Stripe, PayPal, R2, IA, 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:
hollina-backenddocker run -p 8000:8000 -v hollina-api-data:/data -e SEED_DEMO_DATA=true --env-file .env -e NODE_ENV=production hollina-apiUn valor dado con -e gana al del mismo nombre en el archivo, así que el contenedor funciona en producción diga lo que diga .env, y mueve las rutas relativas del archivo (SQLITE_DATABASE, MEDIA_UPLOAD_DIR) al volumen. Sin un JWT_SECRET propio, o con el de ejemplo, el contenedor genera un secreto y lo guarda en el volumen, así que los inicios de sesión sobreviven a un reinicio.