Det här sätter du upp
OpenClaw är en personlig AI-assistent med öppen källkod. Den ansluter till en AI-modell hos den leverantör du väljer, kör kommandon, läser och skriver filer, för anteckningar om dig och kör schemalagda uppgifter. Du pratar med den i dess webbgränssnitt, Control UI, eller från chattappar. På en server fortsätter den att vara igång när din dator är avstängd.
Här körs den i rootless Podman under en egen användare som heter openclaw, bakom Caddy från Podman-guiden. En agent som kör kommandon behöver ett ordentligt stängsel, så guiden sätter upp fyra:
- kommandona den kör hålls inne i dess container, som den oprivilegierade användaren;
- Control UI kräver en lång slumpmässig token;
- varje ny webbläsare måste dessutom godkännas på servern innan den kan ansluta;
- agenten frågar dig innan den kör ett kommando.
Varje steg nedan har körts på en VC-P Alloy (2 vCPU, 8 GB) hos Melonslab med Debian 13:
- Via OpenRouters gratismodeller svarade agenten i Control UI, bad om godkännande innan den körde
uname -roch rapporterade kärnversionen när den fick lov. - En felaktig token avvisades, och en webbläsare med rätt token behövde ändå godkännas på servern.
- OpenClaws port gick inte att nå från internet, och inifrån dess container gick det inte att nå en app som bara lyssnar på serverns loopback-adress.
- API-nyckelns förbrukning stannade på noll, en automatisk uppdatering till en nyare avbild gick igenom, en återställning från säkerhetskopian fungerade och allt startade igen av sig självt efter en omstart av servern.
OpenClaw använde omkring 1 GB minne. Dess avbild är 3,2 GB: räkna med 7 GB disk för den.
Innan du börjar
Du behöver:
- en server uppsatt som i Podman-guiden, med Caddy igång, gärna med ufw från säkerhetsguiden. OpenClaw behöver inga egna portar;
- en A-post och en AAAA-post för
claw.example.comsom pekar på din server; - en API-nyckel från en modelleverantör. Den här guiden använder OpenRouter, som har gratismodeller: skapa en nyckel på openrouter.ai/keys och ge den en utgiftsgräns.
Exemplen använder claw.example.com för OpenClaw och 203.0.113.10 som serverns IPv4-adress. Byt ut dem genomgående.
1. Skapa användaren
Som root:
useradd -m -s /bin/bash openclaw
loginctl enable-linger openclaw
machinectl shell openclaw@
Allt till och med steg 3 körs som openclaw.
2. Skriv konfigurationen
OpenClaw sparar allt i ~/.openclaw: sina inställningar, din API-nyckel, sina sessioner och sina anteckningar. Skapa katalogen och en första konfiguration med en slumpmässig token:
mkdir -m 700 ~/.openclaw
cat > ~/.openclaw/openclaw.json <<EOF
{
"gateway": {
"mode": "local",
"bind": "lan",
"auth": { "mode": "token", "token": "$(openssl rand -hex 32)" },
"trustedProxies": ["203.0.113.10"],
"controlUi": { "allowedOrigins": ["https://claw.example.com"] }
}
}
EOF
chmod 600 ~/.openclaw/openclaw.json
Vad inställningarna gör:
bindsatt tilllanfår OpenClaw att lyssna på alla adresser inne i containern, så att porten som publiceras i steg 3 når fram. Utifrån kan bara127.0.0.1på servern nå den porten. OpenClaw vägrar starta så här utan token.authär den token du loggar in med. Den som har den kan använda agenten, så förvara den säkert, som ett lösenord.trustedProxiesär serverns IPv4-adress, som är den adress Caddys anslutningar ser ut att komma från inne i containern. OpenClaw läser då varje besökares riktiga adress från Caddy och avvisar proxade förfrågningar från alla andra.allowedOriginsär adressen du öppnar Control UI på. Webbläsare på andra adresser avvisas.
3. Definiera containern
mkdir -p ~/.config/containers/systemd
Skapa ~/.config/containers/systemd/openclaw.container:
[Unit]
Description=OpenClaw
[Container]
ContainerName=openclaw
Image=ghcr.io/openclaw/openclaw:latest
# The openclaw user outside the container is the user node inside it, so you own the files in ~/.openclaw.
UserNS=keep-id:uid=1000,gid=1000
Volume=%h/.openclaw:/home/node/.openclaw
# Only Caddy, on this server, can reach OpenClaw: the port is not open to the internet.
PublishPort=127.0.0.1:18789:18789
AutoUpdate=registry
[Service]
TimeoutStartSec=300
Restart=always
[Install]
WantedBy=default.target
Starta den:
systemctl --user daemon-reload
systemctl --user start openclaw
systemctl --user enable --now podman-auto-update.timer
Vid första starten laddas avbilden ner och förbereds för användarmappningen, vilket tog omkring fyra minuter. OpenClaw är igång när loggen visar [gateway] ready:
journalctl --user -u openclaw | grep "gateway\] ready"
4. Sätt Caddy framför
Gå tillbaka till root med exit, byt till användaren caddy med machinectl shell caddy@ och lägg till det här blocket sist i ~/Caddyfile:
claw.example.com {
reverse_proxy 127.0.0.1:18789
}
Starta om Caddy med systemctl --user restart caddy. Caddy byter ut varje X-Forwarded-For-header som en besökare skickar mot besökarens riktiga adress, och det är vad OpenClaw förväntar sig av en betrodd proxy.
5. Lägg till modellen och lås ner den
Gå tillbaka till root med exit och byt till machinectl shell openclaw@ igen. Ge OpenClaw din nyckel från OpenRouter. read -rs frågar efter den utan att visa den och håller den utanför skalets historik: klistra in nyckeln, som börjar med sk-or-v1-, och tryck Enter.
read -rs KEY
echo "$KEY" | podman exec -i openclaw openclaw models auth paste-api-key --provider openrouter
unset KEY
podman exec openclaw openclaw models set openrouter/free
Nyckeln sparas i OpenClaws databas i ~/.openclaw/state, som bara användaren openclaw kan läsa. openrouter/free skickar varje förfrågan till en av OpenRouters gratismodeller. De är långsammare och har begränsningar för hur ofta de får användas. Vill du ha pålitligare svar väljer du en betald modell från openrouter.ai/models med models set, som openrouter/<provider>/<model>, och utgiftsgränsen på din nyckel håller kostnaden i schack.
Andra leverantörer sätts upp på samma sätt, med egen nyckel och modell: --provider anthropic eller --provider openai i det första kommandot, och sedan en modell som anthropic/<model> eller openai/<model>. Den här guiden har bara testat OpenRouter.
Från början låter OpenClaw agenten köra vilket kommando som helst utan att fråga, och har ett förhöjt läge för kommandon utanför en sandlåda. Få den att fråga, stäng av det förhöjda läget, bromsa den som försöker gissa din token, och starta om:
podman exec openclaw openclaw config set tools.exec.mode ask
podman exec openclaw openclaw config set tools.elevated.enabled false
podman exec openclaw openclaw config set gateway.auth.rateLimit '{"maxAttempts": 10, "windowMs": 60000, "lockoutMs": 300000}'
systemctl --user restart openclaw
Kontrollera sedan uppsättningen med OpenClaws egen granskning, som ska visa 0 critical · 0 warn:
podman exec openclaw openclaw security audit
6. Logga in och godkänn din webbläsare
Visa din token:
grep '"token"' ~/.openclaw/openclaw.json
Öppna https://claw.example.com, klistra in din token i Gateway secret och välj Connect. Sidan visar då Approve this browser, med ett kommando som openclaw devices approve 3f6a.... Låt sidan vara öppen och kör kommandot på servern, via containern:
podman exec openclaw openclaw devices approve REQUEST_ID
Sidan ansluter av sig själv. Därefter loggar den här webbläsaren in med en egen nyckel. En annan webbläsare, ett privat fönster eller rensad webbplatsdata kräver ett nytt godkännande. podman exec openclaw openclaw devices list visar de godkända webbläsarna.
7. Prata med den
Skriv ett meddelande i rutan längst ner och tryck Enter. Modellen som används visas under rutan: med openrouter/free står där vilken gratismodell som svarade.
Be agenten köra ett kommando, som uname -r, så stannar den med Exec approval needed och kommandot. Allow once kör det den här gången, Always allow here kör det kommandot utan att fråga från och med nu, och Deny nekar. Sedan svarar den med resultatet.
OpenClaw kan också svara dig i WhatsApp, Telegram, Discord och andra chattappar. Den här guiden använder bara Control UI.
8. Vad agenten kan nå
Kommandon som agenten kör hålls inne i dess container:
- de körs som användaren
openclaw, så de kan inte läsa filer som tillhör dina andra appar eller root; - appar som bara lyssnar på serverns loopback-adress, som apparna i våra andra guider gör bakom Caddy, går inte att nå från containern;
- internet, och allt som din server gör tillgängligt på internet, går att nå;
- agenten kan läsa sina egna inställningar i
~/.openclaw, även din token och din API-nyckel. Räkna med att den kan göra det som vem som helst med din token kan göra.
Den frågar innan varje kommando tack vare tools.exec.mode ask från steg 5. Always allow here lägger till kommandot i en lista som körs utan att fråga, så använd det bara för kommandon du själv skulle köra.
Control UI har också en Terminal-panel, ett skal i containern. Det är ytterligare ett skäl att förvara din token säkert och bara godkänna dina egna webbläsare. Utan token får en besökare bara se inloggningssidan och en hälsokontroll på /healthz.
9. Håll den uppdaterad
Timern från steg 3 letar efter en ny avbild varje dag och startar om OpenClaw på den. Taggen latest följer OpenClaws stabila versioner. podman auto-update --dry-run visar om en uppdatering väntar.
10. Säkerhetskopiera
Som openclaw:
mkdir -p ~/backup
systemctl --user stop openclaw
tar -czf ~/backup/openclaw.tar.gz -C ~ .openclaw
systemctl --user start openclaw
Det sparar inställningarna, sessionerna och agentens anteckningar, och även din token och din API-nyckel. Kopiera ~/backup till en annan maskin och förvara den säkert. För att återställa stoppar du OpenClaw, packar upp arkivet i hemkatalogen med tar -xzf ~/backup/openclaw.tar.gz -C ~ och startar den igen.
Felsökning
Tjänsten startar om gång på gång, och loggen visar "Refusing to bind gateway to lan without auth". Din token saknas i ~/.openclaw/openclaw.json. Jämför filen med steg 2.
Control UI visar "Browser origin not allowed". Adressen i webbläsaren finns inte i allowedOrigins. Den måste stämma exakt, med https:// och utan snedstreck på slutet.
Sidan visar "Approve this browser" igen. Du använder en ny webbläsare, ett privat fönster eller har rensat webbplatsens data. Godkänn den som i steg 6.
curl http://127.0.0.1:18789 på servern ger proxy_attribution_required. Det är väntat: direkta förfrågningar kommer från den betrodda proxyns adress utan Caddys headers, så OpenClaw avvisar dem. Använd https://claw.example.com.
Agenten svarar "No API key found for provider openrouter". Kör första delen av steg 5 igen och starta sedan om OpenClaw.
Efter att du gått tillbaka till en äldre avbild startar inte OpenClaw, och loggen nämner databasscheman. En nyare version har redan uppgraderat data i ~/.openclaw. Gå tillbaka till latest, eller återställ en säkerhetskopia som gjordes med den äldre versionen.
Svaren är långsamma eller uteblir en stund. Gratismodeller är begränsade. Välj en annan modell med models set i steg 5, eller en betald.