OpenClaw all-in-one: 1-click setup con free-ide-proxy (modelo deepseek-v4-flash-free)
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
# OpenClaw All-in-One 🦞
|
||||
|
||||
Setup de **1 click** para [OpenClaw](https://github.com/openclaw/openclaw) pre-configurado
|
||||
con tu propio modelo a través de tu propio proxy **OpenAI-compatible**
|
||||
([free-ide-proxy](https://gitea.cbcren.online/renato97/free-ide-proxy)).
|
||||
|
||||
Instala y deja corriendo, sin pedir nada:
|
||||
|
||||
| Componente | Detalle |
|
||||
|---|---|
|
||||
| `openclaw` CLI + Gateway | daemon systemd de usuario (`openclaw-gateway.service`) |
|
||||
| `free-ide-proxy` | endpoint OpenAI/Anthropic local `127.0.0.1:6446` (binario precompilado o build desde fuente) |
|
||||
| Config pre-cargada | `~/.openclaw/openclaw.json` apuntando a `free-ide/<modelo>` |
|
||||
|
||||
## Instalación (1 click)
|
||||
|
||||
```bash
|
||||
curl -fsSL https://gitea.cbcren.online/renato97/openclaw-allinone/raw/branch/main/install.sh | bash
|
||||
```
|
||||
|
||||
Requiere: Linux o macOS, `curl`, y `sudo` para `loginctl enable-linger`
|
||||
(no pedido si el usuario ya tiene los servicios de usuario).
|
||||
|
||||
### Overrides (variables de entorno)
|
||||
|
||||
```bash
|
||||
# otro modelo de los 9 del proxy
|
||||
MODEL=mimo-v2.5-free curl -fsSL https://gitea.cbcren.online/renato97/openclaw-allinone/raw/branch/main/install.sh | bash
|
||||
|
||||
# con tu propia clave de proxy
|
||||
PROXY_API_KEY=mi-secreto curl -fsSL ... | bash
|
||||
```
|
||||
|
||||
| Var | Default | Qué hace |
|
||||
|---|---|---|
|
||||
| `MODEL` | `deepseek-v4-flash-free` | modelo por defecto del agente |
|
||||
| `PROXY_API_KEY` | embebida (solo local) | clave que protege el proxy |
|
||||
| `GATEWAY_PORT` | `18789` | puerto del gateway de OpenClaw |
|
||||
| `GITEA_URL` / `GITEA_USER` | `https://gitea.cbcren.online` / `renato97` | de dónde baja el proxy |
|
||||
|
||||
## Qué hace el script
|
||||
|
||||
1. Instala `openclaw` (npm si hay Node ≥22, si no el installer oficial que provee Node).
|
||||
2. Instala `free-ide-proxy` (binario `linux-amd64` del release, o compila con Go en otras arquitecturas).
|
||||
3. Escribe `~/.openclaw/openclaw.json` ya configurado (provider `free-ide` → `127.0.0.1:6446/v1`).
|
||||
4. Activa `loginctl enable-linger` y arranca ambos servicios de systemd de usuario.
|
||||
5. Verifica `/health` del proxy y hace una inferencia de prueba con el agente.
|
||||
|
||||
Es **idempotente**: si ya hay un proxy en `:6446` o una config existente, los respeta
|
||||
(hace backup de la config y reutiliza el token del gateway).
|
||||
|
||||
## Uso
|
||||
|
||||
```bash
|
||||
openclaw chat # TUI de chat
|
||||
openclaw gateway status # estado del gateway
|
||||
openclaw dashboard # Control UI
|
||||
systemctl --user status openclaw-gateway free-ide-proxy
|
||||
```
|
||||
|
||||
## Desinstalar
|
||||
|
||||
```bash
|
||||
curl -fsSL https://gitea.cbcren.online/renato97/openclaw-allinone/raw/branch/main/uninstall.sh | bash
|
||||
```
|
||||
|
||||
## Notas de seguridad
|
||||
|
||||
- El gateway escucha solo en loopback y usa auth por token.
|
||||
- La `PROXY_API_KEY` solo protege el acceso al proxy local; los modelos upstream son públicos.
|
||||
- Para cambiar de modelo después: `openclaw config set models.providers.free-ide ...` o re-corré el script con `MODEL=...`.
|
||||
|
||||
## Ver también
|
||||
|
||||
- [free-ide-proxy](https://gitea.cbcren.online/renato97/free-ide-proxy) — el proxy (Go stdlib)
|
||||
- [OpenClaw docs](https://docs.openclaw.ai)
|
||||
+220
@@ -0,0 +1,220 @@
|
||||
#!/usr/bin/env bash
|
||||
# =============================================================================
|
||||
# OpenClaw All-in-One — instalación en 1 click
|
||||
# =============================================
|
||||
# Instala y pre-configura:
|
||||
# • openclaw (CLI + Gateway daemon, systemd usuario)
|
||||
# • free-ide-proxy (endpoint OpenAI-compatible local en 127.0.0.1:6446)
|
||||
# Con el modelo por defecto deepseek-v4-flash-free apuntando a TU proxy.
|
||||
#
|
||||
# Uso (Linux/macOS):
|
||||
# curl -fsSL https://gitea.cbcren.online/renato97/openclaw-allinone/raw/branch/main/install.sh | bash
|
||||
#
|
||||
# Variables de entorno opcionales (override):
|
||||
# MODEL modelo a usar (default: deepseek-v4-flash-free)
|
||||
# PROXY_API_KEY clave del proxy (default: embebida, local-only)
|
||||
# GATEWAY_PORT puerto del gateway de openclaw (default: 18789)
|
||||
# GITEA_URL base de tu Gitea (default: https://gitea.cbcren.online/)
|
||||
# GITEA_USER usuario de tu Gitea (default: renato97)
|
||||
# =============================================================================
|
||||
set -euo pipefail
|
||||
|
||||
log() { echo -e "\033[1;34m[openclaw]\033[0m $*"; }
|
||||
warn() { echo -e "\033[1;33m[openclaw]\033[0m $*"; }
|
||||
die() { echo -e "\033[1;31m[openclaw]\033[0m ERROR: $*" >&2; exit 1; }
|
||||
|
||||
# ---------------- Configurables (env override) ----------------
|
||||
MODEL="${MODEL:-deepseek-v4-flash-free}"
|
||||
PROXY_API_KEY="${PROXY_API_KEY:-tw0rxo314kvga9lfbp2nj5sde7hiq6uc}"
|
||||
GATEWAY_PORT="${GATEWAY_PORT:-18789}"
|
||||
PROXY_PORT="${PROXY_PORT:-6446}"
|
||||
GITEA_URL="${GITEA_URL:-https://gitea.cbcren.online}"
|
||||
GITEA_USER="${GITEA_USER:-renato97}"
|
||||
PROXY_REPO="${PROXY_REPO:-free-ide-proxy}"
|
||||
PROXY_VERSION="${PROXY_VERSION:-v1.0.0}"
|
||||
OPENCLAW_VER="${OPENCLAW_VER:-2026.7.1-2}"
|
||||
|
||||
# Normalizar GITEA_URL (sin barra final)
|
||||
GITEA_URL="${GITEA_URL%/}"
|
||||
|
||||
export PATH="$HOME/.local/bin:$HOME/.openclaw/bin:/usr/local/bin:$PATH"
|
||||
|
||||
# ---------------- Detectar OS / arch ----------------
|
||||
OS="$(uname -s)"
|
||||
case "$OS" in
|
||||
Linux) OS=linux ;;
|
||||
Darwin) OS=darwin ;;
|
||||
*) die "Sistema operativo no soportado: $OS (se requiere Linux o macOS)" ;;
|
||||
esac
|
||||
case "$(uname -m)" in
|
||||
x86_64|amd64) ARCH=amd64 ;;
|
||||
aarch64|arm64) ARCH=arm64 ;;
|
||||
*) ARCH=source ;;
|
||||
esac
|
||||
log "OS=$OS arch=$(uname -m) modelo=$MODEL gateway=:$GATEWAY_PORT proxy=:$PROXY_PORT"
|
||||
|
||||
# ---------------- 1) openclaw ----------------
|
||||
if command -v openclaw >/dev/null 2>&1; then
|
||||
log "openclaw ya instalado: $(openclaw --version 2>&1 | head -1)"
|
||||
elif command -v npm >/dev/null 2>&1 && [ "$(node --version 2>/dev/null | sed -E 's/[^0-9.]//g' | cut -d. -f1)" -ge 22 ]; then
|
||||
log "Instalando openclaw via npm (node >=22)..."
|
||||
npm install -g "openclaw@${OPENCLAW_VER}"
|
||||
else
|
||||
log "Instalando openclaw (installer oficial, provee Node si hace falta)..."
|
||||
curl -fsSL https://openclaw.ai/install.sh | bash
|
||||
fi
|
||||
command -v openclaw >/dev/null 2>&1 || die "openclaw no quedó disponible en PATH"
|
||||
OPENCLAW_BIN="$(command -v openclaw)"
|
||||
|
||||
# ---------------- 2) free-ide-proxy ----------------
|
||||
PROXY_OK=0
|
||||
if curl -fsS "http://127.0.0.1:${PROXY_PORT}/health" >/dev/null 2>&1; then
|
||||
log "free-ide-proxy ya responde en :${PROXY_PORT} — se omite su instalación"
|
||||
PROXY_OK=1
|
||||
fi
|
||||
|
||||
if [ "$PROXY_OK" -eq 0 ]; then
|
||||
PROXY_BIN="$HOME/.local/bin/free-ide-proxy"
|
||||
mkdir -p "$HOME/.local/bin"
|
||||
if [ "$OS" = "linux" ] && [ "$ARCH" = "amd64" ]; then
|
||||
ASSET="free-ide-proxy-linux-amd64"
|
||||
log "Descargando free-ide-proxy ${PROXY_VERSION} (${ASSET}) desde tu Gitea..."
|
||||
curl -fsSL "${GITEA_URL}/${GITEA_USER}/${PROXY_REPO}/releases/download/${PROXY_VERSION}/${ASSET}" -o "$PROXY_BIN"
|
||||
chmod +x "$PROXY_BIN"
|
||||
else
|
||||
warn "No hay binario precompilado para $OS/$ARCH — compilando desde fuente (requiere Go 1.22+)..."
|
||||
command -v go >/dev/null 2>&1 || die "Go no está instalado. Instala Go 1.22+ o usa Linux/amd64 con el binario precompilado."
|
||||
TMP="$(mktemp -d)"
|
||||
git clone --depth 1 "${GITEA_URL}/${GITEA_USER}/${PROXY_REPO}.git" "$TMP/proxy"
|
||||
(cd "$TMP/proxy" && go build -o "$PROXY_BIN" .)
|
||||
rm -rf "$TMP"
|
||||
fi
|
||||
|
||||
# systemd unit a nivel usuario (no requiere root)
|
||||
mkdir -p "$HOME/.config/systemd/user"
|
||||
cat > "$HOME/.config/systemd/user/free-ide-proxy.service" <<UNIT
|
||||
[Unit]
|
||||
Description=Free IDE Proxy (OpenAI/Anthropic free models aggregator)
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=$HOME/.local/bin/free-ide-proxy -host 127.0.0.1 -port $PROXY_PORT
|
||||
Environment=OPENCODE_PROXY_KEY=$PROXY_API_KEY
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
UNIT
|
||||
|
||||
export XDG_RUNTIME_DIR="/run/user/$(id -u)"
|
||||
export DBUS_SESSION_BUS_ADDRESS="unix:path=$XDG_RUNTIME_DIR/bus"
|
||||
mkdir -p "$XDG_RUNTIME_DIR" 2>/dev/null || true
|
||||
log "Habilitando linger para arrancar los servicios de usuario al boot..."
|
||||
(sudo loginctl enable-linger "$USER" 2>/dev/null || loginctl enable-linger "$USER" 2>/dev/null) || warn "no se pudo enable-linger (los servicios de usuario no arrancarán solos al boot)"
|
||||
systemctl --user daemon-reload
|
||||
systemctl --user enable --now free-ide-proxy.service
|
||||
sleep 2
|
||||
curl -fsS "http://127.0.0.1:${PROXY_PORT}/health" >/dev/null 2>&1 || die "free-ide-proxy no quedó arriba en :${PROXY_PORT}"
|
||||
log "free-ide-proxy activo en http://127.0.0.1:${PROXY_PORT} (${MODEL} y más)"
|
||||
fi
|
||||
|
||||
# ---------------- 3) Config de openclaw (pre-cargada) ----------------
|
||||
# Reutiliza el token del gateway si ya existía una config (idempotencia).
|
||||
GATEWAY_TOKEN=""
|
||||
if [ -f "$HOME/.openclaw/openclaw.json" ]; then
|
||||
GATEWAY_TOKEN="$(grep -o '"token"[[:space:]]*:[[:space:]]*"[^"]*"' "$HOME/.openclaw/openclaw.json" | head -1 | sed -E 's/.*:"([^"]*)"/\1/')"
|
||||
cp "$HOME/.openclaw/openclaw.json" "$HOME/.openclaw/openclaw.json.bak.$(date +%s)"
|
||||
log "Backup de config existente guardado en ~/.openclaw/openclaw.json.bak.*"
|
||||
fi
|
||||
GATEWAY_TOKEN="${GATEWAY_TOKEN:-$(openssl rand -hex 24 2>/dev/null || cat /dev/urandom | tr -dc 'a-f0-9' | head -c 48)}"
|
||||
|
||||
mkdir -p "$HOME/.openclaw/workspace"
|
||||
cat > "$HOME/.openclaw/openclaw.json" <<JSON
|
||||
{
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"workspace": "$HOME/.openclaw/workspace",
|
||||
"skipBootstrap": true,
|
||||
"model": { "primary": "free-ide/$MODEL" },
|
||||
"models": { "free-ide/$MODEL": {} }
|
||||
}
|
||||
},
|
||||
"gateway": {
|
||||
"mode": "local",
|
||||
"auth": { "mode": "token", "token": "$GATEWAY_TOKEN" },
|
||||
"port": $GATEWAY_PORT,
|
||||
"bind": "loopback",
|
||||
"tailscale": { "mode": "off", "resetOnExit": false }
|
||||
},
|
||||
"session": { "dmScope": "per-channel-peer" },
|
||||
"tools": { "profile": "coding" },
|
||||
"models": {
|
||||
"mode": "merge",
|
||||
"providers": {
|
||||
"free-ide": {
|
||||
"baseUrl": "http://127.0.0.1:$PROXY_PORT/v1",
|
||||
"api": "openai-completions",
|
||||
"apiKey": "$PROXY_API_KEY",
|
||||
"models": [
|
||||
{
|
||||
"id": "$MODEL",
|
||||
"name": "$MODEL (Custom Provider)",
|
||||
"contextWindow": 128000,
|
||||
"maxTokens": 4096,
|
||||
"input": ["text"],
|
||||
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
|
||||
"reasoning": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"hooks": { "internal": { "entries": { "session-memory": { "enabled": true } } } }
|
||||
}
|
||||
JSON
|
||||
chmod 600 "$HOME/.openclaw/openclaw.json"
|
||||
log "Config escrita en ~/.openclaw/openclaw.json (modelo: free-ide/$MODEL)"
|
||||
|
||||
# ---------------- 4) Gateway daemon ----------------
|
||||
export XDG_RUNTIME_DIR="/run/user/$(id -u)"
|
||||
export DBUS_SESSION_BUS_ADDRESS="unix:path=$XDG_RUNTIME_DIR/bus"
|
||||
mkdir -p "$XDG_RUNTIME_DIR" 2>/dev/null || true
|
||||
|
||||
log "Instalando daemon del gateway (systemd usuario)..."
|
||||
"$OPENCLAW_BIN" daemon install --runtime node >/dev/null 2>&1 || warn "daemon install avisó algo; se intenta igual"
|
||||
systemctl --user daemon-reload 2>/dev/null || true
|
||||
systemctl --user enable --now openclaw-gateway.service >/dev/null 2>&1 || {
|
||||
warn "El servicio openclaw-gateway no arrancó al vuelo; reintentando..."
|
||||
sleep 2
|
||||
systemctl --user start openclaw-gateway.service >/dev/null 2>&1 || true
|
||||
}
|
||||
sleep 4
|
||||
|
||||
# ---------------- 5) Verificación ----------------
|
||||
log "Verificando proxy..."
|
||||
curl -fsS "http://127.0.0.1:${PROXY_PORT}/health" && echo
|
||||
log "Verificando gateway ($GATEWAY_PORT)..."
|
||||
(ss -tln 2>/dev/null || netstat -tln 2>/dev/null) | grep -q ":$GATEWAY_PORT " && echo "gateway escuchando en :$GATEWAY_PORT" || warn "no se detectó el puerto $GATEWAY_PORT (revisa: systemctl --user status openclaw-gateway)"
|
||||
|
||||
if timeout 60 "$OPENCLAW_BIN" agent -m "Responde SOLO con: OK" --agent main >/dev/null 2>&1; then
|
||||
log "Inferencia verificada: el agente respondió OK con $MODEL."
|
||||
else
|
||||
warn "La verificación de inferencia no respondió en 60s. El gateway puede estar calentando; probá luego:"
|
||||
warn " openclaw agent -m 'hola' --agent main"
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "=============================================================================="
|
||||
echo " ✅ OpenClaw listo"
|
||||
echo " Modelo : $MODEL"
|
||||
echo " Endpoint : http://127.0.0.1:${PROXY_PORT}/v1"
|
||||
echo " Gateway : ws://127.0.0.1:${GATEWAY_PORT}"
|
||||
echo " Servicios : free-ide-proxy + openclaw-gateway (systemd usuario)"
|
||||
echo "----------------------------------------------------------------------------"
|
||||
echo " Chat: openclaw chat"
|
||||
echo " Status: openclaw gateway status"
|
||||
echo " Panel: openclaw dashboard"
|
||||
echo "=============================================================================="
|
||||
@@ -0,0 +1,29 @@
|
||||
#!/usr/bin/env bash
|
||||
# Desinstala OpenClaw All-in-One (servicios + config, deja los binarios).
|
||||
set -euo pipefail
|
||||
|
||||
log() { echo -e "\033[1;34m[openclaw]\033[0m $*"; }
|
||||
|
||||
export XDG_RUNTIME_DIR="/run/user/$(id -u)"
|
||||
export DBUS_SESSION_BUS_ADDRESS="unix:path=$XDG_RUNTIME_DIR/bus"
|
||||
export PATH="$HOME/.local/bin:$HOME/.openclaw/bin:$PATH"
|
||||
|
||||
log "Deteniendo y deshabilitando servicios de usuario..."
|
||||
for svc in openclaw-gateway free-ide-proxy; do
|
||||
systemctl --user disable --now "$svc.service" 2>/dev/null || true
|
||||
done
|
||||
systemctl --user daemon-reload 2>/dev/null || true
|
||||
|
||||
if command -v openclaw >/dev/null 2>&1; then
|
||||
log "Desinstalando daemon openclaw..."
|
||||
openclaw daemon uninstall >/dev/null 2>&1 || true
|
||||
fi
|
||||
|
||||
log "Backup de la config..."
|
||||
[ -f "$HOME/.openclaw/openclaw.json" ] && cp "$HOME/.openclaw/openclaw.json" "$HOME/.openclaw/openclaw.json.bak.$(date +%s)" || true
|
||||
|
||||
log "Limpiando archivos de servicio de usuario..."
|
||||
rm -f "$HOME/.config/systemd/user/openclaw-gateway.service" "$HOME/.config/systemd/user/free-ide-proxy.service"
|
||||
rm -f "$HOME/.config/systemd/user/free-ide-proxy.service.bak"
|
||||
|
||||
log "Listo. Para borrar datos: rm -rf ~/.openclaw (binarios: npm uninstall -g openclaw; rm ~/.local/bin/free-ide-proxy)"
|
||||
Reference in New Issue
Block a user