Instalación de entrega (paso a paso)¶
Guía de puesta en marcha completa del stack de Camarero IA desde cero: backend (FastAPI), frontend (Next.js) y PostgreSQL. Es el camino recomendado para una entrega / demo en una máquina limpia.
Para el tutorial general con las dos opciones de arranque (Compose o backend manual), ver Empezar. Para el detalle por pieza, ver Backend en local y Frontend en local.
Sin valores secretos
Esta guía usa solo placeholders (p. ej. tu-clave-aqui). Genera tus
propias claves; nunca copies credenciales de otros entornos.
Requisitos¶
| Requisito | Versión / nota |
|---|---|
| Git (con submódulos) | git clone --recurse-submodules |
| Docker o Podman (con compose) | docker compose o podman compose |
| Python | 3.12+ (solo si corres el backend fuera de contenedor) |
| Node.js | 20.x LTS (frontend) |
openssl |
Para generar SECRET_KEY |
Opcionales según las funciones que quieras probar:
NVIDIA_API_KEY— chat con IA y recomendaciones (sin ella, la API y la BD funcionan; solo las funciones IA quedan inactivas).- Credenciales Google/Apple OAuth — login de cliente y admin (ver Configuración OAuth).
1. Clonar el repositorio¶
Si ya lo clonaste sin submódulos:
2. Configurar el .env del backend¶
Edita backend/.env como mínimo con:
DATABASE_URL=postgresql+asyncpg://camarero_user:camarero_password@localhost:5432/camarero_db
SECRET_KEY=[GENERA-CON-openssl-rand-hex-32]
DEBUG=false
SECRET_KEY es obligatoria
La aplicación no arranca sin una SECRET_KEY de al menos 32
caracteres (se valida en todos los entornos). Ver la
referencia de variables.
El resto de variables (IA, OAuth, CORS) pueden quedar vacías para una primera arrancada; se documentan en la referencia exhaustiva de variables.
3. Levantar BD + backend con scripts/dev.sh¶
Desde la raíz del repo:
El script hace tres cosas, en orden:
- Comprueba que existe
backend/.env; si no, copiabackend/.env.exampley sale pidiendo que lo edites antes de continuar. - Detiene contenedores previos (
docker compose -f docker-compose.dev.yml down). - Construye y arranca
backend/docker-compose.dev.ymlcon recarga en vivo (up --build; acepta argumentos extra que se pasan aup).
Servicios que levanta (backend/docker-compose.dev.yml):
| Servicio | Contenedor | Puerto local | Notas |
|---|---|---|---|
PostgreSQL 15 (postgres:15-alpine) |
camarero_ia_db |
5432 (POSTGRES_PORT) |
Volumen camarero_ia_postgres_data; healthcheck pg_isready |
| Backend FastAPI | camarero_ia_backend |
8000 (BACKEND_PORT) |
Build de Dockerfile.dev; monta .:/app con live reload |
Dentro de Compose el backend no usa el DATABASE_URL de tu .env tal
cual: el fichero compose inyecta DATABASE_URL apuntando al host
camarero_ia_db (no localhost), con usuario/BD tomados de
POSTGRES_USER / POSTGRES_PASSWORD / POSTGRES_DB (por defecto
camarero_user / camarero_password / camarero_db).
¿Podman en vez de Docker?
scripts/dev.sh invoca docker compose. Con Podman, o bien defines un
alias, o levantas la BD a mano y corres el backend local
(ver Backend en local).
4. Aplicar migraciones y seed¶
4.1. Migraciones (alembic upgrade head)¶
Con la BD levantada, aplica el esquema desde backend/ con el venv:
cd backend
python3.12 -m venv venv
venv/bin/pip install -r requirements.txt
venv/bin/alembic upgrade head
Verifica que la cadena está sana (debe haber un solo head):
venv/bin/alembic current # revisión aplicada
venv/bin/alembic heads # debe devolver UNA sola revisión
BD vacía
Sobre una base de datos vacía, alembic/env.py crea el esquema canónico
actual con Base.metadata.create_all() y hace stamp a head; las BD
ya existentes siguen el camino incremental normal. Detalle en
Migraciones de BD y
Base de datos.
4.2. Seed del restaurante demo (Amici)¶
El script scripts/seed_amici.py puebla un restaurante completo: restaurante,
menú, categorías, productos (con enriquecimiento IA), extras, grupos de
opciones, promociones, salas, mesas y base de conocimiento. Es re-ejecutable:
borra el restaurant_id elegido y lo vuelve a sembrar.
# Amici Madrid en id=1 (por defecto)
DATABASE_URL=postgresql://camarero_user:camarero_password@localhost:5432/camarero_db \
python3 scripts/seed_amici.py
# Segunda instancia (p. ej. Bilbao en id=5)
DATABASE_URL=postgresql://camarero_user:camarero_password@localhost:5432/camarero_db \
python3 scripts/seed_amici.py --restaurant-id 5 --name "Amici Bilbao"
Qué carga y con qué flags se controla se detalla en Base de datos.
5. Arrancar el frontend¶
cd frontend
npm install
cp .env.example .env # en local basta con los valores por defecto
npm run dev
En local no necesitas tocar nada: por defecto el frontend apunta a
http://localhost:8000/api/v1 (ver Frontend en local).
El dev server eleva el heap de Node (--max-old-space-size=3072); arráncalo
siempre con npm run dev, no con next dev directamente.
6. (Opcional) Configurar OAuth¶
El script scripts/setup_oauth.sh escribe en backend/.env:
GOOGLE_CUSTOMER_CLIENT_ID/GOOGLE_CUSTOMER_CLIENT_SECRETy sus equivalentes de admin,CUSTOMER_REDIRECT_URIyADMIN_REDIRECT_URIpara el dominio de producción,- genera
SECRET_KEYsi falta y fijaDEBUG=false.
Necesitas tus propios credenciales de
Google Cloud Console
(client ID + client secret) y registrar en ellas las URIs de redirección
(<tu-dominio>/auth/callback y <tu-dominio>/admin/auth/callback).
Tras ejecutarlo, reinicia el backend.
Revisa el script antes de ejecutarlo
setup_oauth.sh contiene valores de ejemplo y rutas de máquina
hardcodeadas. Léelo y adapta dominio y rutas a tu entorno; nunca
publiques tu .env resultante.
7. Verificar la instalación¶
| Qué | URL local |
|---|---|
| Frontend | http://localhost:3000 |
| API (Swagger UI) | http://localhost:8000/docs |
| API (ReDoc) | http://localhost:8000/redoc |
| API base | http://localhost:8000/api/v1 |
Estado de los contenedores y logs:
docker compose -f backend/docker-compose.dev.yml ps
docker compose -f backend/docker-compose.dev.yml logs -f
Site demo de referencia (histórico — servidor dado de baja, no se transmite):
- Web:
https://camarero-demo.n0idea.app(no operativa) - API:
https://api.camarero-demo.n0idea.app/api/v1(no operativa)
Para un despliegue nuevo, sigue los pasos de esta guía (Docker/Compose + migraciones + seed) y provisiona infraestructura propia.
Resolución de problemas¶
backend/.env not found: re-ejecuta./scripts/dev.sh; copiará la plantilla. Edítala y vuelve a lanzarlo.- El backend no conecta con la BD: dentro de Compose el host debe ser
camarero_ia_db; con backend manual,localhost. Comprueba que el contenedor de Postgres estéhealthy(pg_isready). - El backend no arranca (error
SECRET_KEY): genera una clave de 32+ caracteres conopenssl rand -hex 32. - Puerto ocupado: ajusta
BACKEND_PORToPOSTGRES_PORT(los leebackend/docker-compose.dev.yml). - El chat falla por timeout: necesita el LLM (variables
NVIDIA_*o proxy local en:4800). Ver Backend en local.
Páginas relacionadas¶
- Empezar — tutorial general (opciones A/B de arranque).
- Variables de entorno — referencia exhaustiva.
- Base de datos — motor, migraciones y seed.
- Migraciones de BD — crear y validar migraciones.
- Ejecutar tests — suites y BD de tests.