Correr ollama y OpenClaw en alpine linux sobre proxmox
Hoy os traigo un laboratorio curioso, ya que nos permitirá correr ollama y openClaw en alpine. Vamos al lío.
Me he montado una máquina alpine con 16 gb de ram y 500 gb de HDD

Lo he instalado y he habilitado el repo community que viene por defecto deshabilitado:

He actualizado los repos y he instalado lo necesario
apk update
apk add nodejs npm git go bash curl python3 build-base pnpm tailscale nano
Instalamos el binario de ollama
apk add ollama
Creamos el fichero para el servicio /etc/init.d/ollama
#!/sbin/openrc-run
name="Ollama Server"
description="Ollama local AI inference server"
# Comando ejecutable y sus argumentos
command="/usr/bin/ollama"
command_args="serve"
# Ejecución en segundo plano y gestión del PID
command_background="true"
pidfile="/run/${RC_SVCNAME}.pid"
# Variables de entorno requeridas
export OLLAMA_HOST="0.0.0.0"
export OLLAMA_MODELS="/usr/share/ollama/.ollama/models"
depend() {
need net
}
start_pre() {
# Crea toda la ruta de directorios recursivamente si no existe
if [ ! -d "/usr/share/ollama/.ollama/models" ]; then
mkdir -p /usr/share/ollama/.ollama/models
chmod -R 755 /usr/share/ollama
fi
}
Ejecutamos los siguientes comandos para poner el servicio en auto start y arrancarlo
chmod 755 /etc/init.d/ollama
rc-update add ollama default
rc-service ollama startVamos a verificar que funciona
service ollama status
netstat -tlnp | grep 11434
Descargamos un modelo ligero, en este caso llama 3.2
ollama run llama3.2

Salimos de la línea de comandos con /bye
Ahora vamos a descargar el repo oficial de Openclaw y entramos a la ruta de la descarga
git clone https://github.com/openclaw/openclaw.git /opt/openclaw
cd /opt/openclaw
Lanzamos la compilación y la instalación
pnpm install && pnpm run build && pnpm ui:build
npm link



Una vez finalizada la compilación y creado el link del ejecutable lanzamos la configuración de openclaw
openclaw configureVamos a configurar el gateway para que no escuche sólo en local para ellos vamos a seleccionar las siguientes opciones:

Ahora vamos a configurar el modelo, para ello seleccionamos Model y seleccionamos solo llama3.2:latest

Ahora pulsamos en Done para salir del asistente

Creamos el servicio de openclaw, /etc/init.d/openclaw, con el siguiente contenido (el token lo obtenemos con un cat /root/.openclaw/openclaw.json | grep token)
#!/sbin/openrc-run
name="OpenClaw Gateway"
description="OpenClaw AI Gateway Agent Service"
command="/usr/bin/node"
command_args="/opt/openclaw/dist/index.js gateway --bind loopback --port 18789"
command_background="true"
pidfile="/run/${RC_SVCNAME}.pid"
output_log="/var/log/openclaw.log"
error_log="/var/log/openclaw.err"
directory="/opt/openclaw"
# Inyectamos el mismo token que guardaste en el asistente para sincronizar el canal remoto
export OPENCLAW_GATEWAY_TOKEN="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
export HOME="/root"
depend() {
need net ollama
}Arrancamos el servicio
chmod +x /etc/init.d/openclaw
rc-update add openclaw default
rc-service openclaw start
Ahora ejecutamos los siguientes comandos para poder crear un tunel ssh hacia nuestra máquina ya que openclaw sólo responde por la ip local, 127.0.0.1:
sed -i 's/#AllowTcpForwarding yes/AllowTcpForwarding yes/' /etc/ssh/sshd_config
sed -i 's/AllowTcpForwarding no/AllowTcpForwarding yes/' /etc/ssh/sshd_config
echo "AllowTcpForwarding yes" >> /etc/ssh/sshd_config
#Reinciamos el servicio ssh para que pille los cambios
rc-service sshd restart

Ahora nos reconectamos creando el túnel
ssh -L 18789:127.0.0.1:18789 root@X.X.X.X

Y ya podemos abrir openclaw sin mensajes de error y totalmente aislado
http://127.0.0.1:18789/#token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
