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
| Componente | Ruta / ubicación | Puerto | Función |
|---|---|---|---|
| WordPress + WooCommerce | /home/store/public_html | FastCGI :8001 | Backend ecommerce |
| Astro SSR | /home/store/astro | :4321 (PM2 cluster) | Storefront multitenant |
| Elasticsearch | Docker (4 nodos) | 9401→9200 (solo data1 expuesto) | Motor de búsqueda productos |
| MariaDB | socket Unix | — | DB principal (store_wordpress, ws, marketing) |
| imgproxy | Docker | 127.0.0.1:8085 | Imágenes WebP on-demand |
| yxpython | /home/ws/yxpython/ | — | Integraciones, scrapers, feeds |
| n8n | Docker | 127.0.0.1:5678 | Automatizaciones, WhatsApp |
| Dashboard OMS | Docker | front :3000 / back :4000 | dash.yaxa.co |
| Mautic | /home/marketing/public_html | — | Marketing automation (marketing.yaxa.co) |
| Monitoring | Docker (yx_*) | varios | Prometheus + Grafana + Loki |
Usuarios Unix relevantes
Cada subdominio/servicio corre bajo un usuario distinto (Virtualmin):
store— WordPress + Astrows— yxpython, feeds Google Shoppingmarketing— Mauticdash,dashdemo— dashboardsdocs— 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— yxpythonmarketing— Mautic
Postgres (en Docker):
n8n-postgres_n8n-1→ DBn8n_db(workflows)n8n-postgres_chat_history-1→ DBchat(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/:
- FastCGI cache → respuestas PHP de WordPress
- Astro SSR cache → páginas Astro públicas
- imgproxy cache → imágenes WebP (
/mnt/tertiary/img_cache)
Dominios
13 países LATAM + España + subdominios especiales. Todos resuelven a esta misma IP. Ver index.