Actualiza toolkit operativo y documentación

This commit is contained in:
urieljareth
2026-09-10 20:53:50 -06:00
parent 3b7209dcc1
commit 714057bfc8
69 changed files with 6023 additions and 384 deletions
+177 -28
View File
@@ -1,46 +1,195 @@
# Proxmox Inventory
# Inventario Proxmox — fuente de verdad del estado
Last verified: 2026-05-30 local time.
**Última verificación: 2026-08-29** (SSH, API de Proxmox y API de Coolify desde esta máquina).
Este documento es la fuente de verdad de *qué existe*. Si algo aquí contradice a
la realidad del host, gana el host: re-verifica y actualiza este archivo.
Para refrescarlo:
```powershell
. .\.env.local.ps1
.\scripts\Get-ProxmoxInventory.ps1
.\coolify_skill\scripts\Invoke-CoolifyApi.ps1 -Path "/resources" -Raw |
Sort-Object name | Select-Object name, uuid, fqdn
```
---
## Host
- IP: `192.168.0.200`
- Node: `thinkcentre`
- Proxmox VE: `9.1.1`
- Running kernel: `6.17.2-1-pve`
- Topology: single-node Proxmox host
| Dato | Valor |
|---|---|
| IP | `192.168.0.200` (IPs verificadas en red: `192.168.3.23` / `192.168.3.15` / `192.168.0.200`) |
| Nodo | `thinkcentre` |
| Proxmox VE | `9.1.1` (`pve-manager/9.1.1/42db4a6cf33dac83`) |
| Kernel | `6.17.2-1-pve` |
| Topología | Proxmox de un solo nodo |
| Disco `/` | 39 GB, 11 GB usados (**29%**) |
| RAM | 31 GiB totales — 14 GiB en uso, 16 GiB disponibles |
| Swap | 7.6 GiB, 303 MiB en uso |
## LXC containers
## Contenedores LXC
| VMID | Name | Status | Notes |
| --- | --- | --- | --- |
| 100 | hermes | running | Secondary LXC |
| 102 | coolify | running | Docker host for Coolify and apps |
| VMID | Nombre | Estado | IPs | Notas |
|---|---|---|---|---|
| 100 | hermes | **running** | `192.168.3.23` / `192.168.3.15` | Secundario. Actualizado a commit `5d3c15aaa`. MiniMax-M3 y API key configuradas y verificadas con inferencia CLI en vivo. Ver caso [docs/casos/hermes-minimax-m3-setup.md](casos/hermes-minimax-m3-setup.md). |
| 102 | coolify | running | `192.168.0.200` (host bridge) | Host Docker de Coolify y de todas las apps. |
No QEMU VM was listed during the latest smoke test.
**No hay VMs QEMU** (`qm list` vacío).
## Docker inside LXC 102
## Docker dentro de LXC 102
Docker is not managed directly on the Proxmox host. Use:
Docker **no** se administra en el host Proxmox directamente. Todo comando va
envuelto:
```powershell
.\scripts\Invoke-ProxmoxSsh.ps1 -Command "pct exec 102 -- docker ps"
```
Observed groups:
**68 contenedores, todos `running`** al momento de la verificación.
- Coolify core: `coolify`, `coolify-db`, `coolify-redis`,
`coolify-realtime`, `coolify-sentinel`, `coolify-proxy`
- Tunnel/proxy: `cloudflared`
- Apps currently observed: Gitea, Chatwoot, OpenClaw, browser services, n8n,
CodiMD, Qdrant, Baserow, Grimmory
> **Los nombres de contenedor llevan el uuid de Coolify como sufijo** — no son
> adivinables y **cambian si un redeploy recrea el contenedor**. Resuélvelos
> siempre antes de usarlos; ver §1.3 de [TOOL-INDEX.md](TOOL-INDEX.md).
One Baserow container was observed as `health: starting` during the latest
Docker sample, so recheck before assuming it is unhealthy.
### Núcleo de la plataforma
## Access model
| Contenedor | Imagen |
|---|---|
| `coolify` | `ghcr.io/coollabsio/coolify:4.3.14` (`GET /version` → `4.3.14`, verificado 2026-08-29) |
| `coolify-db` | `postgres:15-alpine` |
| `coolify-redis` | `redis:7-alpine` |
| `coolify-realtime` | `ghcr.io/coollabsio/coolify-realtime:1.0.17` |
| `coolify-sentinel` | `ghcr.io/coollabsio/sentinel:0.0.22` |
| `coolify-proxy` | `traefik:v3.6` |
| `cloudflared` | — (túnel gestionado desde el dashboard) |
- SSH: root over key-based auth.
- API: Proxmox token via `PROXMOX_API_TOKEN_ID` and
`PROXMOX_API_TOKEN_SECRET`.
- Secrets must stay in local env files or the OS secret store, not Markdown.
### Recursos registrados en Coolify (29)
Del endpoint `/resources`. El **uuid** es lo que necesitas para la API y para
resolver nombres de contenedor.
| Recurso | uuid | FQDN |
|---|---|---|
| agendamax:main | `s30f7egdlkx4wyjp59o1iunc` | https://agendamax.urieljareth.org |
| audio-a--texto:main | `up0oaqnpd8kywjkmmihb61t0` | https://stt.urieljareth.org |
| baserow:main | `vngcvnhbfqboov4nln88zc73` | — |
| baserow-redis | `vztgldo9cap3s0oj240tokgj` | — |
| chatwoot | `c11xzy2tx2cdapm32f5b89vy` | — |
| codimd | `ag4ndg4cr1hvczkr35qlyzs8` | — |
| cotizador:main | `e6vie34d83iv5vw3eyzinl3s` | `…:3000` (sin dominio propio) |
| demospa | `2f094556a04c0dee043af215` | https://demospa.urieljareth.org |
| demospa-mysql | `teplxg70a97itolgwk2qkmgi` | — |
| e3-manager-demo | `xxoq93pnz0jta5tz5m50ylig` | — |
| estaci-n-de-documentos:main | `u11ug3eizk9du3p2ch556ud4` | — |
| **evolution-go** | `j0jkacsfcgypm2jmpillls01` | https://evo.urieljareth.org (API WhatsApp 0.7.2, licencia activa — ver [casos/evolution-go-stack.md](casos/evolution-go-stack.md)) |
| evolution-api | `q6tnsvkvrjw4g0ab532l3r1s` | https://evoapi.urieljareth.org (Node v2.3.7; integrada a Chatwoot: inbox 6=Asesoría, 10=Personal, 12=JM; INSTA desconectada — ver [casos/evolution-api-chatwoot.md](casos/evolution-api-chatwoot.md)) |
| **firecrawl:main** | `du3iknyvy22vap767t9tnf9s` | — (**registrado pero sin contenedor corriendo**) |
| gitea-with-postgresql | `hjwh0svsoo9p5w5kj2j6b1bd` | — |
| grimmory | `y8cq6jmboz0b22mn61hs4tu8` | — |
| insta-portal | `instademo0portal0insta0demo1` | `…:4180` |
| n8n-with-postgres-and-worker | `jdj3y3kmz9blec7ntbxuhezi` | — |
| nextcloud-with-postgres | `hdcdpkm0jko3qqvn5683ercc` | — |
| openclaw-business | `zhaz04q8ibqp5r5hz5ibo01t` | — |
| openclaw (2ª instancia) | `uudgcoz5ibvyvullyzbjalai` | — |
| open-webui | `q13zdxusnhvdent7f44a18kc` | — |
| plataforma-interna | `kruadlc7fdrbh28ykrv8rdyl` | — |
| postgresql-database | `j6hgnvdwq9anpa9wj2ikdx0j` | — |
| postgresql-database | `s10bvby71tb1fpbcl4tnxzzh` | — |
| postgresql-database | `tflojv1iqh0ueoq7apxx4mos` | — |
| prompt-gallery-e3:main | `39eu76lqbejdy9vxs5iz1rws` | https://demopromptgallerye3.urieljareth.org |
| qdrant | `uyn0js6pqbwo8mubw5edy95f` | — |
| solo-leveling | `urm8m4u0jvjggmgpfxblnqwc` | — |
### Stack de Supabase
Corre con nombres fijos (sin sufijo uuid), fuera del patrón habitual de Coolify:
`supabase-db` (`supabase/postgres:17.6.1.136`), `supabase-kong`,
`supabase-auth`, `supabase-rest`, `supabase-storage`, `supabase-studio`,
`supabase-meta`, `supabase-imgproxy`, `realtime-dev.supabase-realtime`.
También `e3-mailpit` (`axllent/mailpit`).
### Versiones que importan
| App | Imagen en ejecución |
|---|---|
| **Chatwoot** | **`chatwoot/chatwoot:v4.16.2`** (app y sidekiq) |
| Chatwoot DB | `pgvector/pgvector:pg12` |
| n8n | `n8nio/n8n:2.32.7` |
| Baserow | `baserow/baserow:2.3.2` |
| OpenClaw | `coollabsio/openclaw:2026.7.1` |
| Evolution API | `evoapicloud/evolution-api:v2.3.7` |
| Gitea | `gitea/gitea:latest` |
| Nextcloud | `lscr.io/linuxserver/nextcloud:latest` |
| Grimmory | `grimmory/grimmory:nightly` |
| Solo Leveling | `ghcr.io/urieljarethbusiness-cpu/solo-leveling:latest` |
## Estado de la API de Coolify
Base pública: `https://coolify.urieljareth.org/api/v1` (Bearer `COOLIFY_TOKEN`) ·
**Origen: `http://192.168.0.117:8000/api/v1`** · Instancia: **4.3.14**.
**Re-verificado a fondo el 2026-08-29, con hallazgo que corrige todo lo anterior:**
- **La API de esta instancia está COMPLETA.** Su propio `openapi.yaml` (dentro del
contenedor en `/var/www/html/openapi.yaml`) declara el namespace completo de
`/applications/*` (incl. `POST /applications/public`, `/dockerfile`,
`/private-deploy-key`, `/private-github-app`), `/github-apps`, `/gitlab-apps`,
notificaciones, proveedores cloud (Hetzner/DigitalOcean/Vultr), MCP, etc. — y
contra el **origen** esos endpoints responden 200 con el token de siempre.
- **El 404 de `/applications/*` que se venía documentando desde v4.1.2 NO lo
produce Coolify: lo produce Cloudflare en el hostname público.** Mismo token,
misma ruta: `https://coolify.urieljareth.org/api/v1/applications` → 404;
`http://192.168.0.117:8000/api/v1/applications` → 200. Es un bloqueo del edge
(regla WAF/ruta en el dashboard) que hay que corregir allí; mientras tanto,
llama a esos endpoints contra `COOLIFY_API_URL_ORIGIN`.
- **Desde v4.2 los endpoints de estado exigen POST** (`GET /deploy?uuid=` → 405
`"This endpoint has changed to a POST request."` — confirmado también contra el
origen; ver §10.1 de las notas). En 4.3.x se añadieron endpoints de logs
(db/servicio/contenedor), settings en las respuestas de application y MCP.
| Endpoint (con token válido) | Vía Cloudflare | Vía origen (LXC 102) |
|---|---|---|
| `/version`, `/resources`, `/servers`, `/projects`, `/teams`, `/services`, `/databases`, `/deployments`, `/security/keys` | OK | OK |
| **`/applications` y todo su namespace** | **404 (Cloudflare)** | **OK (200)** |
| **`/github-apps`** | **404 (Cloudflare)** | **OK (200)** |
| `/deploy` con GET | 405 | 405 (correcto: exige POST desde v4.2) |
## Modelo de acceso
- **SSH:** root con autenticación por clave. La llave operativa es
`keys/proxmox_ed25519` (idéntica a `C:\Users\Uriel Jareth\.ssh\coolify_key`;
ED25519, sin passphrase) — verificada en vivo el 2026-08-29 contra el host
(`192.168.0.200`) y el LXC 102 (`192.168.0.117`). La ruta
`…\.openclaw\workspace\proxmox_key_win` citada en docs antiguos **ya no existe**.
Es el único camino directo al host; permite ejecutar
comandos en el host y en los contenedores LXC (`pct exec 100`, `pct exec 102`).
- **API de Proxmox:** token `root@pam!openclaw` — único token del host
(`/etc/pve/priv/token.cfg`), verificado 200 el 2026-08-29. Ya cargado en
`.env.local.ps1` (`PROXMOX_API_TOKEN_ID` / `PROXMOX_API_TOKEN_SECRET`).
- **API de Coolify:** `COOLIFY_TOKEN` (v4.3.14, verificado).
- **API de Cloudflare:** sin token — el túnel se gestiona desde el dashboard.
- Los secretos viven solo en `.env.local.ps1` (gitignored), en `ACCESS.md`
(gitignored, fuente de verdad de credenciales) o en el almacén de secretos del
SO. **Nunca en Markdown versionado.** Inventario de credenciales:
[ACCESS.md](../ACCESS.md)
> ⚠️ **Pendiente en `.env.local.ps1` (2026-08-29):** solo `CLOUDFLARE_API_TOKEN`.
> El PAT de GitHub que había caducó (401); se reemplazó por la credencial viva del
> Administrador de credenciales de Windows. `PROXMOX_API_TOKEN_ID/SECRET`,
> `COOLIFY_EMAIL/PASSWORD` ya están cargados. SSH, API de Proxmox y API de
> Coolify verificados.
## Automatizaciones instaladas en el host
| Qué | Dónde | Agendado por |
|---|---|---|
| Guard del parche enterprise de Chatwoot | `/root/scripts/chatwoot-enterprise-guard.sh` | `/etc/cron.d/chatwoot-enterprise-guard`, `*/5 * * * *` |
| Auto-arranque tras corte de luz | unit `coolify-autostart.service` | systemd, **`enabled`** |
Log del guard: `/var/log/chatwoot-enterprise-guard.log` (solo escribe cuando
actúa). Estado al 2026-08-07: el plan está en `enterprise` y una ejecución
manual del guard pasa correctamente, pero el log registra errores de lectura
durante la ventana del update a v4.16.2 — ver
[runbooks/chatwoot-update.md](runbooks/chatwoot-update.md).