Blog

Tutorial: Despliega el stack d0a1 en 30 minutos (paso a paso)

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:

  1. Red interna del proyecto
  2. PostgreSQL (datos estructurados)
  3. Redis (cache + object cache + sesiones)
  4. Qdrant (vector store)
  5. Ollama (LLM local — descarga el modelo por defecto)
  6. WordPress + php-fpm + WP-CLI
  7. n8n (automatizaciones)
  8. Open WebUI (interfaz chat con Ollama)
  9. Traefik (reverse proxy + HTTPS automático con Let’s Encrypt)
  10. 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 .env cada 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.