Files
cocina-con-alma/README.md
2026-04-21 07:38:17 +00:00

283 lines
8.3 KiB
Markdown

# 🍽️ Cocina con Alma
Gestor de recetas y menú semanal público para negocios de comida / viandas.
Combina **Tandoor Recipes** (gestión interna de recetas, inventario y planificación) con una **página pública** donde los clientes pueden ver el menú de la semana desde sus celulares.
---
## 🏗️ Arquitectura
| Servicio | Puerto | Descripción |
|----------|--------|-------------|
| **Tandoor Recipes** | `8080` | Panel de administración para recetas, ingredientes, inventario y meal plan |
| **Menú Público** | `80` | Página web responsive con el menú semanal para clientes |
| **PostgreSQL** | — | Base de datos persistente para Tandoor |
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Clientes │ │ Tu madre │ │ PostgreSQL │
│ (navegador) │ │ (navegador) │ │ (datos) │
│ │ │ │ │ │
│ Puerto 80 │ │ Puerto 8080 │ │ Puerto 5432 │
│ Menú público │ │ Tandoor Admin │ │ (interno) │
└────────┬────────┘ └────────┬────────┘ └─────────────────┘
│ │
└────────┬───────────────┘
┌────────┴────────┐
│ Docker Compose │
└─────────────────┘
```
---
## 📋 Requisitos
- [Docker](https://docs.docker.com/get-docker/)
- [Docker Compose](https://docs.docker.com/compose/)
- 2 GB de RAM mínimo
- 5 GB de disco disponible
---
## 🚀 Instalación paso a paso
### 1. Clonar el repositorio
```bash
git clone https://git.consultoria-as.com/consultoria-as/cocina-con-alma.git
cd cocina-con-alma
```
### 2. Configurar variables de entorno
```bash
cp .env.example .env
nano .env # o vim
```
Editá al menos estas variables:
```env
SECRET_KEY=una_clave_larga_y_aleatoria_de_50_caracteres
POSTGRES_PASSWORD=contraseña_segura_para_postgres
TANDOOR_API_TOKEN=dejar_vacio_por_ahora
```
> 💡 Para generar `SECRET_KEY`:
> ```bash
> openssl rand -hex 32
> ```
### 3. Levantar los servicios por primera vez
```bash
docker compose up -d
```
La primera vez tarda varios minutos porque descarga imágenes y Tandoor ejecuta migraciones.
### 4. Crear el usuario administrador
```bash
docker exec -i cocinaconalma-web_recipes-1 \
/opt/recipes/venv/bin/python manage.py shell << 'EOF'
from django.contrib.auth import get_user_model
User = get_user_model()
user = User.objects.create_superuser(
"admin", "admin@cocina.com", "Alma2024!"
)
print("Usuario creado:", user.username)
EOF
```
### 5. Crear el espacio de trabajo (space) y obtener token de API
```bash
# Crear space y asignar grupo admin
docker exec -i cocinaconalma-web_recipes-1 \
/opt/recipes/venv/bin/python manage.py shell << 'EOF'
from cookbook.models import Space, UserSpace
from django.contrib.auth.models import Group
from django.contrib.auth import get_user_model
User = get_user_model()
user = User.objects.get(username="admin")
space = Space.objects.create(name="Cocina con Alma", created_by=user)
us = UserSpace.objects.create(user=user, space=space)
us.groups.add(Group.objects.get(name='admin'))
us.save()
user.userspace_active = us
user.save()
# Crear token de API para el menú público
from rest_framework.authtoken.models import Token
token, _ = Token.objects.get_or_create(user=user)
print(f"TANDOOR_API_TOKEN={token.key}")
EOF
```
Copiá el token impreso y pegalo en tu archivo `.env`:
```env
TANDOOR_API_TOKEN=el_token_que_te_dio_el_comando_anterior
```
### 6. Recrear el contenedor del menú público para que lea el token
```bash
docker compose up -d --force-recreate menu_publico
```
### 7. Acceder
| Uso | URL |
|-----|-----|
| Panel de administración (Tandoor) | `http://IP_DEL_SERVIDOR:8080` |
| Menú público para clientes | `http://IP_DEL_SERVIDOR` |
**Credenciales por defecto:**
- Usuario: `admin`
- Contraseña: `Alma2024!` (cambiarla en producción)
---
## 📝 Uso diario
### Para tu madre (panel de Tandoor)
1. Entrar a `http://IP:8080` e iniciar sesión
2. **Recetas** → Crear o importar recetas nuevas
3. **Plan** (calendario) → Arrastrar recetas a los días de la semana
4. **Foods** → Registrar ingredientes y precios para control de stock
5. **Shopping** → Generar lista de compras automática desde el meal plan
### Para los clientes
Simplemente acceden a `http://IP_DEL_SERVIDOR` y ven el menú de los próximos 7 días. No necesitan iniciar sesión.
---
## 🗄️ Acceso directo a la base de datos
```bash
# Entrar a PostgreSQL
docker exec -it cocinaconalma-db_recipes-1 \
psql -U djangouser -d djangodb
# Consultas útiles
\dt # listar tablas
SELECT * FROM cookbook_recipe; # ver recetas
SELECT * FROM cookbook_food; # ver ingredientes
SELECT * FROM cookbook_mealplan; # ver menú semanal
\q # salir
```
---
## 🔧 Archivos modificados de Tandoor
Este proyecto usa la imagen oficial de Tandoor pero monta dos archivos modificados:
| Archivo | Cambio |
|---------|--------|
| `tandoor/settings.py` | Agrega `TokenAuthentication` de DRF para que la app Flask se conecte vía API |
| `tandoor/scope_middleware.py` | Extiende el middleware de espacios para que también funcione con tokens de API |
Estos cambios son necesarios porque Tandoor, por defecto, solo expone la API REST para sesiones web y OAuth2. La app Flask necesita un token fijo para leer el menú semanal sin intervención humana.
---
## 📁 Estructura del proyecto
```
cocina-con-alma/
├── docker-compose.yml # Orquestación de servicios
├── .env # Variables de entorno (NO subir a git)
├── .env.example # Plantilla de variables
├── .gitignore
├── README.md # Este archivo
├── menu-publico/ # App Flask - menú público
│ ├── Dockerfile
│ ├── requirements.txt
│ ├── app.py # Lógica de conexión a Tandoor
│ └── templates/
│ └── index.html # Página del menú semanal
└── tandoor/ # Parches a Tandoor
├── settings.py
└── scope_middleware.py
```
---
## ⚠️ Notas de seguridad
- **Nunca commitear el archivo `.env`** (ya está en `.gitignore`)
- Cambiar la contraseña por defecto de `admin` después de la primera instalación
- El token de API tiene acceso de lectura a todo Tandoor. No exponerlo públicamente
- Para producción, considerar:
- HTTPS (usar reverse proxy como Nginx o Traefik)
- Firewall: solo exponer puertos 80 y 8080 si es necesario
- Backups automáticos de `tandoor/postgresql/`
---
## 🔄 Backup y restauración
### Backup
```bash
# Backup de la base de datos
docker exec cocinaconalma-db_recipes-1 pg_dump -U djangouser djangodb > backup_$(date +%Y%m%d).sql
# Backup de archivos subidos (imágenes de recetas)
docker cp cocinaconalma-web_recipes-1:/opt/recipes/mediafiles ./mediafiles_backup
```
### Restauración
```bash
# Restaurar base de datos
docker exec -i cocinaconalma-db_recipes-1 psql -U djangouser -d djangodb < backup_20240101.sql
```
---
## 🐛 Solución de problemas
### El menú público muestra "Error de API"
1. Verificar que `TANDOOR_API_TOKEN` esté configurado en `.env`
2. Recrear el contenedor: `docker compose up -d --force-recreate menu_publico`
3. Revisar logs: `docker logs cocinaconalma-menu_publico-1`
### Tandoor no responde en el puerto 8080
```bash
docker logs cocinaconalma-web_recipes-1 --tail 50
```
Esperar a que aparezca "Booting worker" — la primera vez tarda.
### Olvidé la contraseña de admin
```bash
docker exec -it cocinaconalma-web_recipes-1 \
/opt/recipes/venv/bin/python manage.py changepassword admin
```
---
## 📄 Licencia
Este proyecto integra software de terceros:
- [Tandoor Recipes](https://github.com/TandoorRecipes/recipes) — MIT License
- Las recetas de ejemplo son ilustrativas.
---
**Desarrollado para el negocio de viandas de mamá** ❤️