feat: Agregar configuracion de despliegue con Gitea Actions
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 2m46s

- Dockerfile para build de Nuxt 4
- docker-compose.yml con traefik y Authentik
- Workflow de Gitea Actions (single step)
- Hook de Claude Code para monitorear deploys
This commit is contained in:
2025-11-25 10:32:02 -06:00
parent 22614a9a66
commit d694d2f7f0
4 changed files with 348 additions and 0 deletions

57
docker-compose.yml Normal file
View File

@@ -0,0 +1,57 @@
version: '3.8'
services:
nuxt-app:
image: ${REG}/${REPO_OWNER}/${APP_NAME}:latest
container_name: ${APP_NAME}
restart: unless-stopped
environment:
- NODE_ENV=production
# Printer configuration (prefijo NUXT_ para runtime config)
- NUXT_PRINTER_HOST=${PRINTER_HOST:-192.168.87.147}
- NUXT_PRINTER_DEVICE_ID=${PRINTER_DEVICE_ID:-matricial2}
- NUXT_PRINTER_TIMEOUT_MS=${PRINTER_TIMEOUT_MS:-60000}
# Variables originales para compatibilidad
- PRINTER_HOST=${PRINTER_HOST:-192.168.87.147}
- PRINTER_DEVICE_ID=${PRINTER_DEVICE_ID:-matricial2}
- PRINTER_TIMEOUT_MS=${PRINTER_TIMEOUT_MS:-60000}
# Authentik configuration
- NUXT_PUBLIC_AUTHENTIK_URL=${NUXT_PUBLIC_AUTHENTIK_URL:-https://authentik.nucleoriofrio.com}
- NUXT_PUBLIC_AUTH_ENABLED=${NUXT_PUBLIC_AUTH_ENABLED:-false}
networks:
- principal
- traefik-network
labels:
- "traefik.enable=true"
- "traefik.docker.network=principal"
# Service
- "traefik.http.services.${APP_NAME}.loadbalancer.server.port=3000"
# Router para assets estaticos de Nuxt y PWA (sin autenticacion) - mayor prioridad
# Incluye recursos PWA y .well-known para scope extensions
- "traefik.http.routers.${APP_NAME}-public.rule=Host(`${APP_DOMAIN}`) && (PathPrefix(`/_nuxt`) || PathPrefix(`/.well-known`) || PathPrefix(`/icons`) || Path(`/manifest.webmanifest`) || Path(`/sw.js`) || PathPrefix(`/workbox-`) || Path(`/favicon.ico`) || Path(`/offline.html`))"
- "traefik.http.routers.${APP_NAME}-public.entrypoints=websecure"
- "traefik.http.routers.${APP_NAME}-public.tls=true"
- "traefik.http.routers.${APP_NAME}-public.tls.certresolver=letsencrypt"
- "traefik.http.routers.${APP_NAME}-public.service=${APP_NAME}"
- "traefik.http.routers.${APP_NAME}-public.priority=100"
- "traefik.http.routers.${APP_NAME}-public.middlewares=${APP_NAME}-headers"
# Router principal con Authentik Forward Auth (menor prioridad)
- "traefik.http.routers.${APP_NAME}.rule=Host(`${APP_DOMAIN}`)"
- "traefik.http.routers.${APP_NAME}.entrypoints=websecure"
- "traefik.http.routers.${APP_NAME}.tls=true"
- "traefik.http.routers.${APP_NAME}.tls.certresolver=letsencrypt"
- "traefik.http.routers.${APP_NAME}.service=${APP_NAME}"
- "traefik.http.routers.${APP_NAME}.priority=50"
- "traefik.http.routers.${APP_NAME}.middlewares=authentik-forward-auth@file,${APP_NAME}-headers"
# Custom headers middleware
- "traefik.http.middlewares.${APP_NAME}-headers.headers.customrequestheaders.X-Forwarded-Proto=https"
networks:
principal:
external: true
traefik-network:
external: true