DocsInfrastruktur
Web terminal
Shell ke host aoox (atau server remote) langsung dari browser, untuk owner dan admin.
- Siapa
- Owner & admin saja
- Ke mana
- Host aoox (SSH) atau server remote
- Klien
- xterm.js di browser → Socket.IO → SSH
Cara kerja
Container tidak bisa membuka shell di host-nya sendiri, jadi API terhubung ke host lewat SSH. Browser tidak pernah memegang kredensial SSH:
- 01tiketbrowser minta tiket JWT 60 detik, sekali pakai, scope terminal
- 02socketSocket.IO /terminal dengan tiket + ukuran kolom/baris
- 03sshAPI membuka sesi SSH ke target memakai key platform
- 04shellinput/output diteruskan; resize mengikuti jendela
| Mode | Kapan | Shell yang didapat |
|---|---|---|
| SSH ke host | TERMINAL_SSH_HOST terisi (default host.docker.internal) | Shell user SSH di host — yang biasanya kamu mau. |
| Lokal | TERMINAL_SSH_HOST kosong | Shell di dalam container API (bash sebagai user node) — hanya untuk debug API. |
Menyiapkan SSH ke host
Aktifkan SSH server di host
Linuxsudo apt install openssh-server && sudo systemctl enable --now sshWindows (dev): fitur opsional OpenSSH Server. Compose distribusi sudah memetakan
host.docker.internalke gateway host di Linux.Isi env terminal di .env.dist
.env.distTERMINAL_SSH_HOST=host.docker.internal TERMINAL_SSH_PORT=22 TERMINAL_SSH_USER=deploy # user host yang dipakai terminalJalankan
up -dlagi setelah mengubah env. TanpaTERMINAL_SSH_USERkartu Terminal menampilkan Perlu perhatian.Otorisasi key platform
API membuat keypair ed25519 di
./secretssaat pertama dibutuhkan. Settings → Terminal menampilkan public key dan perintah untuk dijalankan sekali di host sebagaiTERMINAL_SSH_USER:mkdir -p ~/.ssh && chmod 700 ~/.ssh touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys echo 'ssh-ed25519 AAAA… aoox' >> ~/.ssh/authorized_keysKey yang sama dipakai untuk server remote — otorisasi sekali per host.
Buka menu Terminal
Pilih target (Host aoox / server remote) dan mulai mengetik. Ukuran terminal mengikuti jendela browser; sesi ditutup saat tab ditutup atau koneksi putus.
Kredensial alternatif
| Env | Kapan dipakai | Catatan |
|---|---|---|
TERMINAL_SSH_PRIVATE_KEY_FILE | Bawa key sendiri | Path di container API (mount ke /run/secrets/…); TERMINAL_SSH_PASSPHRASE bila terenkripsi. |
TERMINAL_SSH_PRIVATE_KEY | Key inline di env | Kurang praktis; hindari di file yang di-commit. |
TERMINAL_SSH_PASSWORD | Password SSH | Kurang aman — hanya untuk uji cepat. |
Prioritas: key eksplisit → password → key platform (default).
Tips pemakaian
- Semua container aoox terlihat dari host:
docker ps --filter label=com.docker.compose.project=aoox. - Masuk ke container aplikasi:
docker exec -it aoox-app-<slug> sh. Untuk perintah rutin, lebih rapi pakai job. - Log proxy saat sertifikat bermasalah:
docker logs -f aoox-proxy. - Tempel dengan
Ctrl+Shift+V(Linux/Windows) atauCmd+V(macOS);Ctrl+Cditeruskan ke shell, bukan menyalin.
Bila gagal
| Pesan | Penyebab & solusi |
|---|---|
| auth failed + perintah otorisasi | Key belum ada di authorized_keys user itu. Jalankan perintah yang ditampilkan di terminal/Settings. |
| origin not allowed | WEB_ORIGIN tidak sama persis dengan URL di browser (skema/host/port). Samakan, up -d ulang. |
| TERMINAL_SSH_USER is not set | Isi env, restart stack. |
| connect ECONNREFUSED / timeout | sshd tidak jalan, port salah, atau host.docker.internal tidak resolve (Linux tanpa extra_hosts — pakai IP gateway docker0, mis. 172.17.0.1). |
| Direktori key tidak writable (uid 1000) | Perbaiki kepemilikan folder ./secrets: sudo chown -R 1000:1000 ./secrets. |
| 403 saat membuka terminal | Peran member. Hanya owner/admin. |
Origin selain WEB_ORIGIN. Fitur ini dimaksudkan untuk lingkungan dev/self-hosted yang dipercaya — host key SSH belum diverifikasi. Pembukaan sesi (pembuatan tiket) tercatat di audit log; perintah yang diketik tidak.Langkah berikutnya
Ada yang keliru? Edit halaman ini di GitLab ↗