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)
This commit is contained in:
@@ -0,0 +1,142 @@
|
||||
# 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/](../../scripts/host/) y se
|
||||
instalan con [scripts/Install-CoolifyAutostart.ps1](../../scripts/Install-CoolifyAutostart.ps1).
|
||||
|
||||
---
|
||||
|
||||
## Instalar / reinstalar
|
||||
|
||||
```powershell
|
||||
# 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)
|
||||
|
||||
```powershell
|
||||
.\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:
|
||||
|
||||
```powershell
|
||||
.\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:
|
||||
|
||||
```powershell
|
||||
.\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:
|
||||
|
||||
```powershell
|
||||
.\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
|
||||
|
||||
```powershell
|
||||
# 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](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.
|
||||
Reference in New Issue
Block a user