- WordPress README: remove 'backups automatizado' claim - All READMEs: honest descriptions matching website landing pages - Replace Hetzner/Contabo affiliate links (broken/placeholder) with Vultr/DigitalOcean (active) - Fix /precios/ → /packs/ URL (404 redirect) - WordPress compose: require .env for passwords, no insecure defaults - Add .env.example template - INSTALL.md: updated with honest copy and Vultr/DO links - All deploy.sh banners: updated to match new honest copy
125 lines
5.5 KiB
Bash
Executable File
125 lines
5.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# ──────────────────────────────────────────────
|
|
# d0a1 pack — WordPress + IA
|
|
# Tu WordPress con IA local. Genera borradores, modera comentarios.
|
|
# ──────────────────────────────────────────────
|
|
# 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 .env for passwords ──────────────────────
|
|
if [ ! -f "$SCRIPT_DIR/.env" ]; then
|
|
echo -e "${YELLOW}⚠ No .env file found. Creating from .env.example..."
|
|
cp "$SCRIPT_DIR/.env.example" "$SCRIPT_DIR/.env"
|
|
echo -e "${YELLOW}⚠ Edit $SCRIPT_DIR/.env to set your own passwords before deploying to production."
|
|
echo -e "${CYAN} nano $SCRIPT_DIR/.env"${NC}
|
|
fi
|
|
|
|
# ── 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/vultr/ — Vultr"
|
|
echo -e " ${CYAN}https://d0a1.es/go/digitalocean/ — DigitalOcean ($200 credit)"
|
|
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/packs/${NC}"
|
|
echo "" |