Desplegar el stack d0a1 lleva unos 30 minutos si sigues esta guía al pie de la letra. Asumimos un VPS limpio con Ubuntu 24.04 y un dominio apuntando.
1. Requisitos previos
- VPS Ubuntu 24.04 — mínimo 2 vCPU, 8 GB RAM. Recomendado: 4 vCPU, 16 GB RAM para correr modelos 14B sin swap.
- Dominio apuntando al VPS con registros A y AAAA (IPv6).
- Acceso SSH con clave pública (no password).
- Docker + Docker Compose instalados (los instalamos si faltan).
2. Preparar el VPS
# Conectar al VPS
ssh usuario@tu-dominio.es
# Actualizar
sudo apt update && sudo apt upgrade -y
# Instalar Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# Cerrar sesión y volver a entrar para que aplique el grupo
# Instalar Docker Compose (viene con el paquete docker-compose-plugin)
sudo apt install -y docker-compose-plugin
docker compose version
3. Clonar el workspace
git clone https://git.d0a1.es/d0a1/workspace.git
cd workspace
ls -la
Encontrarás:
docker-compose.yml— orquestación de 15+ servicios..env.example— plantilla de variables de entorno.manage.sh— script de control (start / stop / logs / backup).README.md— documentación extendida.
4. Configurar variables de entorno
cp .env.example .env
nano .env
Las variables clave que tienes que rellenar:
# Dominio principal
DOMAIN=d0a1.es
ADMIN_EMAIL=hello@d0a1.es
# Base de datos (cambia las pass)
DB_PASSWORD=cambia-esto-ahora
DB_ROOT_PASSWORD=cambia-esto-tambien
# Ollama (modelo por defecto)
OLLAMA_DEFAULT_MODEL=llama3.1:8b
# SMTP (para emails salientes, si lo tienes)
SMTP_HOST=smtp.tu-proveedor.com
SMTP_PORT=587
SMTP_USER=hello@d0a1.es
SMTP_PASSWORD=tu-password
# Qdrant (vector store)
QDRANT_API_KEY=$(openssl rand -hex 32)
# Puerto SSH personalizado (recomendado para seguridad)
SSH_PORT=2222
5. Levantar el stack
./manage.sh start
Esto levanta, en orden:
- Red interna del proyecto
- PostgreSQL (datos estructurados)
- Redis (cache + object cache + sesiones)
- Qdrant (vector store)
- Ollama (LLM local — descarga el modelo por defecto)
- WordPress + php-fpm + WP-CLI
- n8n (automatizaciones)
- Open WebUI (interfaz chat con Ollama)
- Traefik (reverse proxy + HTTPS automático con Let’s Encrypt)
- Watchtower (auto-update de imágenes)
El primer arranque tarda 5-10 minutos (descarga de imágenes + modelo LLM). Los siguientes son segundos.
6. Verificar que todo funciona
./manage.sh status
# Verifica que todos los contenedores están "healthy"
curl -I https://$DOMAIN
# Debería devolver 200 OK con HTTPS
# Probar Ollama
curl http://localhost:11434/api/tags
# Lista los modelos descargados
# Probar Qdrant
curl http://localhost:6333/collections
# Lista las colecciones existentes
7. Post-instalación de WordPress
# Acceder al contenedor de WordPress
docker compose exec wordpress bash
# Instalar WP-CLI si no está
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
mv wp-cli.phar /usr/local/bin/wp
# Crear el usuario admin (reemplaza los valores)
wp user create admin admin@d0a1.es --role=administrator --user_pass="PassFuerte123!"
# Activar plugins base
wp plugin activate polylang redis-cache code-snippets wp-mail-smtp
# Configurar Polylang: ES como idioma por defecto
wp option update polylang 'a:2:{s:7:"default";s:2:"es";s:7:"languages";a:2:{i:0;a:5:{s:7:"locale";s:5:"es_ES";s:7:"name";s:8:"Español";s:7:"slug";s:2:"es";s:3:"rtl";i:0;s:13:"term_group";i:0;}i:1;a:5:{s:7:"locale";s:5:"en_US";s:7:"name";s:7:"English";s:7:"slug";s:2:"en";s:3:"rtl";i:0;s:13:"term_group";i:1;}}}' --format=transient
# Instalar tema d0a1-binary
wp theme install d0a1-binary --activate
# Instalar tema hijo (opcional pero recomendado)
wp scaffold child-theme d0a1-custom --parent_theme=d0a1-binary
wp theme activate d0a1-custom
8. Primeras automatizaciones
Con el stack funcionando, activa extensiones y workflows según necesites:
# Extensión: backups automáticos
docker compose exec wordpress wp plugin activate scheduled-backup
# Configura rclone apuntando a tu bucket B2
docker compose exec wordpress rclone config
# Skill: SEO operator
docker compose exec wordpress wp plugin activate seo-content-operator
# Workflow: publicación automática
# Activar vía n8n UI en https://$DOMAIN:5678
9. Hardening básico
- Cambiar el puerto SSH (ya hecho en
.env). - Desactivar login por password:
sudo sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config && sudo systemctl restart sshd - Configurar fail2ban para SSH y WordPress login.
- Activar UFW:
sudo ufw allow 80/tcp && sudo ufw allow 443/tcp && sudo ufw allow 2222/tcp && sudo ufw enable. - Rotar las claves API en el
.envcada 90 días.
10. Mantenimiento periódico
# Actualizar el stack completo
./manage.sh update
# Backup completo (DB + uploads)
./manage.sh backup
# Ver logs de todos los servicios
./manage.sh logs
# Ver uso de recursos
./manage.sh stats
Eso es todo. En menos de una hora tienes WordPress + Ollama + n8n + Qdrant + 15 servicios más corriendo bajo HTTPS, con backups automatizados y un panel de control unificado.
Si te atascas, abre issue en git.d0a1.es/d0a1/workspace o pregunta en el canal de soporte.
