Files
urieljareth f587a8baa2 Agrega scripts y runbooks: Cloudflare API, autostart Coolify, parche Chatwoot, deploy Solo Leveling + docs de casos
- scripts/Invoke-CloudflareApi.ps1: control de tunnel/DNS via API
- scripts/Install-CoolifyAutostart.ps1 + scripts/host/: autostart de LXC 102 + tunnel tras corte
- scripts/Apply-ChatwootEnterprisePatch.ps1: parche enterprise (autodetecta creds)
- Deploy-SoloLeveling.ps1: deploy build-on-server verificado
- docs/runbooks/cloudflare-tunnel.md y autostart-coolify.md
- docs/casos/chatwoot-enterprise-patch.md (credenciales redactadas)
- docs/AGENTS-coolify-apps.md + issues y reportes
- deploy_skill/references/coolify-4.1.2-notes.md: hallazgos verificados (seccion 7)
- package.json para verify-online.mjs del coolify-deploy skill
- .gitignore: excluye .claude/ y .opencode/ (config local de herramientas)
2026-07-18 11:31:31 -06:00

5.0 KiB

Runbook: Auto-arranque de Coolify tras apagón

Garantiza que, después de un corte de luz y al volver a encender el servidor Proxmox (192.168.0.200, nodo thinkcentre), el LXC 102 (Coolify) y su túnel de Cloudflare arranquen solos, sin intervención manual.

Causa raíz que resolvió esto (2026-07-08): el LXC 102 no tenía la marca onboot (por defecto 0), así que el host encendía pero el contenedor se quedaba apagado y, con él, todo el stack. Todo lo demás dentro del LXC ya estaba bien encadenado (Docker enabled, contenedores con restart=always / unless-stopped, cloudflared.service enabled).


Arquitectura de la solución (dos capas)

  1. Base nativa de Proxmox — onboot. El LXC 102 arranca solo al encender el host, gestionado por pve-guests.service (que ya está enabled):

    pct set 102 --onboot 1 --startup order=1,up=30
    
  2. Guardián auto-reparable — coolify-autostart.service. Un servicio systemd oneshot en el host que corre en cada arranque, después de pve-guests.service, y garantiza el stack completo:

    • /usr/local/bin/coolify-autostart.sh — script idempotente.
    • /etc/systemd/system/coolify-autostart.service — unit (WantedBy=multi-user.target).
    • Log: /var/log/coolify-autostart.log.

    En cada boot el guardián:

    1. Verifica que el LXC 102 esté running (lo arranca si no).
    2. Espera a que Docker responda dentro del LXC (hasta 180 s).
    3. Se asegura de que estén arriba: coolify-db, coolify-redis, coolify-realtime, coolify, coolify-proxy, cloudflared (los inicia si alguno no está).
    4. Levanta el cloudflared.service de systemd dentro del LXC (segundo conector al mismo túnel).

    Las dos capas son complementarias: onboot hace el trabajo normal; el guardián es una red de seguridad que además auto-repara (p. ej. un contenedor con restart=no) y deja log de lo ocurrido tras el apagón.

Los archivos fuente viven en el repo en scripts/host/ y se instalan con scripts/Install-CoolifyAutostart.ps1.


Instalar / reinstalar

# Instala onboot + guardián y lo prueba una vez (idempotente y seguro)
.\scripts\Install-CoolifyAutostart.ps1 -RunNow

Opciones:

  • -VerifyOnly — solo reporta estado (onboot, unit, log). No cambia nada.
  • -SkipOnboot — instala solo el guardián, sin tocar la marca onboot.
  • -RunNow — tras instalar, dispara el guardián una vez y muestra el log.
  • -Uninstall — quita el guardián (deja onboot intacto).

El instalador empuja los archivos por SSH en base64 (normaliza CRLF→LF), inyecta el COOLIFY_LXC correcto en el unit, activa onboot, habilita el servicio y verifica.


Verificar estado (solo lectura)

.\scripts\Install-CoolifyAutostart.ps1 -VerifyOnly

Estado sano esperado:

onboot: 1
startup: order=1,up=30
guardian enabled: enabled
script executable: yes

Log del último arranque:

.\scripts\Invoke-ProxmoxSsh.ps1 -Command "tail -n 25 /var/log/coolify-autostart.log"

Probar sin apagar producción

No reinicies el host solo para probar (tumbaría todos los servicios). En su lugar, dispara el guardián manualmente — solo arranca cosas, nunca las detiene:

.\scripts\Invoke-ProxmoxSsh.ps1 -Command "systemctl start coolify-autostart.service; systemctl is-active coolify-autostart.service; tail -n 25 /var/log/coolify-autostart.log"

Para validar que el unit está bien formado y en el orden correcto:

.\scripts\Invoke-ProxmoxSsh.ps1 -Command "systemd-analyze verify /etc/systemd/system/coolify-autostart.service && systemctl show coolify-autostart.service -p After -p WantedBy"

After debe incluir pve-guests.service; WantedBy debe ser multi-user.target.


Rollback

# Quitar el guardián (deja onboot como esté)
.\scripts\Install-CoolifyAutostart.ps1 -Uninstall

# Y si además quieres que el LXC deje de arrancar solo:
.\scripts\Invoke-ProxmoxSsh.ps1 -Command "pct set 102 --onboot 0"

Notas

  • El guardián es idempotente: correrlo con todo ya arriba no hace nada destructivo, solo lo confirma en el log.
  • Hay dos conectores cloudflared al mismo túnel (5f0e5c5b-a180-46f2-a090-44d151006a62): el contenedor Docker cloudflared (restart=unless-stopped) y el cloudflared.service de systemd dentro del LXC (enabled). Ambos arrancan solos; es redundante pero inofensivo. Si algún día se consolida en uno, ajustar el paso 4 del script y esta nota. Ver cloudflare-tunnel.md.
  • coolify-sentinel tiene restart=no (monitor no crítico); Coolify lo recrea, por eso no está en la lista de contenedores core del guardián.

Verificado: 2026-07-08 — instalado y probado en vivo. onboot=1, coolify-autostart.service enabled, guardián ejecutado con éxito (LXC arriba, Docker listo, 6 contenedores core + túnel running). systemd-analyze verify sin warnings.