01Resumen ejecutivo
| Negocio | Repostería artesanal — Charis Basque |
|---|---|
| Canal actual | Instagram @charisbasquegt |
| Objetivo | Tienda online con catálogo, checkout y cobros con tarjeta |
| Stack | WordPress + WooCommerce + Recurrente |
| Infraestructura | VPS privado vía Coolify (servidor del cliente) |
| Pagos | Recurrente — plugin oficial WooCommerce |
| Idioma inicial | Español (Guatemala) |
02Identidad visual
La marca "Charis Basque" en Instagram se mueve en una línea femenina, cálida, artesanal. Mientras se confirma el manual de marca, propongo esta paleta como base:
Tipografía: Playfair Display (serif) para títulos · Inter (sans) para cuerpo.
03Arquitectura
3.1 Diagrama de infraestructura
navegador / móvil"]) IG["Instagram
@charisbasquegt"] DNS["DNS
AdGuard / Cloudflare"] Coolify["Coolify
Traefik reverse proxy"] WP["WordPress
+ WooCommerce"] DB[("MariaDB
10.11")] Storage["Volumen persistente
wp-uploads"] Recurrente["Recurrente
pasarela de pagos"] Banco(("Banco GT
24h hábiles")) Email["Email
SMTP saliente"] Backups[("Backups
S3 / disco")] Cliente --> DNS IG -. link bio .-> DNS DNS --> Coolify Coolify -->|HTTPS 443| WP WP --> DB WP --> Storage WP -->|API REST| Recurrente Recurrente -->|liquidacion| Banco WP -->|notificaciones| Email DB -. snapshot .-> Backups Storage -. snapshot .-> Backups
3.2 Topología de contenedores (Coolify)
443 / 80"] subgraph Proyecto["Proyecto Coolify charis"] App["wordpress
php-fpm-apache
puerto interno 80"] DB["db
mariadb 10.11
puerto interno 3306"] end Vol1["vol wp_uploads
wp-content uploads"] Vol2["vol wp_db
var lib mysql"] end Traefik --> App App --> DB App --- Vol1 DB --- Vol2
Regla Traefik: todo el tráfico público entra a Traefik en :443 y se enruta por dominio (ej. tienda.charis.com.gt o un subdominio interno) al servicio wordpress por HTTP interno. MariaDB NO se expone al exterior.
04Stack técnico
| Capa | Tecnología | Justificación |
|---|---|---|
| Sistema | VPS Coolify (Ubuntu 24.04) | Servidor del cliente, ya con Traefik, TLS y backups configurados |
| Web server | Traefik (incluido en Coolify) | Reverse proxy + Let's Encrypt automático |
| CMS | WordPress 6.x | Estándar, plugins de pago, fácil de operar |
| Tienda | WooCommerce 9.x | Plugin oficial Recurrente, ecosistema enorme |
| Pagos | Recurrente (plugin WooCommerce oficial) | Comisión 4.5%, liquida 24h, soporte GT, PCI cert. |
| DB | MariaDB 10.11 | Compatible 100% con WordPress |
| Cache | Redis (opcional) | Sessions y transients, no obligatorio al inicio |
| Tema | Tema hijo de Storefront o Astra | Base customizable con la paleta Charis |
| SMTP (Brevo o Gmail Workspace) | Pedidos, facturas, recuperación de carrito | |
| Backups | S3 semanal (DB + uploads) | Coolify lo soporta nativamente |
05Dominio y DNS
Subdominio propuesto: tienda.charis.com.gt o un subdominio interno — pendiente de decisión con la dueña.
Registros DNS necesarios (tipo A o CNAME):
tienda.charis.com.gt → <IP pública del VPS Coolify>
Traefik emite el certificado TLS automáticamente (Let's Encrypt) cuando el DNS resuelve.
06Plan de despliegue
Fase 0
Confirmar paleta y logo. Confirmar dominio. Crear cuenta Recurrente sandbox. Definir método de envío.
Fase 1
Proyecto nuevo en Coolify. DB MariaDB. Servicio WordPress. Dominio en Traefik. Verificar 200 en /wp-admin.
Fase 2
Wizard WordPress. WooCommerce con GTQ. Plugin Recurrente oficial. Pago de prueba en sandbox.
Fase 3
Tema hijo con paleta Charis. Categorías y productos. Páginas legales. Feed de IG en footer.
Fase 4
SMTP. Backups. 2FA admin. Prueba E2E con Q1 real. Cambiar Recurrente a producción. Anuncio en stories.
Pasos detallados
- Crear proyecto en Coolify — siempre proyecto nuevo, nunca reusar existentes
- Crear base de datos MariaDB — DB: charis_wp, user: wp_user, password aleatorio 32 chars
- Crear servicio WordPress — imagen
wordpress:6-php8.3-apache, volumenwp_uploads - Configurar dominio en Traefik — Let's Encrypt automático
- Verificar instalación —
curl -I https://<dominio>/wp-admin/install.phpdebe dar 200/302 - Completar wizard WordPress — admin, password fuerte, español
- Instalar WooCommerce + plugin Recurrente — configurar con llaves sandbox primero
- Pago de prueba end-to-end — sandbox Q1 → confirmar webhook → cambiar a producción
07Receta docker-compose
Referencia portable. En Coolify se prefiere create_dockerimage con la imagen de WordPress, pero el compose se documenta para entornos fuera de Coolify.
services:
wordpress:
image: wordpress:6-php8.3-apache
restart: unless-stopped
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wp_user
WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
WORDPRESS_DB_NAME: charis_wp
WORDPRESS_CONFIG_EXTRA: |
define('WP_HOME', 'https://tienda.charis.com.gt');
define('WP_SITEURL', 'https://tienda.charis.com.gt');
volumes:
- wp_uploads:/var/www/html/wp-content/uploads
depends_on:
- db
# Traefik lo expone; NO publicar puertos aquí
db:
image: mariadb:10.11
restart: unless-stopped
environment:
MARIADB_DATABASE: charis_wp
MARIADB_USER: wp_user
MARIADB_PASSWORD: ${DB_PASSWORD}
MARIADB_RANDOM_ROOT_PASSWORD: 'yes'
volumes:
- wp_db:/var/lib/mysql
# NO exponer puertos
volumes:
wp_uploads:
wp_db:
08Flujo de pago
09Seguridad
- HTTPS forzado (Traefik por defecto)
- Cabeceras HSTS, X-Frame-Options, X-Content-Type-Options
- 2FA para admin (plugin 2FAS o similar)
- Backups encriptados en S3 (Coolify nativo)
- Secrets (DB password, Recurrente API keys) solo en env vars de Coolify, nunca en el repo
- Actualizaciones automáticas de WordPress core (minor)
- Ocultar
/wp-adminpor IP si es viable
10Costos recurrentes
| Concepto | Costo aprox. mensual |
|---|---|
| VPS Coolify (ya pagado) | $0 (compartido con otros servicios) |
Dominio .com.gt | ~Q200/año |
| Recurrente comisión 4.5% | Variable (sobre ventas) |
| Email transaccional (Brevo free) | $0 hasta 300 emails/día |
| Backups S3 (Backblaze B2) | ~$1-3 |
| Total fijo | < $5/mes + comisión sobre ventas |
11Riesgos y mitigaciones
| Riesgo | Mitigación |
|---|---|
| Caída del VPS | Backups S3 permiten restaurar en otro VPS en <1h |
| Conflicto plugin Recurrente con WooCommerce | Últimas versiones; sandbox primero |
| Inventario desincronizado (IG vs tienda) | Único punto de verdad = tienda; IG es vitrina |
| Tarjeta rechazada en producción | Dashboard Recurrente para disputas; 3DSecure siempre activo |
| Edición rompe el sitio | Tema hijo + backups diarios para rollback |
12Próximos pasos
- Confirmar con la dueña — dominio, paleta, logo, envío, facturación IVA
- Crear cuenta Recurrente — obtener llaves sandbox
- Revisar este plan — aprobar para iniciar Fase 1
- Reservar subdominio — AdGuard / Cloudflare