Setup OpenClaw di Server Remote: SSH Tunnel dan PM2
Panduan lengkap setup OpenClaw di Docker container remote pakai SSH tunneling, fix error model Codex, index workspace, dan bikin gateway stabil dengan PM2.

Waktu itu udah hampir tengah malam. Gue baru aja nutup terminal setelah sesi coding yang panjang. Terus gue inget, gateway-nya udah kebunuh. AI-nya kehilangan semua konteks yang udah kita bangun bareng. Gue harus mulai dari nol lagi.
Malam itu yang bikin gue serius nyari solusi yang bener. Bukan sekadar cara nge-run OpenClaw, tapi cara nge-run-nya dengan benar. Aman, persistent, dan nggak kehilangan konteks setiap kali terminal ditutup.
Artikel ini ngerangkum semua yang gue pelajarin dari pengalaman itu, deh. Mulai dari SSH tunneling, setup gateway, fix error model, indexing workspace, sampai bikin service-nya tetap jalan pakai PM2. Kalau lo lagi setup OpenClaw di remote server, ini panduan yang pengen lo baca dari hari pertama.
Apa itu OpenClaw
OpenClaw adalah developer assistant berbasis AI. Dia jalan sebagai gateway lokal yang nyambung ke language model kayak OpenAI Codex atau GPT. Lo bisa pakainya lewat web dashboard atau konek ke messaging channel kayak Telegram.
Kekuatan sebenarnya ada di workspace memory. Lo daftarin direktori proyek lo, index mereka, dan AI-nya mulai ngerti struktur codebase lo. Lo bisa minta dia review kode, kasih saran perbaikan, atau jelasin cara kerja fungsi tertentu.
OpenClaw bisa jalan di mana aja ada terminal. Mesin lokal, VPS, atau Docker container yang tertanam jauh di dalam jaringan privat. Fleksibilitas ini bagus buat tim dengan infrastruktur yang kompleks. Tapi artinya lo juga harus handle konektivitas dan process management sendiri.
Infrastruktur: SSH Tunneling yang Bener
Host gue adalah jump server bernama bastion. OpenClaw jalan di dalam Docker container bernama app-container di mesin itu. Container-nya nggak di-expose ke internet publik. Nggak ada open port, nggak ada firewall rule untuk HTTP.
Buat ngakses OpenClaw dashboard dari laptop, gue setup nested SSH tunneling pakai ProxyJump. Nih SSH config yang gue tambahkan di ~/.ssh/config laptop gue:
Host bastion
HostName 203.0.113.10
User root
Port 2222
IdentityFile ~/.ssh/id_rsa_myserver
Host dev-server
HostName localhost
User devuser
Port 2200
ProxyJump bastion
HostKeyAlias dev-server-unique
PubkeyAcceptedAlgorithms +ssh-rsa
KexAlgorithms +sntrup761x25519-sha512@openssh.com
IdentityFile ~/.ssh/id_rsa_myserver
LocalForward 18789 127.0.0.1:18789
ServerAliveInterval 60Baris LocalForward adalah bagian yang penting banget, nih. Dia bikin tunnel yang mapping port 18789 di laptop lo ke port 18789 di remote container. Lo bisa buka browser, pergi ke localhost:18789, dan langsung nyentuh OpenClaw dashboard yang jalan di dalam Docker container itu.
ServerAliveInterval 60 jaga koneksi SSH tetap hidup selama idle. Tanpa ini, tunnel bisa putus diam-diam setelah beberapa menit nggak ada aktivitas. Itu nyebelinnya luar biasa kalau lagi di tengah sesi debugging yang panjang.
Buat nyambung, jalanin command ini dari laptop lo:
ssh -N dev-serverFlag -N bilang ke SSH buat forward port tanpa buka shell. Biarkan terminal itu terbuka, buka browser lo, dan lo udah konek deh.
Konfigurasi Gateway dan Port
Kesalahan pertama gue adalah ganti default port dari 18789 ke 7148. Gue kira ada konflik di port default. Ternyata nggak ada.
Masalah sebenarnya jauh lebih simpel. Gateway-nya mati waktu terminal ditutup. Gue nge-run-nya kayak gini:
npx openclaw gateway --port 7148Waktu terminal ditutup, prosesnya mati. Ini behavior yang expected buat foreground process. Tapi nggak bisa diterima buat service yang harusnya jalan terus.
Gue fix dua hal. Pertama, gue kembalikan port ke default. Kedua, gue bind gateway ke loopback address aja:
npx openclaw gateway --port 18789 --bind loopback --forceFlag —bind loopback bikin gateway cuma listen di 127.0.0.1. Dia nggak bisa nerima koneksi dari mana pun selain localhost. Kombinasikan dengan SSH tunnel, ini jauh lebih aman daripada expose dashboard ke seluruh jaringan.
Buat ngecek apakah gateway lo sehat, jalanin:
npx openclaw health
npx openclaw statusFix Error Model Codex Spark
Setelah tunnel jalan, gue konek lewat Telegram dan langsung dapat error ini:
{"detail":"The 'gpt-5.3-codex-spark' model is not supported when using Codex with a ChatGPT account."}Konfigurasi agent default-nya pakai codex-spark. Model itu butuh akun OpenAI enterprise tier. Akun standar nggak bisa pakainya.
Fix-nya adalah switch ke model Codex yang standard. Jalanin dua command ini:
npx openclaw config set agent.model openai-codex-5.3
npx openclaw channels set-model telegram openai-codex-5.3Command pertama update konfigurasi agent global. Command kedua sync channel Telegram supaya pakai model yang sama.
Setelah update config, buka chat Telegram lo dan ketik /reset. Ini ngebersihin session cache. Tanpa langkah ini, model lama tetap ke-cache di sesi aktif dan error terus muncul.
Model openai-codex-5.3 kasih lo sekitar 272k token context window. Itu besar banget, nih. Cukup buat load seluruh struktur proyek Next.js dan masih ada ruang buat percakapan bermakna soal file-file spesifiknya.
Kalau lo tertarik ngurusin multiple AI model dari satu tool, Juga Baca: Bikin Custom MCP Server untuk Claude Code: Panduan Developer nunjukkin cara nyambungin AI tools bareng di environment yang kompleks. Beberapa pola konfigurasinya nyambung banget sama setup OpenClaw.
Workspace dan Memory Indexing
OpenClaw punya memory system yang dibangun di sekitar direktori proyek lo. Lo daftarin direktori dan index mereka. AI-nya lalu punya awareness terhadap file-file di dalamnya selama percakapan berlangsung.
Tanpa indexing, AI-nya nggak tau apa-apa soal proyek lo. Dia nggak bisa nunjukin di mana fungsi tertentu didefinisiin atau jelasin struktur folder lo.
Buat nambahin dan index workspace, jalanin aja:
npx openclaw workspace add /home/devuser/projects --name all-projects
npx openclaw memory index --workspace all-projectsCommand pertama mendaftarkan direktorinya dengan nama yang lo pilih. Command kedua bangun memory index dari file-file di dalamnya.
Satu hal penting yang perlu diperhatiin: subcommand yang bener adalah index, bukan reindex. Gue sempet buang waktu nyoba reindex sebelum figuring this out. Command-nya bisa beda antar versi, jadi selalu cek dulu:
npx openclaw --helpLo bisa daftarin beberapa workspace dengan nama berbeda. AI-nya bakal punya akses ke semuanya selama satu sesi.
Bikin Gateway Stabil dengan PM2
Awalnya gue pakai nohup buat keep gateway jalan setelah terminal disconnect. Prosesnya survive deh. Tapi setelah sekitar dua jam idle, gateway-nya jadi nggak responsif. Nohup menjaga proses tetap hidup. Dia nggak restart otomatis kalau hang atau crash.
PM2 adalah tool yang tepat buat manage Node.js process di production. Dia handle restart, nyimpen log, dan survive reboot server.
Install PM2 secara global dulu:
npm install pm2 -gStart gateway dengan PM2:
pm2 start "npx openclaw gateway --port 18789 --bind loopback --force" --name openclaw-gatewaySimpan daftar process PM2 biar survive reboot:
pm2 saveSetelah server restart, PM2 bakal otomatis balikin gateway online. Lo bisa cek status dan log kapan aja:
pm2 status
pm2 logs openclaw-gatewayPerubahan ini yang paling berasa bedanya di workflow harian gue. Gateway-nya cukup jalan aja. Gue nggak perlu ngecek terus. Kalau ada yang crash, PM2 restart otomatis. Log selalu ada kalau gue perlu investigasi sesuatu.
Buat gambaran lebih luas soal cara AI-powered CLI tools nangani project setup yang kompleks, Juga Baca: OpenCode Multi-Model CLI: Switch AI Tanpa Batas ngebahas cara OpenCode handle model switching dan konfigurasi per-project. OpenClaw dan OpenCode solve masalah yang mirip dengan cara yang berbeda, dan baca keduanya bantu lo milih tool yang tepat buat workflow lo.
Command Troubleshooting yang Berguna
Ini command-command yang paling banyak bantu gue selama setup dan operasional sehari-hari.
Cek apakah gateway responsif:
npx openclaw healthCek status koneksi dan model yang aktif:
npx openclaw statusApprove CLI pairing ke gateway:
npx openclaw pairing approve --allForce kill proses gateway yang stuck:
ps aux | grep openclaw | grep -v grep | awk '{print $2}' | xargs kill -9Pakai force kill cuma kalau prosesnya bener-bener nggak responsif ya. PM2 handle ini secara otomatis di operasional normal. Tapi kalau lo jalan tanpa PM2 dan perlu unstuck cepat, command itu yang works.
Catatan Keamanan yang Penting
Selalu bind ke loopback. Jangan pernah jalanin gateway tanpa flag —bind loopback. Binding ke 0.0.0.0 expose dashboard lo ke semua orang di jaringan, dan itu risiko yang nggak lo perlu.
Jaga SSH key lo aman. SSH tunnel adalah layer access control lo. Siapa aja yang punya SSH key valid ke bastion bisa tunnel masuk ke gateway. Simpan private key dengan aman dan rotate kalau lo curiga ada kompromi.
Pakai ServerAliveInterval di SSH config lo. Tunnel yang putus berarti koneksi ke dashboard juga putus. Nilai 60 detik adalah keseimbangan yang bagus antara menjaga koneksi tetap hidup dan overhead jaringan yang minimal.
Penutup
OpenClaw punya rough edges waktu awal setup. Port confusion, model error, gateway yang mati sendiri. Semua itu masalah kecil, dan masing-masing punya fix yang jelas.
Setelah lo lewatin setup-nya, dia jalan dengan reliable deh. Kombinasi SSH tunneling buat access control, loopback binding buat keamanan, dan PM2 buat process management kasih lo setup yang jalan tanpa perlu diawasi terus.
Workspace memory adalah fitur yang bikin ini genuinely useful seiring waktu. Index proyek utama lo sekali, biarkan gateway jalan, dan lo punya AI assistant yang persistent, yang ngerti codebase lo dan inget konteks antar sesi. Itulah jenis tool yang beneran ngubah cara lo kerja.
Kalau lo udah familiar sama SSH dan basic Linux process management, full setup-nya butuh waktu kurang dari sejam. Mulai dari SSH tunnel, konfirmasiin gateway-nya start, lalu pindah ke PM2. Test setiap langkah sebelum tambah layer berikutnya, yuk.


