feat: pack wordpress con IA nativa de WP 7.1 — fuera Open WebUI (#26)

Co-authored-by: Hermes Agent <hermes@d0a1.es>
This commit was merged in pull request #26.
This commit is contained in:
hermes authored and Hermes committed 2026-09-12 23:49:11 +02:00
1 parent 9438b75c9f
commit b3c2098d10
10 files changed
+144 -71

No files matched your search

+63 -15
View File
@@ -137,15 +137,13 @@ if (-not $HasGpu) {
cmd /c docker compose -f $ComposeFile down '>' NUL '2>&1'
Info 'Deploy previo detenido (down; volumenes con el modelo intactos).'
$OllamaPort = Find-FreePort 11434
$OllamaPort = $null # Ollama ya no publica puerto: solo lo usa WP por la red interna
$WpPort = Find-FreePort 8080
$WebUiPort = Find-FreePort 3000
# --- Mode info ------------------------------------------------------------
if ($Mode -eq 'local') {
Warn 'Modo: local (tu ordenador)'
Write-Host " WordPress: ${Cyan}http://localhost:${WpPort}${NC}"
Write-Host " IA (chat): ${Cyan}http://localhost:${WebUiPort}${NC}"
} else {
Warn 'Modo: VPS (accesible desde fuera)'
# IP real de LAN: la de la interfaz con la ruta por defecto (evita
@@ -157,24 +155,19 @@ if ($Mode -eq 'local') {
Select-Object -First 1).IPAddress
if (-not $Ip) { $Ip = 'TU_IP' }
Write-Host " WordPress: ${Cyan}http://${Ip}:${WpPort}${NC}"
Write-Host " IA (chat): ${Cyan}http://${Ip}:${WebUiPort}${NC}"
Write-Host ''
Write-Host " ${Bold}¿No tienes VPS?${NC} Consigue uno con descuento:"
Write-Host " ${Cyan}https://d0a1.es/go/vultr/${NC} - Vultr"
Write-Host " ${Cyan}https://d0a1.es/go/digitalocean/${NC} - DigitalOcean (`$200 credit)"
}
if ($OllamaPort -ne 11434) { Warn "Puerto 11434 ocupado, usando $OllamaPort" }
if ($WpPort -ne 8080) { Warn "Puerto 8080 ocupado, usando $WpPort" }
if ($WebUiPort -ne 3000) { Warn "Puerto 3000 ocupado, usando $WebUiPort" }
if ($WpPort -ne 8080) { Warn "Puerto 8080 ocupado, usando $WpPort" }
Write-Host ''
# --- Deploy ----------------------------------------------------------------
Warn 'Descargando contenedores (3-5 min la primera vez)...'
cmd /c docker compose -f $ComposeFile down '>' NUL '2>&1'
$env:OLLAMA_PORT = "$OllamaPort"
$env:WP_PORT = "$WpPort"
$env:WEBUI_PORT = "$WebUiPort"
$ComposeArgs = @('-f', $ComposeFile)
if ($HasGpu) {
$OverrideFile = Join-Path $ScriptDir 'docker-compose.gpu.yml'
@@ -258,19 +251,74 @@ cmd /c docker exec d0a1-wp-ollama sh -c 'ollama run qwen3:4b ""' '>' NUL '2>&1'
# --- Done -------------------------------------------------------------------
Write-Host ''
Info 'Listo! Tu WordPress con IA esta corriendo.'
Write-Host ''
# --- Auto-config WordPress: plugins IA + conexion a Ollama -------------------
# EAP=Continue: los 2>$null sobre nativos con EAP=Stop provocan NativeCommandError
# terminante (PS #4002, ver nota arriba). El bloque nuevo maneja errores por rc.
$PrevEap = $ErrorActionPreference
$ErrorActionPreference = 'Continue'
# El contenedor wordpress:7.1 no trae WP-CLI; usar el contenedor wordpress:cli.
Info 'Configurando los plugins de IA en WordPress (1-2 min la primera vez)...'
cmd /c "docker pull wordpress:cli >NUL 2>&1"
# Red real del compose (el nombre depende del directorio, no es fijo):
$WpNet = docker inspect d0a1-wp --format '{{range $k,$_ := .NetworkSettings.Networks}}{{$k}}{{end}}' 2>$null
if (-not $WpNet) {
Warn 'No se detecto la red del compose (d0a1-wp no corre). Saltando autoconfig.'
$ErrorActionPreference = $PrevEap
exit 1
}
$EnvFileContent = Get-Content $EnvFile -ErrorAction SilentlyContinue
$WpDbPass = ($EnvFileContent | Where-Object { $_ -like 'MYSQL_PASSWORD=*' }) -replace '^MYSQL_PASSWORD=', '' | Select-Object -First 1
if (-not $WpDbPass) { $WpDbPass = 'change-me-to-a-strong-password' }
function Invoke-WpCli {
# docker run con --volumes-from (mismo patron env que usa el compose).
$ArgsList = @('run', '--rm', '--network', $WpNet, '--volumes-from', 'd0a1-wp',
'--env', "WORDPRESS_DB_HOST=db:3306",
'--env', 'WORDPRESS_DB_NAME=wordpress',
'--env', 'WORDPRESS_DB_USER=wordpress',
'--env', "WORDPRESS_DB_PASSWORD=$WpDbPass",
'wordpress:cli') + $Args + @('--allow-root')
& docker @ArgsList 2>$null
return $LASTEXITCODE
}
# Esperar a que WP este instalado (asistente del navegador opcional: si el
# usuario aun no instalo WP, la autoconfig se salta y puede repetir deploy).
$WpReady = $false
for ($i = 0; $i -lt 15; $i++) {
if ((Invoke-WpCli 'core' 'is-installed') -eq 0) { $WpReady = $true; break }
Start-Sleep -Seconds 4
}
if ($WpReady) {
$Rc = Invoke-WpCli 'plugin' 'install' 'ai' 'ai-provider-for-ollama' '--activate'
if ($Rc -eq 0) {
$Rc = Invoke-WpCli 'option' 'update' 'ai_provider_for_ollama_settings' '{"host":"http://ollama:11434"}' '--format=json'
}
if ($Rc -eq 0) {
Ok 'Plugins de IA activados y conectados a Ollama (IA local)'
} else {
Warn 'No se pudo auto-configurar. Re-ejecuta .\deploy.ps1 tras el asistente de WordPress.'
}
} else {
Warn 'WordPress aun no esta instalado. Tras el asistente del navegador,'
Warn 'vuelve a ejecutar .\deploy.ps1 y los plugins de IA se configuran solos.'
}
$ErrorActionPreference = $PrevEap
Write-Host ''
if ($Mode -eq 'local') {
Write-Host " ${Bold}WordPress:${NC} ${Cyan}http://localhost:${WpPort}${NC}"
Write-Host " ${Bold}IA (chat):${NC} ${Cyan}http://localhost:${WebUiPort}${NC}"
} else {
Write-Host " ${Bold}WordPress:${NC} ${Cyan}http://${Ip}:${WpPort}${NC}"
Write-Host " ${Bold}IA (chat):${NC} ${Cyan}http://${Ip}:${WebUiPort}${NC}"
}
Write-Host ''
Write-Host " ${Bold}Configurar WordPress:${NC}"
Write-Host ' 1. Abre la URL de WordPress en tu navegador'
Write-Host ' 2. Sigue el asistente de instalacion (2 minutos)'
Write-Host " 3. Instala el plugin 'AI Agent Bridge' desde el panel"
Write-Host " ${Bold}IA integrada en el editor:${NC} titulos sugeridos, extractos, alt text"
Write-Host ' y moderacion de comentarios con tu modelo local (qwen3:4b).'
Write-Host " Configuracion en ${Bold}Ajustes - Connectors${NC} dentro de WordPress."
Write-Host ''
Write-Host " ${Bold}Parar:${NC} .\deploy.ps1 stop"
Write-Host " ${Bold}¿Quieres mas?${NC} ${Cyan}https://d0a1.es/packs/${NC}"