Development

Setup OpenClaw di Server Remote: SSH Tunnel dan PM2

Asep Alazhari

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

Setup OpenClaw di Server Remote: SSH Tunnel dan 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 60

Baris 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-server

Flag -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 7148

Waktu 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 --force

Flag —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 status

Fix 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.3

Command 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-projects

Command 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 --help

Lo 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 -g

Start gateway dengan PM2:

pm2 start "npx openclaw gateway --port 18789 --bind loopback --force" --name openclaw-gateway

Simpan daftar process PM2 biar survive reboot:

pm2 save

Setelah server restart, PM2 bakal otomatis balikin gateway online. Lo bisa cek status dan log kapan aja:

pm2 status
pm2 logs openclaw-gateway

Perubahan 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 health

Cek status koneksi dan model yang aktif:

npx openclaw status

Approve CLI pairing ke gateway:

npx openclaw pairing approve --all

Force kill proses gateway yang stuck:

ps aux | grep openclaw | grep -v grep | awk '{print $2}' | xargs kill -9

Pakai 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.

Back to Blog

Related Posts

View All Posts »
Hentikan Git Nanya Kredensial di VS Code
development

Hentikan Git Nanya Kredensial di VS Code

Fix Git yang terus minta password dengan credential helper. Panduan lengkap untuk Windows, macOS, dan Linux plus setup Personal Access Token.