Arquitectura General
Section titled “Arquitectura General”El portal AI-LAB utiliza dos canales de publicacion independientes que comparten el mismo codigo fuente.
┌─────────────────┐ │ GitHub Repo │ │ albertgracia/ │ │ ai-lab │ └────────┬────────┘ │ ┌────────────────┼────────────────┐ │ │ │ ▼ ▼ ▼ ┌─────────────────┐ ┌────────────┐ ┌──────────────┐ │ Cloudflare Pages│ │ Cloudflare │ │ Servidor │ │ (Build automatico│ │ Tunnel │ │ 192.168.1.30 │ │ desde GitHub) │ │ │ │ │ └────────┬────────┘ └─────┬──────┘ └──────┬───────┘ │ │ │ ▼ ▼ ▼ ┌─────────────────┐ ┌────────────┐ ┌──────────────┐ │ Blog Publico │ │ Traefik │ │ Astro Preview│ │ ai-lab.labrazah │ │ Reverse │ │ :4322 │ │ ome.com │ │ Proxy │ │ │ └─────────────────┘ └────────────┘ └──────────────┘ │ ▼ ┌─────────────────┐ │ Blog Privado │ │ blog-ai-lab.labr│ │ azahome.com │ └─────────────────┘Componentes
Section titled “Componentes”1. GitHub Repository
Section titled “1. GitHub Repository”- Repo:
github.com/albertgracia/ai-lab - Rama:
main - Contenido: Codigo fuente Astro en
apps/ialab-docs/ - Trigger: Cada push a
mainactiva Cloudflare Pages
2. Cloudflare Pages (Blog Publico)
Section titled “2. Cloudflare Pages (Blog Publico)”- URL:
https://ai-lab.labrazahome.com - Build: Automatico desde GitHub (push a main)
- Comando:
npm run buildenapps/ialab-docs/ - Directorio publicacion:
apps/ialab-docs/dist/ - SSL: Automatico (Cloudflare)
- Cache: Purga manual via Cloudflare Dashboard
3. Cloudflare Tunnel + Traefik (Blog Privado)
Section titled “3. Cloudflare Tunnel + Traefik (Blog Privado)”- URL:
https://blog-ai-lab.labrazahome.com - Tunnel: Cloudflare Tunnel (docker en 192.168.1.40)
- Proxy: Traefik (docker en 192.168.1.30)
- Backend: Astro preview en
:4322 - Servicio:
ailab-docs.service(systemd) - API:
/api/*disponible via Traefik →:8084
4. Servidor Local (192.168.1.30)
Section titled “4. Servidor Local (192.168.1.30)”- Servicio:
ailab-docs.service(systemd, autoarranque) - Comando:
astro preview --host 0.0.0.0 --port 4322 - Build: Manual via
npm run build - Contenido: Mismo
dist/que Cloudflare Pages
Flujo de Publicacion
Section titled “Flujo de Publicacion”Para actualizar contenido:
Section titled “Para actualizar contenido:”# 1. Crear o modificar documento en:# 2. Construir localmentecd /opt/ai-lab/apps/ialab-docs && npm run build
# 3. Commit y push a GitHubcd /opt/ai-labgit add apps/ialab-docs/git commit -m "docs: descripcion del cambio"git push origin mainEfectos del push:
Section titled “Efectos del push:”| Sitio | Efecto | Tiempo |
|---|---|---|
| Blog Publico | Cloudflare Pages rebuild automatico | ~1-2 min |
| Blog Privado | GitHub Actions runner rebuild + restart automatico | ~20-30 s |
Para forzar el blog privado manualmente, si hace falta:
Section titled “Para forzar el blog privado manualmente, si hace falta:”cd /opt/ai-lab/apps/ialab-docs && npm run buildsudo systemctl restart ailab-docs.serviceConfiguracion Clave
Section titled “Configuracion Clave”Cloudflare Pages (Dashboard)
Section titled “Cloudflare Pages (Dashboard)”Build command: npm run buildBuild directory: apps/ialab-docsOutput directory: distRoot directory: apps/ialab-docsNode version: 22 (por defecto)Traefik (blog privado)
Section titled “Traefik (blog privado)”http: routers: ai-lab-docs: rule: "Host(`blog-ai-lab.labrazahome.com`)" service: ai-lab-docs ai-lab-docs-api: rule: "Host(`blog-ai-lab.labrazahome.com`) && PathPrefix(`/api/`)" service: ai-lab-docs-api priority: 10 services: ai-lab-docs: loadBalancer: servers: - url: "http://host.docker.internal:4322" ai-lab-docs-api: loadBalancer: servers: - url: "http://host.docker.internal:8084"Cloudflare DNS
Section titled “Cloudflare DNS”ai-lab.labrazahome.com → Cloudflare Pages (CNAME)blog-ai-lab.labrazahome.com → Cloudflare Tunnel (CNAME)Diferencia entre ambos blogs
Section titled “Diferencia entre ambos blogs”| Aspecto | Publico | Privado |
|---|---|---|
| URL | ai-lab.labrazahome.com | blog-ai-lab.labrazahome.com |
| Autenticacion | No | Cloudflare Access (opcional) |
| Build | Automatico (Cloudflare) | Manual (local) |
| API | No disponible | Disponible (/api/*) |
| Actualizacion | Push a GitHub | Rebuild + restart servicio |
| Latencia | ~2 min desde push | 0s (local) |
Verificacion post-despliegue
Section titled “Verificacion post-despliegue”# Verificar build localcd /opt/ai-lab/apps/ialab-docs && npm run build 2>&1 | tail -5# Debe mostrar: "64 page(s) built" sin errores
# Verificar serviciosudo systemctl is-active ailab-docs.service
# Verificar sitio privadocurl -s http://localhost:4322/ | head -1
# Verificar sitio publico (externa)curl -s https://ai-lab.labrazahome.com/ | head -1