commit cebeaa506948397ae91847f6817215d8f7f703d7 Author: devops Date: Fri Aug 7 23:51:57 2026 +0200 Initial commit: 4 deploy packs (Open WebUI, WordPress, Hermes Agent, OpenClaw) diff --git a/hermes/README.md b/hermes/README.md new file mode 100644 index 0000000..9c40c0a --- /dev/null +++ b/hermes/README.md @@ -0,0 +1,46 @@ +# Hermes Agent — Tu agente de IA + +Agente de IA que automatiza tareas desde el terminal o por mensajería (Telegram, etc.). + +## Qué es + +Hermes Agent es un agente de IA que vive en tu terminal. Ejecuta tareas, escribe código, gestiona archivos, automatiza workflows — todo desde la línea de comandos o conectado a Telegram. Usa modelos locales (Ollama) o remotos. + +## Prueba local (gratis) + +```bash +./deploy.sh local +``` + +El script instala Ollama (IA local) y Hermes Agent. Luego ejecuta: + +```bash +hermes setup # Configuración interactiva +hermes model # Elige modelo (Ollama ya está corriendo) +hermes gateway setup # Conecta mensajería (Telegram, etc.) +``` + +## Despliega en VPS + +```bash +./deploy.sh vps +``` + +Solo pagas el servidor. El agente es tuyo. + +**¿No tienes VPS?** Consigue uno con descuento: +- [Hetzner Cloud](https://d0a1.es/go/hetzner/) — desde ~4€/mes +- [Clouding.io](https://d0a1.es/go/clouding/) — servidor en España + +## Requisitos + +- Docker instalado (para Ollama) +- 4 GB RAM mínimo + +## Comandos + +```bash +./deploy.sh local # Arrancar en local +./deploy.sh vps # Arrancar en VPS +./deploy.sh stop # Parar Ollama +``` \ No newline at end of file diff --git a/hermes/deploy.sh b/hermes/deploy.sh new file mode 100755 index 0000000..04ccd11 --- /dev/null +++ b/hermes/deploy.sh @@ -0,0 +1,137 @@ +#!/bin/bash +# ────────────────────────────────────────────── +# d0a1 pack — Hermes Agent +# Agente de IA que automatiza tareas desde el terminal. +# ────────────────────────────────────────────── +# Local: ./deploy.sh local → terminal + http://localhost:11434 (Ollama) +# VPS: ./deploy.sh vps → + gateway accesible desde fuera +# Stop: ./deploy.sh stop → para Ollama +# ────────────────────────────────────────────── +set -e + +GREEN='\033[0;32m' +CYAN='\033[0;36m' +YELLOW='\033[0;33m' +RED='\033[0;31m' +BOLD='\033[1m' +NC='\033[0m' + +MODE="${1:-local}" +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" + +echo "" +echo -e "${BOLD}${CYAN}╔══════════════════════════════════════════╗${NC}" +echo -e "${BOLD}${CYAN}║ d0a1 pack — Hermes Agent ║${NC}" +echo -e "${BOLD}${CYAN}║ Tu agente de IA. Automatiza todo. ║${NC}" +echo -e "${BOLD}${CYAN}╚══════════════════════════════════════════╝${NC}" +echo "" + +# ── Stop mode ─────────────────────────────── +if [ "$MODE" = "stop" ]; then + if docker ps --format '{{.Names}}' | grep -q d0a1-hermes-ollama; then + docker stop d0a1-hermes-ollama && docker rm d0a1-hermes-ollama + echo -e "${GREEN}✓ Ollama parado.${NC}" + else + echo "Ollama no está corriendo." + fi + exit 0 +fi + +# ── Check Docker (for Ollama) ──────────────── +if ! command -v docker &>/dev/null; then + echo -e "${RED}✗ Docker no está instalado (necesario para Ollama).${NC}" + echo "Instálalo: curl -fsSL https://get.docker.com | sh" + exit 1 +fi +echo -e "${GREEN}✓${NC} Docker: $(docker --version 2>/dev/null | awk '{print $3}' | tr -d ',')" + +# ── Check RAM ─────────────────────────────── +TOTAL_RAM_KB=$(grep MemTotal /proc/meminfo 2>/dev/null | awk '{print $2}' || echo "0") +TOTAL_RAM_GB=$((TOTAL_RAM_KB / 1024 / 1024)) +if [ "$TOTAL_RAM_GB" -lt 3 ]; then + echo -e "${RED}✗ Se necesitan 4 GB de RAM mínimo (detectado: ${TOTAL_RAM_GB} GB).${NC}" + exit 1 +fi +echo -e "${GREEN}✓${NC} RAM: ${TOTAL_RAM_GB} GB" + +# ── Mode info ─────────────────────────────── +if [ "$MODE" = "vps" ]; then + echo -e "${YELLOW}Modo:${NC} VPS" + echo "" + echo -e " ${BOLD}¿No tienes VPS?${NC} Consigue uno con descuento:" + echo -e " ${CYAN}https://d0a1.es/go/hetzner/${NC} — Hetzner Cloud" + echo -e " ${CYAN}https://d0a1.es/go/clouding/${NC} — Clouding.io" + echo "" +elif [ "$MODE" != "local" ]; then + echo -e "${RED}Modo desconocido: $MODE${NC}" + echo "Usa: ./deploy.sh local | vps | stop" + exit 1 +fi +echo "" + +# ── 1. Arrancar Ollama (Docker) ────────────── +echo -e "${YELLOW}[1/3]${NC} Arrancando Ollama (IA local)..." +if ! docker ps --format '{{.Names}}' | grep -q d0a1-hermes-ollama; then + docker run -d --name d0a1-hermes-ollama \ + -p 11434:11434 \ + -v d0a1_hermes_ollama:/root/.ollama \ + -e OLLAMA_HOST=0.0.0.0 \ + --restart unless-stopped \ + ollama/ollama:0.30.8 +fi + +# Wait for Ollama +echo -e " Esperando a que Ollama arranque..." +MAX_WAIT=60 +WAITED=0 +until docker exec d0a1-hermes-ollama ollama ps &>/dev/null; do + sleep 2 + WAITED=$((WAITED + 2)) + if [ "$WAITED" -ge "$MAX_WAIT" ]; then + echo -e "${RED}✗ Ollama no arrancó. Revisa: docker logs d0a1-hermes-ollama${NC}" + exit 1 + fi +done +echo -e "${YELLOW} Descargando modelo (llama3.2:3b, ~2 GB)...${NC}" +docker exec d0a1-hermes-ollama ollama pull llama3.2:3b +echo -e "${GREEN}✓${NC} Ollama corriendo en http://localhost:11434" + +# ── 2. Instalar Hermes Agent ──────────────── +echo -e "${YELLOW}[2/3]${NC} Instalando Hermes Agent..." +if command -v hermes &>/dev/null; then + echo -e "${GREEN}✓${NC} Hermes Agent ya instalado: $(hermes --version 2>/dev/null || echo 'OK')" +else + curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash + export PATH="$HOME/.local/bin:$PATH" + if ! command -v hermes &>/dev/null; then + source ~/.bashrc 2>/dev/null || source ~/.zshrc 2>/dev/null || true + fi + if command -v hermes &>/dev/null; then + echo -e "${GREEN}✓${NC} Hermes Agent instalado: $(hermes --version 2>/dev/null || echo 'OK')" + else + echo -e "${RED}✗ Hermes Agent no se instaló. Instálalo manualmente:${NC}" + echo " curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash" + echo " source ~/.bashrc" + exit 1 + fi +fi + +# ── 3. Configurar ─────────────────────────── +echo -e "${YELLOW}[3/3]${NC} Configurando..." +echo "" +echo -e "${BOLD}Ejecuta estos comandos para terminar:${NC}" +echo "" +echo -e " ${CYAN}hermes setup${NC} — configuración interactiva" +echo -e " ${CYAN}hermes model${NC} — elige modelo (Ollama ya está corriendo)" +echo -e " ${CYAN}hermes gateway setup${NC} — conecta mensajería (Telegram, etc.)" +echo "" + +if [ "$MODE" = "vps" ]; then + echo -e " ${BOLD}Para VPS:${NC} configura el gateway para acceso remoto:" + echo -e " ${CYAN}hermes gateway setup --portal${NC}" + echo "" +fi + +echo -e " ${BOLD}Parar:${NC} ./deploy.sh stop" +echo -e " ${BOLD}¿Quieres más?${NC} ${CYAN}https://d0a1.es/precios/${NC}" +echo "" \ No newline at end of file diff --git a/openclaw/README.md b/openclaw/README.md new file mode 100644 index 0000000..b7ddc0a --- /dev/null +++ b/openclaw/README.md @@ -0,0 +1,50 @@ +# OpenClaw — Asistente en tus chats + +Asistente personal de IA que responde desde tus apps de chat (WhatsApp, Telegram, Signal, etc.). + +## Qué es + +OpenClaw es un asistente de IA open-source que corre en tu equipo o servidor y se conecta a tus apps de mensajería. Le escribes por WhatsApp o Telegram y te responde, ejecuta tareas, busca información — todo con IA local, sin que tus conversaciones salgan de tu servidor. + +## Prueba local (gratis) + +```bash +./deploy.sh local +``` + +El script instala Ollama (IA local) y OpenClaw. Luego ejecuta: + +```bash +openclaw onboard --install-daemon # Configuración inicial +openclaw gateway status # Verifica el gateway +openclaw dashboard # Abre la UI + +# Conecta tus chats: +openclaw channel add whatsapp +openclaw channel add telegram +``` + +## Despliega en VPS + +```bash +./deploy.sh vps +``` + +Solo pagas el servidor. El asistente es tuyo. + +**¿No tienes VPS?** Consigue uno con descuento: +- [Hetzner Cloud](https://d0a1.es/go/hetzner/) — desde ~4€/mes +- [Clouding.io](https://d0a1.es/go/clouding/) — servidor en España + +## Requisitos + +- Docker instalado (para Ollama) +- 4 GB RAM mínimo + +## Comandos + +```bash +./deploy.sh local # Arrancar en local +./deploy.sh vps # Arrancar en VPS +./deploy.sh stop # Parar Ollama +``` \ No newline at end of file diff --git a/openclaw/deploy.sh b/openclaw/deploy.sh new file mode 100755 index 0000000..222db0d --- /dev/null +++ b/openclaw/deploy.sh @@ -0,0 +1,140 @@ +#!/bin/bash +# ────────────────────────────────────────────── +# d0a1 pack — OpenClaw +# Asistente personal de IA en tus apps de chat. +# ────────────────────────────────────────────── +# Local: ./deploy.sh local → terminal + http://localhost:11434 (Ollama) +# VPS: ./deploy.sh vps → + gateway accesible desde fuera +# Stop: ./deploy.sh stop → para Ollama +# ────────────────────────────────────────────── +set -e + +GREEN='\033[0;32m' +CYAN='\033[0;36m' +YELLOW='\033[0;33m' +RED='\033[0;31m' +BOLD='\033[1m' +NC='\033[0m' + +MODE="${1:-local}" +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" + +echo "" +echo -e "${BOLD}${CYAN}╔══════════════════════════════════════════╗${NC}" +echo -e "${BOLD}${CYAN}║ d0a1 pack — OpenClaw ║${NC}" +echo -e "${BOLD}${CYAN}║ Tu asistente. En tus chats. ║${NC}" +echo -e "${BOLD}${CYAN}╚══════════════════════════════════════════╝${NC}" +echo "" + +# ── Stop mode ─────────────────────────────── +if [ "$MODE" = "stop" ]; then + if docker ps --format '{{.Names}}' | grep -q d0a1-openclaw-ollama; then + docker stop d0a1-openclaw-ollama && docker rm d0a1-openclaw-ollama + echo -e "${GREEN}✓ Ollama parado.${NC}" + else + echo "Ollama no está corriendo." + fi + exit 0 +fi + +# ── Check Docker (for Ollama) ──────────────── +if ! command -v docker &>/dev/null; then + echo -e "${RED}✗ Docker no está instalado (necesario para Ollama).${NC}" + echo "Instálalo: curl -fsSL https://get.docker.com | sh" + exit 1 +fi +echo -e "${GREEN}✓${NC} Docker: $(docker --version 2>/dev/null | awk '{print $3}' | tr -d ',')" + +# ── Check RAM ─────────────────────────────── +TOTAL_RAM_KB=$(grep MemTotal /proc/meminfo 2>/dev/null | awk '{print $2}' || echo "0") +TOTAL_RAM_GB=$((TOTAL_RAM_KB / 1024 / 1024)) +if [ "$TOTAL_RAM_GB" -lt 3 ]; then + echo -e "${RED}✗ Se necesitan 4 GB de RAM mínimo (detectado: ${TOTAL_RAM_GB} GB).${NC}" + exit 1 +fi +echo -e "${GREEN}✓${NC} RAM: ${TOTAL_RAM_GB} GB" + +# ── Mode info ─────────────────────────────── +if [ "$MODE" = "vps" ]; then + echo -e "${YELLOW}Modo:${NC} VPS" + echo "" + echo -e " ${BOLD}¿No tienes VPS?${NC} Consigue uno con descuento:" + echo -e " ${CYAN}https://d0a1.es/go/hetzner/${NC} — Hetzner Cloud" + echo -e " ${CYAN}https://d0a1.es/go/clouding/${NC} — Clouding.io" + echo "" +elif [ "$MODE" != "local" ]; then + echo -e "${RED}Modo desconocido: $MODE${NC}" + echo "Usa: ./deploy.sh local | vps | stop" + exit 1 +fi +echo "" + +# ── 1. Arrancar Ollama (Docker) ────────────── +echo -e "${YELLOW}[1/3]${NC} Arrancando Ollama (IA local)..." +if ! docker ps --format '{{.Names}}' | grep -q d0a1-openclaw-ollama; then + docker run -d --name d0a1-openclaw-ollama \ + -p 11434:11434 \ + -v d0a1_openclaw_ollama:/root/.ollama \ + -e OLLAMA_HOST=0.0.0.0 \ + --restart unless-stopped \ + ollama/ollama:0.30.8 +fi + +# Wait for Ollama +echo -e " Esperando a que Ollama arranque..." +MAX_WAIT=60 +WAITED=0 +until docker exec d0a1-openclaw-ollama ollama ps &>/dev/null; do + sleep 2 + WAITED=$((WAITED + 2)) + if [ "$WAITED" -ge "$MAX_WAIT" ]; then + echo -e "${RED}✗ Ollama no arrancó. Revisa: docker logs d0a1-openclaw-ollama${NC}" + exit 1 + fi +done +echo -e "${YELLOW} Descargando modelo (llama3.2:3b, ~2 GB)...${NC}" +docker exec d0a1-openclaw-ollama ollama pull llama3.2:3b +echo -e "${GREEN}✓${NC} Ollama corriendo en http://localhost:11434" + +# ── 2. Instalar OpenClaw ───────────────────── +echo -e "${YELLOW}[2/3]${NC} Instalando OpenClaw..." +if command -v openclaw &>/dev/null; then + echo -e "${GREEN}✓${NC} OpenClaw ya instalado: $(openclaw --version 2>/dev/null || echo 'OK')" +else + curl -fsSL https://openclaw.ai/install.sh | bash + export PATH="$HOME/.local/bin:$PATH" + if ! command -v openclaw &>/dev/null; then + source ~/.bashrc 2>/dev/null || source ~/.zshrc 2>/dev/null || true + fi + if command -v openclaw &>/dev/null; then + echo -e "${GREEN}✓${NC} OpenClaw instalado: $(openclaw --version 2>/dev/null || echo 'OK')" + else + echo -e "${RED}✗ OpenClaw no se instaló. Instálalo manualmente:${NC}" + echo " curl -fsSL https://openclaw.ai/install.sh | bash" + echo " source ~/.bashrc" + exit 1 + fi +fi + +# ── 3. Configurar ─────────────────────────── +echo -e "${YELLOW}[3/3]${NC} Configurando..." +echo "" +echo -e "${BOLD}Ejecuta estos comandos para terminar:${NC}" +echo "" +echo -e " ${CYAN}openclaw onboard --install-daemon${NC} — configuración inicial" +echo -e " ${CYAN}openclaw gateway status${NC} — verifica el gateway" +echo -e " ${CYAN}openclaw dashboard${NC} — abre la UI" +echo "" +echo -e " ${BOLD}Conecta tus chats (WhatsApp, Telegram, etc.):${NC}" +echo -e " ${CYAN}openclaw channel add whatsapp${NC}" +echo -e " ${CYAN}openclaw channel add telegram${NC}" +echo "" + +if [ "$MODE" = "vps" ]; then + echo -e " ${BOLD}Para VPS:${NC} configura el gateway para acceso remoto." + echo "" +fi + +echo -e " ${BOLD}Parar:${NC} ./deploy.sh stop" +echo -e " ${BOLD}¿Quieres más?${NC} ${CYAN}https://d0a1.es/precios/${NC}" +echo "" \ No newline at end of file diff --git a/openwebui/README.md b/openwebui/README.md new file mode 100644 index 0000000..7446984 --- /dev/null +++ b/openwebui/README.md @@ -0,0 +1,49 @@ +# Open WebUI — Chat con IA + +Chat con IA en tu navegador. Como ChatGPT, pero privado y gratis. + +## Qué es + +Open WebUI es una interfaz web para chatear con modelos de IA que corren en tu propio equipo o servidor. Tus conversaciones no salen de tu máquina. Sin cuenta, sin API key, sin cuota mensual. + +## Prueba local (gratis, 1 comando) + +```bash +./deploy.sh local +``` + +Abre http://localhost:3000 y empieza a chatear. + +## Despliega en VPS + +```bash +./deploy.sh vps +``` + +Solo pagas el servidor. La IA es tuya. + +**¿No tienes VPS?** Consigue uno con descuento: +- [Hetzner Cloud](https://d0a1.es/go/hetzner/) — desde ~4€/mes +- [Clouding.io](https://d0a1.es/go/clouding/) — servidor en España + +## Requisitos + +- Docker instalado +- 4 GB RAM mínimo + +## Modelos + +El modelo por defecto es `llama3.2:3b` (2 GB, corre en 4 GB RAM). + +```bash +docker exec d0a1-ollama ollama pull qwen2.5:7b # Mejor en español (5 GB RAM) +docker exec d0a1-ollama ollama pull llama3.1:8b # Más calidad (6 GB RAM) +``` + +## Comandos + +```bash +./deploy.sh local # Arrancar en local +./deploy.sh vps # Arrancar en VPS +./deploy.sh stop # Parar todo +``` \ No newline at end of file diff --git a/openwebui/deploy.sh b/openwebui/deploy.sh new file mode 100755 index 0000000..193229b --- /dev/null +++ b/openwebui/deploy.sh @@ -0,0 +1,112 @@ +#!/bin/bash +# ────────────────────────────────────────────── +# d0a1 pack — Open WebUI +# Chat con IA en tu navegador. Como ChatGPT, pero privado. +# ────────────────────────────────────────────── +# Local: ./deploy.sh local → http://localhost:3000 +# VPS: ./deploy.sh vps → http://TU_IP:3000 +# Stop: ./deploy.sh stop +# ────────────────────────────────────────────── +set -e + +GREEN='\033[0;32m' +CYAN='\033[0;36m' +YELLOW='\033[0;33m' +RED='\033[0;31m' +BOLD='\033[1m' +NC='\033[0m' + +MODE="${1:-local}" +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +COMPOSE_FILE="$SCRIPT_DIR/docker-compose.yml" + +echo "" +echo -e "${BOLD}${CYAN}╔══════════════════════════════════════════╗${NC}" +echo -e "${BOLD}${CYAN}║ d0a1 pack — Open WebUI ║${NC}" +echo -e "${BOLD}${CYAN}║ Chat con IA. Privado. Sin cuotas. ║${NC}" +echo -e "${BOLD}${CYAN}╚══════════════════════════════════════════╝${NC}" +echo "" + +# ── Stop mode ─────────────────────────────── +if [ "$MODE" = "stop" ]; then + echo -e "${YELLOW}Parando...${NC}" + docker compose -f "$COMPOSE_FILE" down + echo -e "${GREEN}✓ Parado.${NC}" + exit 0 +fi + +# ── Check Docker ──────────────────────────── +if ! command -v docker &>/dev/null; then + echo -e "${RED}✗ Docker no está instalado.${NC}" + echo "" + echo "Instálalo: curl -fsSL https://get.docker.com | sh" + exit 1 +fi +if ! docker compose version &>/dev/null; then + echo -e "${RED}✗ Docker Compose v2 no disponible.${NC}" + exit 1 +fi +echo -e "${GREEN}✓${NC} Docker: $(docker compose version --short 2>/dev/null || echo 'OK')" + +# ── Check RAM ─────────────────────────────── +TOTAL_RAM_KB=$(grep MemTotal /proc/meminfo 2>/dev/null | awk '{print $2}' || echo "0") +TOTAL_RAM_GB=$((TOTAL_RAM_KB / 1024 / 1024)) +if [ "$TOTAL_RAM_GB" -lt 3 ]; then + echo -e "${RED}✗ Se necesitan 4 GB de RAM mínimo (detectado: ${TOTAL_RAM_GB} GB).${NC}" + exit 1 +fi +echo -e "${GREEN}✓${NC} RAM: ${TOTAL_RAM_GB} GB" + +# ── Mode info ─────────────────────────────── +if [ "$MODE" = "local" ]; then + echo -e "${YELLOW}Modo:${NC} local (tu ordenador)" + echo -e " URL: ${CYAN}http://localhost:3000${NC}" +elif [ "$MODE" = "vps" ]; then + echo -e "${YELLOW}Modo:${NC} VPS (accesible desde fuera)" + echo -e " URL: ${CYAN}http://$(hostname -I 2>/dev/null | awk '{print $1}' || echo 'TU_IP'):3000${NC}" + echo "" + echo -e " ${BOLD}¿No tienes VPS?${NC} Consigue uno con descuento:" + echo -e " ${CYAN}https://d0a1.es/go/hetzner/${NC} — Hetzner Cloud" + echo -e " ${CYAN}https://d0a1.es/go/clouding/${NC} — Clouding.io" +else + echo -e "${RED}Modo desconocido: $MODE${NC}" + echo "Usa: ./deploy.sh local | vps | stop" + exit 1 +fi +echo "" + +# ── Deploy ────────────────────────────────── +echo -e "${YELLOW}Descargando contenedores (2-3 min la primera vez)...${NC}" +docker compose -f "$COMPOSE_FILE" up -d + +# ── Pull model ─────────────────────────────── +echo -e "${YELLOW}Descargando modelo de IA (llama3.2:3b, ~2 GB)...${NC}" +MAX_WAIT=60 +WAITED=0 +until docker exec d0a1-ollama ollama ps &>/dev/null; do + sleep 2 + WAITED=$((WAITED + 2)) + if [ "$WAITED" -ge "$MAX_WAIT" ]; then + echo -e "${RED}✗ Ollama no arrancó. Revisa: docker logs d0a1-ollama${NC}" + exit 1 + fi +done +docker exec d0a1-ollama ollama pull llama3.2:3b + +# ── Done ──────────────────────────────────── +echo "" +echo -e "${BOLD}${GREEN}¡Listo! Tu IA está corriendo.${NC}" +echo "" +if [ "$MODE" = "local" ]; then + echo -e " ${BOLD}Abre:${NC} ${CYAN}http://localhost:3000${NC}" +else + echo -e " ${BOLD}Abre:${NC} ${CYAN}http://$(hostname -I 2>/dev/null | awk '{print $1}' || echo 'TU_IP'):3000${NC}" +fi +echo "" +echo -e " ${BOLD}Modelos alternativos:${NC}" +echo " docker exec d0a1-ollama ollama pull qwen2.5:7b # Mejor en español" +echo " docker exec d0a1-ollama ollama pull llama3.1:8b # Más calidad" +echo "" +echo -e " ${BOLD}Parar:${NC} ./deploy.sh stop" +echo -e " ${BOLD}¿Quieres más?${NC} ${CYAN}https://d0a1.es/precios/${NC}" +echo "" \ No newline at end of file diff --git a/openwebui/docker-compose.yml b/openwebui/docker-compose.yml new file mode 100644 index 0000000..ca7adad --- /dev/null +++ b/openwebui/docker-compose.yml @@ -0,0 +1,58 @@ +# d0a1 pack — Open WebUI +# Chat con IA en tu navegador. Como ChatGPT, pero privado. +# +# Local: ./deploy.sh local → http://localhost:3000 +# VPS: ./deploy.sh vps → http://TU_IP:3000 +# +# Requisitos: Docker + 4 GB RAM mínimo +# Incluye: Ollama (IA local) + Open WebUI (interfaz web) +# Modelo por defecto: llama3.2:3b (~2 GB, corre en 4 GB RAM) +services: + ollama: + container_name: d0a1-ollama + image: ollama/ollama:0.30.8 + restart: unless-stopped + ports: + - "11434:11434" + volumes: + - ollama_data:/root/.ollama + environment: + OLLAMA_HOST: "0.0.0.0" + OLLAMA_KEEP_ALIVE: "5m" + OLLAMA_NUM_PARALLEL: "1" + healthcheck: + test: ["CMD", "ollama", "ps"] + interval: 15s + timeout: 5s + retries: 10 + start_period: 30s + + openwebui: + container_name: d0a1-openwebui + image: ghcr.io/open-webui/open-webui:0.6.15 + restart: unless-stopped + ports: + - "3000:8080" + volumes: + - openwebui_data:/app/backend/data + environment: + OLLAMA_BASE_URL: "http://ollama:11434" + WEBUI_NAME: "d0a1" + WEBUI_AUTH: "false" + DEFAULT_LOCALE: "es" + ENABLE_SIGNUP: "true" + ENABLE_WEB_SEARCH: "false" + ENABLE_DIRECT_CONNECTIONS: "false" + depends_on: + ollama: + condition: service_healthy + deploy: + resources: + limits: + memory: 2G + +volumes: + ollama_data: + driver: local + openwebui_data: + driver: local \ No newline at end of file diff --git a/wordpress/README.md b/wordpress/README.md new file mode 100644 index 0000000..acfa2a6 --- /dev/null +++ b/wordpress/README.md @@ -0,0 +1,50 @@ +# WordPress Agéntico — WP + IA local + +Tu WordPress con IA local conectada. Posts SEO, moderación, backups — automatizado. + +## Qué es + +WordPress corriendo en tu servidor con Ollama (IA local) y Open WebUI conectados. Instalas el plugin AI Agent Bridge y tienes un WordPress que genera contenido, optimiza SEO, modera comentarios y hace backups — todo con IA local, sin API de terceros. + +## Prueba local (gratis, 1 comando) + +```bash +./deploy.sh local +``` + +- WordPress: http://localhost:8080 +- IA (chat): http://localhost:3000 + +Sigue el asistente de instalación de WordPress (2 minutos), luego instala el plugin AI Agent Bridge desde el panel. + +## Despliega en VPS + +```bash +./deploy.sh vps +``` + +Solo pagas el servidor. WordPress y la IA son tuyos. + +**¿No tienes VPS?** Consigue uno con descuento: +- [Hetzner Cloud](https://d0a1.es/go/hetzner/) — desde ~4€/mes +- [Clouding.io](https://d0a1.es/go/clouding/) — servidor en España + +## Requisitos + +- Docker instalado +- 6 GB RAM mínimo + +## Qué incluye + +- WordPress 6.9 + PHP 8.3 +- MariaDB 11.4 +- Ollama (IA local, modelo llama3.2:3b por defecto) +- Open WebUI (interfaz de chat) + +## Comandos + +```bash +./deploy.sh local # Arrancar en local +./deploy.sh vps # Arrancar en VPS +./deploy.sh stop # Parar todo +``` \ No newline at end of file diff --git a/wordpress/deploy.sh b/wordpress/deploy.sh new file mode 100755 index 0000000..2a7740b --- /dev/null +++ b/wordpress/deploy.sh @@ -0,0 +1,117 @@ +#!/bin/bash +# ────────────────────────────────────────────── +# d0a1 pack — WordPress Agéntico +# Tu WordPress con IA local. Posts SEO, moderación, backups. +# ────────────────────────────────────────────── +# Local: ./deploy.sh local → http://localhost:8080 +# VPS: ./deploy.sh vps → http://TU_IP:8080 +# Stop: ./deploy.sh stop +# ────────────────────────────────────────────── +set -e + +GREEN='\033[0;32m' +CYAN='\033[0;36m' +YELLOW='\033[0;33m' +RED='\033[0;31m' +BOLD='\033[1m' +NC='\033[0m' + +MODE="${1:-local}" +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +COMPOSE_FILE="$SCRIPT_DIR/docker-compose.yml" + +echo "" +echo -e "${BOLD}${CYAN}╔══════════════════════════════════════════╗${NC}" +echo -e "${BOLD}${CYAN}║ d0a1 pack — WordPress Agéntico ║${NC}" +echo -e "${BOLD}${CYAN}║ WP + IA local. Sin cuotas. ║${NC}" +echo -e "${BOLD}${CYAN}╚══════════════════════════════════════════╝${NC}" +echo "" + +# ── Stop mode ─────────────────────────────── +if [ "$MODE" = "stop" ]; then + echo -e "${YELLOW}Parando...${NC}" + docker compose -f "$COMPOSE_FILE" down + echo -e "${GREEN}✓ Parado.${NC}" + exit 0 +fi + +# ── Check Docker ──────────────────────────── +if ! command -v docker &>/dev/null; then + echo -e "${RED}✗ Docker no está instalado.${NC}" + echo "Instálalo: curl -fsSL https://get.docker.com | sh" + exit 1 +fi +if ! docker compose version &>/dev/null; then + echo -e "${RED}✗ Docker Compose v2 no disponible.${NC}" + exit 1 +fi +echo -e "${GREEN}✓${NC} Docker: $(docker compose version --short 2>/dev/null || echo 'OK')" + +# ── Check RAM ─────────────────────────────── +TOTAL_RAM_KB=$(grep MemTotal /proc/meminfo 2>/dev/null | awk '{print $2}' || echo "0") +TOTAL_RAM_GB=$((TOTAL_RAM_KB / 1024 / 1024)) +if [ "$TOTAL_RAM_GB" -lt 5 ]; then + echo -e "${RED}✗ Se necesitan 6 GB de RAM mínimo (detectado: ${TOTAL_RAM_GB} GB).${NC}" + exit 1 +fi +echo -e "${GREEN}✓${NC} RAM: ${TOTAL_RAM_GB} GB" + +# ── Mode info ─────────────────────────────── +if [ "$MODE" = "local" ]; then + echo -e "${YELLOW}Modo:${NC} local (tu ordenador)" + echo -e " WordPress: ${CYAN}http://localhost:8080${NC}" + echo -e " IA (chat): ${CYAN}http://localhost:3000${NC}" +elif [ "$MODE" = "vps" ]; then + IP=$(hostname -I 2>/dev/null | awk '{print $1}' || echo 'TU_IP') + echo -e "${YELLOW}Modo:${NC} VPS (accesible desde fuera)" + echo -e " WordPress: ${CYAN}http://${IP}:8080${NC}" + echo -e " IA (chat): ${CYAN}http://${IP}:3000${NC}" + echo "" + echo -e " ${BOLD}¿No tienes VPS?${NC} Consigue uno con descuento:" + echo -e " ${CYAN}https://d0a1.es/go/hetzner/${NC} — Hetzner Cloud" + echo -e " ${CYAN}https://d0a1.es/go/clouding/${NC} — Clouding.io" +else + echo -e "${RED}Modo desconocido: $MODE${NC}" + echo "Usa: ./deploy.sh local | vps | stop" + exit 1 +fi +echo "" + +# ── Deploy ────────────────────────────────── +echo -e "${YELLOW}Descargando contenedores (3-5 min la primera vez)...${NC}" +docker compose -f "$COMPOSE_FILE" up -d + +# ── Pull model ─────────────────────────────── +echo -e "${YELLOW}Descargando modelo de IA (llama3.2:3b, ~2 GB)...${NC}" +MAX_WAIT=60 +WAITED=0 +until docker exec d0a1-wp-ollama ollama ps &>/dev/null; do + sleep 2 + WAITED=$((WAITED + 2)) + if [ "$WAITED" -ge "$MAX_WAIT" ]; then + echo -e "${RED}✗ Ollama no arrancó. Revisa: docker logs d0a1-wp-ollama${NC}" + exit 1 + fi +done +docker exec d0a1-wp-ollama ollama pull llama3.2:3b + +# ── Done ──────────────────────────────────── +echo "" +echo -e "${BOLD}${GREEN}¡Listo! Tu WordPress con IA está corriendo.${NC}" +echo "" +if [ "$MODE" = "local" ]; then + echo -e " ${BOLD}WordPress:${NC} ${CYAN}http://localhost:8080${NC}" + echo -e " ${BOLD}IA (chat):${NC} ${CYAN}http://localhost:3000${NC}" +else + echo -e " ${BOLD}WordPress:${NC} ${CYAN}http://${IP}:8080${NC}" + echo -e " ${BOLD}IA (chat):${NC} ${CYAN}http://${IP}:3000${NC}" +fi +echo "" +echo -e " ${BOLD}Configurar WordPress:${NC}" +echo " 1. Abre la URL de WordPress en tu navegador" +echo " 2. Sigue el asistente de instalación (2 minutos)" +echo " 3. Instala el plugin 'AI Agent Bridge' desde el panel" +echo "" +echo -e " ${BOLD}Parar:${NC} ./deploy.sh stop" +echo -e " ${BOLD}¿Quieres más?${NC} ${CYAN}https://d0a1.es/precios/${NC}" +echo "" \ No newline at end of file diff --git a/wordpress/docker-compose.yml b/wordpress/docker-compose.yml new file mode 100644 index 0000000..824e354 --- /dev/null +++ b/wordpress/docker-compose.yml @@ -0,0 +1,92 @@ +# d0a1 pack — WordPress Agéntico +# Tu WordPress con IA local conectada. Posts SEO, moderación, backups — automatizado. +# +# Local: ./deploy.sh local → http://localhost:8080 +# VPS: ./deploy.sh vps → http://TU_IP:8080 +# +# Requisitos: Docker + 6 GB RAM mínimo +# Incluye: WordPress + MariaDB + Ollama + Open WebUI +services: + db: + container_name: d0a1-wp-db + image: mariadb:11.4 + restart: unless-stopped + volumes: + - wp_db:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-d0a1root} + MYSQL_DATABASE: wordpress + MYSQL_USER: wordpress + MYSQL_PASSWORD: ${MYSQL_PASSWORD:-d0a1pass} + healthcheck: + test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] + interval: 15s + timeout: 5s + retries: 10 + start_period: 20s + + wordpress: + container_name: d0a1-wp + image: wordpress:6.9-php8.3-apache + restart: unless-stopped + ports: + - "8080:80" + volumes: + - wp_data:/var/www/html + environment: + WORDPRESS_DB_HOST: db:3306 + WORDPRESS_DB_NAME: wordpress + WORDPRESS_DB_USER: wordpress + WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD:-d0a1pass} + depends_on: + db: + condition: service_healthy + + ollama: + container_name: d0a1-wp-ollama + image: ollama/ollama:0.30.8 + restart: unless-stopped + ports: + - "127.0.0.1:11434:11434" + volumes: + - ollama_data:/root/.ollama + environment: + OLLAMA_HOST: "0.0.0.0" + OLLAMA_KEEP_ALIVE: "5m" + healthcheck: + test: ["CMD", "ollama", "ps"] + interval: 15s + timeout: 5s + retries: 10 + start_period: 30s + + openwebui: + container_name: d0a1-wp-openwebui + image: ghcr.io/open-webui/open-webui:0.6.15 + restart: unless-stopped + ports: + - "3000:8080" + volumes: + - openwebui_data:/app/backend/data + environment: + OLLAMA_BASE_URL: "http://ollama:11434" + WEBUI_NAME: "d0a1" + WEBUI_AUTH: "false" + DEFAULT_LOCALE: "es" + depends_on: + ollama: + condition: service_healthy + deploy: + resources: + limits: + memory: 2G + +volumes: + wp_db: + driver: local + wp_data: + driver: local + ollama_data: + driver: local + openwebui_data: + driver: local \ No newline at end of file