196 lines
9.6 KiB
Markdown
196 lines
9.6 KiB
Markdown
# Inventario Proxmox — fuente de verdad del estado
|
|
|
|
**Ú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
|
|
|
|
| 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 |
|
|
|
|
## Contenedores LXC
|
|
|
|
| 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 hay VMs QEMU** (`qm list` vacío).
|
|
|
|
## Docker dentro de LXC 102
|
|
|
|
Docker **no** se administra en el host Proxmox directamente. Todo comando va
|
|
envuelto:
|
|
|
|
```powershell
|
|
.\scripts\Invoke-ProxmoxSsh.ps1 -Command "pct exec 102 -- docker ps"
|
|
```
|
|
|
|
**68 contenedores, todos `running`** al momento de la verificación.
|
|
|
|
> **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).
|
|
|
|
### Núcleo de la plataforma
|
|
|
|
| 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) |
|
|
|
|
### 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).
|