Optimizacija serverja za OpenClaw: Razlika med redakcijama

Iz KrofekWiki
nova stran z vsebino: »cat > /root/openclaw_optimize_hetzner.sh <<'EOF' # !/usr/bin/env bash set -euo pipefail TS="$(date +%F_%H-%M-%S)" BACKUP_DIR="/root/openclaw-backup-$TS" OC_DIR="/opt/openclaw" OC_HOME="/root/.openclaw" echo "=== OpenClaw Hetzner optimizer ===" echo "Backup dir: $BACKUP_DIR" mkdir -p "$BACKUP_DIR" echo echo "### 1) Backup" cp -a "$OC_DIR/docker-compose.yml" "$BACKUP_DIR/docker-compose.yml.bak" 2>/dev/null || true cp -a "$OC_DIR/.env" "$BACKUP_DIR/env.bak" 2>/de...«
 
Brez povzetka urejanja
Vrstica 1: Vrstica 1:
cat > /root/openclaw_optimize_hetzner.sh <<'EOF'
cat > /root/openclaw_optimize_hetzner.sh <<'EOF'
 
#!/usr/bin/env bash
# !/usr/bin/env bash
set -euo pipefail
 
set -euo pipefail
TS="$(date +%F_%H-%M-%S)"
 
BACKUP_DIR="/root/openclaw-backup-$TS"
TS="$(date +%F_%H-%M-%S)" BACKUP_DIR="/root/openclaw-backup-$TS" OC_DIR="/opt/openclaw" OC_HOME="/root/.openclaw"
OC_DIR="/opt/openclaw"
 
OC_HOME="/root/.openclaw"
echo "=== OpenClaw Hetzner optimizer ===" echo "Backup dir: $BACKUP_DIR" mkdir -p "$BACKUP_DIR"
 
echo "=== OpenClaw Hetzner optimizer ==="
echo echo "### 1) Backup" cp -a "$OC_DIR/docker-compose.yml" "$BACKUP_DIR/docker-compose.yml.bak" 2>/dev/null || true cp -a "$OC_DIR/.env" "$BACKUP_DIR/env.bak" 2>/dev/null || true cp -a "$OC_HOME/openclaw.json" "$BACKUP_DIR/openclaw.json.bak" 2>/dev/null || true cp -a /etc/docker/daemon.json "$BACKUP_DIR/daemon.json.bak" 2>/dev/null || true cp -a /etc/fstab "$BACKUP_DIR/fstab.bak" 2>/dev/null || true cp -a /etc/sysctl.d/99-openclaw-stability.conf "$BACKUP_DIR/99-openclaw-stability.conf.bak" 2>/dev/null || true
echo "Backup dir: $BACKUP_DIR"
 
mkdir -p "$BACKUP_DIR"
echo "Backup completed."
 
echo
echo echo "### 2) Ensure 4 GB swap" if ! swapon --show | grep -q "/swapfile"; then
echo "### 1) Backup"
cp -a "$OC_DIR/docker-compose.yml" "$BACKUP_DIR/docker-compose.yml.bak" 2>/dev/null || true
cp -a "$OC_DIR/.env" "$BACKUP_DIR/env.bak" 2>/dev/null || true
cp -a "$OC_HOME/openclaw.json" "$BACKUP_DIR/openclaw.json.bak" 2>/dev/null || true
cp -a /etc/docker/daemon.json "$BACKUP_DIR/daemon.json.bak" 2>/dev/null || true
cp -a /etc/fstab "$BACKUP_DIR/fstab.bak" 2>/dev/null || true
cp -a /etc/sysctl.d/99-openclaw-stability.conf "$BACKUP_DIR/99-openclaw-stability.conf.bak" 2>/dev/null || true
echo "Backup completed."
echo
echo "### 2) Ensure 4 GB swap"
if ! swapon --show | grep -q "/swapfile"; then
   if [ ! -f /swapfile ]; then
   if [ ! -f /swapfile ]; then
     fallocate -l 4G /swapfile
     fallocate -l 4G /swapfile
Vrstica 20: Vrstica 32:
   fi
   fi
   swapon /swapfile || true
   swapon /swapfile || true
fi
fi
 
if ! grep -q '^/swapfile ' /etc/fstab; then
if ! grep -q '^/swapfile ' /etc/fstab; then
   echo '/swapfile none swap sw 0 0' >> /etc/fstab
   echo '/swapfile none swap sw 0 0' >> /etc/fstab
fi
fi
 
cat > /etc/sysctl.d/99-openclaw-stability.conf <<'SYSCTL' vm.swappiness=20 vm.vfs_cache_pressure=50 SYSCTL
cat > /etc/sysctl.d/99-openclaw-stability.conf <<'SYSCTL'
 
vm.swappiness=20
sysctl --system >/dev/null || true
vm.vfs_cache_pressure=50
 
SYSCTL
echo echo "### 3) Docker log rotation" mkdir -p /etc/docker cat > /etc/docker/daemon.json <<'DOCKERJSON' {
sysctl --system >/dev/null || true
echo
echo "### 3) Docker log rotation"
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<'DOCKERJSON'
{
   "log-driver": "json-file",
   "log-driver": "json-file",
   "log-opts": {
   "log-opts": {
Vrstica 36: Vrstica 55:
     "max-file": "5"
     "max-file": "5"
   }
   }
} DOCKERJSON
}
 
DOCKERJSON
echo echo "### 4) Optimize docker-compose.yml" cd "$OC_DIR"
 
echo
# localhost-only ports
echo "### 4) Optimize docker-compose.yml"
 
cd "$OC_DIR"
sed -i 's#- "${OPENCLAW_GATEWAY_PORT:-18789}:18789"#- "127.0.0.1:${OPENCLAW_GATEWAY_PORT:-18789}:18789"#g' docker-compose.yml sed -i 's#- "${OPENCLAW_BRIDGE_PORT:-18790}:18790"#- "127.0.0.1:${OPENCLAW_BRIDGE_PORT:-18790}:18790"#g' docker-compose.yml sed -i 's#- "18789:18789"#- "127.0.0.1:18789:18789"#g' docker-compose.yml sed -i 's#- "18790:18790"#- "127.0.0.1:18790:18790"#g' docker-compose.yml
 
# localhost-only ports
# Node memory limit
sed -i 's#- "${OPENCLAW_GATEWAY_PORT:-18789}:18789"#- "127.0.0.1:${OPENCLAW_GATEWAY_PORT:-18789}:18789"#g' docker-compose.yml
 
sed -i 's#- "${OPENCLAW_BRIDGE_PORT:-18790}:18790"#- "127.0.0.1:${OPENCLAW_BRIDGE_PORT:-18790}:18790"#g' docker-compose.yml
if ! grep -q 'NODE_OPTIONS=--max-old-space-size=' docker-compose.yml; then
sed -i 's#- "18789:18789"#- "127.0.0.1:18789:18789"#g' docker-compose.yml
   sed -i '/NODE_ENV=production/a\      - NODE_OPTIONS=--max-old-space-size=1536' docker-compose.yml || true
sed -i 's#- "18790:18790"#- "127.0.0.1:18790:18790"#g' docker-compose.yml
fi
 
# Node memory limit
# Ensure restart policy exists for gateway if missing near service may already exist
if ! grep -q 'NODE_OPTIONS=--max-old-space-size=' docker-compose.yml; then
 
   sed -i '/NODE_ENV=production/a\      - NODE_OPTIONS=--max-old-space-size=1536' docker-compose.yml || true
if ! grep -q 'restart: unless-stopped' docker-compose.yml; then
fi
# Ensure restart policy exists for gateway if missing near service may already exist
if ! grep -q 'restart: unless-stopped' docker-compose.yml; then
   echo "WARNING: restart: unless-stopped not found. Please verify compose manually."
   echo "WARNING: restart: unless-stopped not found. Please verify compose manually."
fi
fi
 
echo echo "### 5) Ensure OpenClaw ownership" mkdir -p "$OC_HOME/workspace" chown -R 1000:1000 "$OC_HOME"
echo
 
echo "### 5) Ensure OpenClaw ownership"
echo echo "### 6) Create quick status script" cat > /root/oc-status.sh <<'STATUS'
mkdir -p "$OC_HOME/workspace"
 
chown -R 1000:1000 "$OC_HOME"
# !/usr/bin/env bash
 
echo
echo "=== Docker containers ===" docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
echo "### 6) Create quick status script"
 
cat > /root/oc-status.sh <<'STATUS'
echo echo "=== OpenClaw health ===" curl -fsS http://127.0.0.1:18789/healthz || true echo curl -fsS http://127.0.0.1:18789/readyz || true echo
#!/usr/bin/env bash
 
echo "=== Docker containers ==="
echo echo "=== RAM / Swap ===" free -h swapon --show
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
 
echo echo "=== Ports ===" ss -ltnp | grep -E '18789|18790' || true
echo
 
echo "=== OpenClaw health ==="
echo echo "=== Recent gateway warnings ===" docker logs openclaw-openclaw-gateway-1 --tail 120 2>&1 | grep -Ei 'warning|error|oom|failed|fatal|event_loop|security' || true STATUS
curl -fsS http://127.0.0.1:18789/healthz || true
 
echo
chmod +x /root/oc-status.sh
curl -fsS http://127.0.0.1:18789/readyz || true
 
echo
echo echo "### 7) Restart Docker + OpenClaw" systemctl restart docker sleep 15
 
echo
cd "$OC_DIR" docker compose up -d sleep 45
echo "=== RAM / Swap ==="
 
free -h
echo echo "### 8) Final status" /root/oc-status.sh
swapon --show
 
echo echo "=== DONE ===" echo "Backup saved in: $BACKUP_DIR" EOF
echo
 
echo "=== Ports ==="
chmod +x /root/openclaw_optimize_hetzner.sh /root/openclaw_optimize_hetzner.sh
ss -ltnp | grep -E '18789|18790' || true
echo
echo "=== Recent gateway warnings ==="
docker logs openclaw-openclaw-gateway-1 --tail 120 2>&1 | grep -Ei 'warning|error|oom|failed|fatal|event_loop|security' || true
STATUS
chmod +x /root/oc-status.sh
echo
echo "### 7) Restart Docker + OpenClaw"
systemctl restart docker
sleep 15
cd "$OC_DIR"
docker compose up -d
sleep 45
echo
echo "### 8) Final status"
/root/oc-status.sh
echo
echo "=== DONE ==="
echo "Backup saved in: $BACKUP_DIR"
EOF
chmod +x /root/openclaw_optimize_hetzner.sh
/root/openclaw_optimize_hetzner.sh

Redakcija: 07:41, 15. maj 2026

cat > /root/openclaw_optimize_hetzner.sh <<'EOF'
#!/usr/bin/env bash
set -euo pipefail

TS="$(date +%F_%H-%M-%S)"
BACKUP_DIR="/root/openclaw-backup-$TS"
OC_DIR="/opt/openclaw"
OC_HOME="/root/.openclaw"

echo "=== OpenClaw Hetzner optimizer ==="
echo "Backup dir: $BACKUP_DIR"
mkdir -p "$BACKUP_DIR"

echo
echo "### 1) Backup"
cp -a "$OC_DIR/docker-compose.yml" "$BACKUP_DIR/docker-compose.yml.bak" 2>/dev/null || true
cp -a "$OC_DIR/.env" "$BACKUP_DIR/env.bak" 2>/dev/null || true
cp -a "$OC_HOME/openclaw.json" "$BACKUP_DIR/openclaw.json.bak" 2>/dev/null || true
cp -a /etc/docker/daemon.json "$BACKUP_DIR/daemon.json.bak" 2>/dev/null || true
cp -a /etc/fstab "$BACKUP_DIR/fstab.bak" 2>/dev/null || true
cp -a /etc/sysctl.d/99-openclaw-stability.conf "$BACKUP_DIR/99-openclaw-stability.conf.bak" 2>/dev/null || true

echo "Backup completed."

echo
echo "### 2) Ensure 4 GB swap"
if ! swapon --show | grep -q "/swapfile"; then
 if [ ! -f /swapfile ]; then
   fallocate -l 4G /swapfile
   chmod 600 /swapfile
   mkswap /swapfile
 fi
 swapon /swapfile || true
fi

if ! grep -q '^/swapfile ' /etc/fstab; then
 echo '/swapfile none swap sw 0 0' >> /etc/fstab
fi

cat > /etc/sysctl.d/99-openclaw-stability.conf <<'SYSCTL'
vm.swappiness=20
vm.vfs_cache_pressure=50
SYSCTL

sysctl --system >/dev/null || true

echo
echo "### 3) Docker log rotation"
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<'DOCKERJSON'
{
 "log-driver": "json-file",
 "log-opts": {
   "max-size": "20m",
   "max-file": "5"
 }
}
DOCKERJSON

echo
echo "### 4) Optimize docker-compose.yml"
cd "$OC_DIR"

# localhost-only ports
sed -i 's#- "${OPENCLAW_GATEWAY_PORT:-18789}:18789"#- "127.0.0.1:${OPENCLAW_GATEWAY_PORT:-18789}:18789"#g' docker-compose.yml
sed -i 's#- "${OPENCLAW_BRIDGE_PORT:-18790}:18790"#- "127.0.0.1:${OPENCLAW_BRIDGE_PORT:-18790}:18790"#g' docker-compose.yml
sed -i 's#- "18789:18789"#- "127.0.0.1:18789:18789"#g' docker-compose.yml
sed -i 's#- "18790:18790"#- "127.0.0.1:18790:18790"#g' docker-compose.yml

# Node memory limit
if ! grep -q 'NODE_OPTIONS=--max-old-space-size=' docker-compose.yml; then
 sed -i '/NODE_ENV=production/a\      - NODE_OPTIONS=--max-old-space-size=1536'  docker-compose.yml || true
fi

# Ensure restart policy exists for gateway if missing near service may already exist
if ! grep -q 'restart: unless-stopped' docker-compose.yml; then
 echo "WARNING: restart: unless-stopped not found. Please verify compose manually."
fi

echo
echo "### 5) Ensure OpenClaw ownership"
mkdir -p "$OC_HOME/workspace"
chown -R 1000:1000 "$OC_HOME"

echo
echo "### 6) Create quick status script"
cat > /root/oc-status.sh <<'STATUS'
#!/usr/bin/env bash
echo "=== Docker containers ==="
docker ps --format "table Predloga:.Names\tPredloga:.Status\tPredloga:.Ports"

echo
echo "=== OpenClaw health ==="
curl -fsS http://127.0.0.1:18789/healthz || true
echo
curl -fsS http://127.0.0.1:18789/readyz || true
echo

echo
echo "=== RAM / Swap ==="
free -h
swapon --show

echo
echo "=== Ports ==="
ss -ltnp | grep -E '18789|18790' || true

echo
echo "=== Recent gateway warnings ==="
docker logs openclaw-openclaw-gateway-1 --tail 120 2>&1 | grep -Ei  'warning|error|oom|failed|fatal|event_loop|security' || true
STATUS

chmod +x /root/oc-status.sh

echo
echo "### 7) Restart Docker + OpenClaw"
systemctl restart docker
sleep 15

cd "$OC_DIR"
docker compose up -d
sleep 45

echo
echo "### 8) Final status"
/root/oc-status.sh

echo
echo "=== DONE ==="
echo "Backup saved in: $BACKUP_DIR"
EOF

chmod +x /root/openclaw_optimize_hetzner.sh
/root/openclaw_optimize_hetzner.sh