| name | lacajita-deployment |
| description | Skill para deployment y operaciones de La Cajita TV. Usar cuando se trabaje con Nginx, Docker, systemd, SSL, Cloudflare, CI/CD, o cualquier tarea de infraestructura y despliegue. |
| license | MIT |
La Cajita TV - Deployment Skill
Guía para deployment, infraestructura y operaciones.
Arquitectura de Producción
Usuario (Web/Mobile)
│
│ HTTPS
▼
Cloudflare (CDN + WAF + SSL)
│
│ HTTP (puerto 80)
▼
Nginx (Reverse Proxy)
│
├─────────────────────────────────┐
│ │
▼ ▼
Frontend SPA FastAPI Backend
/dist (estático) Puerto 8000/8001
Servidores
Nginx
Configuración Principal
/etc/nginx/sites-available/lacajita
/etc/nginx/sites-enabled/lacajita -> ../sites-available/lacajita
nginx -t
systemctl reload nginx
systemctl restart nginx
tail -f /var/log/nginx/error.log
tail -f /var/log/nginx/access.log
Estructura de Rutas
server {
listen 80;
server_name caja.segrd.com;
# Frontend SPA
root /opt/adm-caja-unified/fastapi-playlists/Lacajita/Adm-Caj/dist;
location / {
try_files $uri $uri/ /index.html;
}
# API Backend (quita /api)
location /api/ {
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:8001;
}
# Imágenes estáticas
location /img/ {
alias /opt/adm-caja-unified/fastapi-playlists/img/;
expires 30d;
}
}
Servicios Systemd
API Admin (puerto 8001)
systemctl status lacajita-api
systemctl restart lacajita-api
journalctl -u lacajita-api -f
API Mobile (puerto 8000)
systemctl status lacajita-mobile
systemctl restart lacajita-mobile
journalctl -u lacajita-mobile -f
Crear Servicio Systemd
[Unit]
Description=La Cajita TV API
After=network.target postgresql.service
[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/adm-caja-unified/fastapi-playlists/Lacajita
ExecStart=/opt/adm-caja-unified/fastapi-playlists/Lacajita/venv/bin/uvicorn Api:app --host 127.0.0.1 --port 8001
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Build y Deploy
Frontend
cd /opt/adm-caja-unified/fastapi-playlists/Lacajita/Adm-Caj
npm run build
ls -la dist/
Deploy Script
/opt/adm-caja-unified/fastapi-playlists/Lacajita/deploy/build-and-deploy.sh
cd /opt/adm-caja-unified/fastapi-playlists/Lacajita/Adm-Caj
npm run build
systemctl reload nginx
Cloudflare
DNS
caja.segrd.com → Cloudflare Proxy → 24.199.80.16 (origen)
Configuración Recomendada
- SSL: Full (strict) si hay cert en origen, Full si no
- Always Use HTTPS: ON
- Minimum TLS Version: 1.2
- Auto Minify: HTML, CSS, JS
- Caching Level: Standard
SSL/Certificados
Let's Encrypt (sajet.us)
ls /etc/letsencrypt/live/b5f8a23e7d06c2de5ef515ae93e16016.sajet.us/
certbot renew
certbot --nginx -d dominio.com
Para caja.segrd.com
SSL es manejado por Cloudflare (no necesita cert en origen).
Docker (Opcional)
docker-compose.yml
version: '3.8'
services:
api:
build: ./api
ports:
- "8001:8001"
environment:
- DATABASE_URL=postgresql://...
depends_on:
- db
- redis
db:
image: postgres:15
environment:
POSTGRES_DB: lacajita_db
POSTGRES_USER: lacajita_app
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:7
ports:
- "6379:6379"
volumes:
postgres_data:
Comandos Docker
docker-compose up -d
docker-compose logs -f api
docker-compose build --no-cache api
docker-compose up -d
Health Checks
curl -s -o /dev/null -w "%{http_code}" https://caja.segrd.com/
curl -s https://caja.segrd.com/api/health
curl -s http://127.0.0.1:8000/health
systemctl status nginx
pg_isready -h localhost -U lacajita_app
ss -tlnp | grep -E "(80|8000|8001)"
Troubleshooting
502 Bad Gateway
ps aux | grep uvicorn
ss -tlnp | grep 8001
tail -50 /var/log/nginx/error.log
systemctl restart lacajita-api
systemctl restart nginx
Frontend no carga
ls -la /opt/adm-caja-unified/fastapi-playlists/Lacajita/Adm-Caj/dist/
cd /opt/adm-caja-unified/fastapi-playlists/Lacajita/Adm-Caj
npm run build
nginx -t
systemctl reload nginx
API no responde
journalctl -u lacajita-api -n 100
systemctl restart lacajita-api
pg_isready -h localhost
Checklist de Deploy