Stack general

Todo Yaxa corre en un solo servidor físico (148.113.161.108). Cloudflare hace de CDN + edge SSL; nginx es el orquestador que decide a qué backend va cada request.

Flujo simplificado

Cliente → Cloudflare → Nginx (148.113.161.108:443)
                          ├─ /                          → Astro SSR  (puerto 4321, PM2)
                          ├─ /products, /product, ...   → Astro SSR  (con cache)
                          ├─ /checkout, /carrito, /api  → Astro SSR  (sin cache)
                          ├─ /data/                     → Astro SSR  (con cache)
                          ├─ /wp-admin/, /wp-json/      → WordPress PHP  (FastCGI 8001)
                          ├─ *.php                      → WordPress PHP  (FastCGI cache)
                          └─ fallback (/)               → WordPress (try_files → index.php)

Si Astro home devuelve 418 (query wc-api, add-to-cart, etc.), nginx redirige internamente a WordPress (@wordpress).

Detalle: nginx-routing.

Componentes principales

ComponenteRuta / ubicaciónPuertoFunción
WordPress + WooCommerce/home/store/public_htmlFastCGI :8001Backend ecommerce
Astro SSR/home/store/astro:4321 (PM2 cluster)Storefront multitenant
ElasticsearchDocker (4 nodos)9401→9200 (solo data1 expuesto)Motor de búsqueda productos
MariaDBsocket UnixDB principal (store_wordpress, ws, marketing)
imgproxyDocker127.0.0.1:8085Imágenes WebP on-demand
yxpython/home/ws/yxpython/Integraciones, scrapers, feeds
n8nDocker127.0.0.1:5678Automatizaciones, WhatsApp
Dashboard OMSDockerfront :3000 / back :4000dash.yaxa.co
Mautic/home/marketing/public_htmlMarketing automation (marketing.yaxa.co)
MonitoringDocker (yx_*)variosPrometheus + Grafana + Loki

Usuarios Unix relevantes

Cada subdominio/servicio corre bajo un usuario distinto (Virtualmin):

  • store — WordPress + Astro
  • ws — yxpython, feeds Google Shopping
  • marketing — Mautic
  • dash, dashdemo — dashboards
  • docs — este vault (bueno, realmente el vault vive en /home/ubuntu/, pero Virtualmin creó el user para gestionar el vhost + SSL)
  • ubuntu — Claude Code y orquestación general

DB

MariaDB 11.8.6, conexión via socket Unix (no TCP localhost):

  • store_wordpress — WP Multisite (todos los tenants comparten esta DB, prefijo por blog_id)
  • ws — yxpython
  • marketingMautic

Postgres (en Docker):

  • n8n-postgres_n8n-1 → DB n8n_db (workflows)
  • n8n-postgres_chat_history-1 → DB chat (conversaciones WhatsApp por tenant). Ver whatsapp-chats

MongoDB (en Docker):

  • mongodb_dashboard — backend del OMS (dash.yaxa.co)
  • yaxa-mp-mongo — otro servicio

ClickHouse (dentro del stack PostHog en Docker)

Caches

Tres capas distintas, en disco secundario /mnt/secondary/ y terciario /mnt/tertiary/:

Dominios

13 países LATAM + España + subdominios especiales. Todos resuelven a esta misma IP. Ver index.