DocsInfrastruktur
Server remote
Menghubungkan server lain lewat SSH sebagai target deploy tambahan — tanpa agen, cukup docker CLI di server tujuan.
- Transport
- SSH → docker system dial-stdio
- Butuh di server
- sshd + Docker CLI, tanpa agen
- Siapa
- Owner/admin mendaftarkan; semua bisa memilih
Kapan memakai server remote?
- Aplikasi berat yang tidak muat di host aoox.
- Memisahkan beban: panel + database di satu VPS, aplikasi di VPS lain.
- Region/lokasi berbeda untuk latensi.
Satu instance aoox tetap satu panel; server remote hanya menambah tempat container berjalan.
Prasyarat di server tujuan
- SSH server berjalan dan bisa dijangkau dari host aoox (port 22 atau lainnya).
- Docker terpasang dan user SSH boleh memakainya:
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker deploy # bila bukan root
docker system dial-stdio --help # harus ada (Docker 20.10+)- Hanya CLI + daemon — tidak perlu port forwarding SSH. sshd yang di-hardening dengan
AllowTcpForwarding notetap bekerja. - Tidak perlu membuka port Docker (2375/2376) ke jaringan.
- Untuk domain langsung di server itu: port 80/443 bebas (lihat proxy per server).
Cara kerja
- 01sshsatu sesi ssh2 dari API ke server (lazy, reconnect)
- 02dial-stdiotiap request Docker API dieksekusi lewat docker system dial-stdio
- 03builddaemon server meng-clone & membangun image
- 04runcontainer berjalan di server; log mengalir lewat tunnel yang sama
Ini cara yang sama dengan docker -H ssh://user@host: API berbicara ke daemon remote seolah lokal, lewat stdio proses docker di server. Satu sesi SSH per server di-cache dan disambung ulang bila putus.
Menambahkan server
Settings → Server remote → Server remote baru (owner/admin)
Field Keterangan Nama Label, mis. app-sg-1. Host / Port / Username Alamat SSH, mis. 203.0.113.10,22,rootatau user yang ada di grup docker.Private key (opsional) Kosongkan untuk memakai key platform aoox (disarankan). Isi PEM/OpenSSH bila mau key sendiri — disimpan terenkripsi, tidak ditampilkan lagi. Otorisasi key platform (bila tanpa key sendiri)
Kartu Server remote menampilkan public key platform dan perintah yang harus dijalankan sekali di server tujuan sebagai user SSH itu — aoox tidak bisa menulis
authorized_keyshost lain:mkdir -p ~/.ssh && chmod 700 ~/.ssh touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys echo 'ssh-ed25519 AAAA… aoox' >> ~/.ssh/authorized_keysKey platform dibuat otomatis (ed25519) saat pertama dibutuhkan dan disimpan di
./secretsdi host aoox — satu key untuk semua server dan terminal.Tes koneksi
Tombol tes membuka shell singkat lalu mengecek Docker lewat tunnel. Hasilnya:
Hasil Arti OK + versi Docker Siap dipakai. Auth ditolak + perintah otorisasi Key belum ada di authorized_keys — jalankan perintah yang ditampilkan. Terhubung, Docker error docker tidak ada di PATH user itu, user tidak di grup docker, atau daemon mati.
Deploy ke server remote
Di form aplikasi pilih Server → server tujuan (select hanya tampil bila ada server terdaftar; member melihat daftar kosong karena endpoint server dibatasi owner/admin). Aplikasi menampilkan badge nama server.
| Aspek | Server remote |
|---|---|
| Build | Di daemon server tujuan — Dockerfile, Nixpacks, situs statis (helper image dibangun di sana). |
| Registry | Tanpa push. Image tersimpan di server dengan ref aoox/<project>/<app>:<tag>; rollback memakai yang masih ada di sana. |
| Domain / Traefik | Ya — provision proxy di server itu (kartu Proxy (Traefik) di server ini), lalu tambahkan domain seperti biasa. Alternatifnya tetap bisa pakai Port host. |
| Blue/green | Ya bila server punya proxy dan aplikasi tanpa port host; tanpa proxy → replace biasa. |
| Log container | Ada (realtime, lewat tunnel). |
| Metrik CPU/RAM | Tidak — sampler hanya membaca daemon host aoox. |
| Env & referensi database | Env berlaku; referensi ${{database…}} menghasilkan host internal yang tidak terjangkau dari server lain — pakai koneksi eksternal. |
| Mount & backup volume | Ya — volume, file, dan backup volume (termasuk unggah/unduh S3) berjalan di daemon server itu. |
| Jobs | Ya, di daemon server. |
| Notifikasi container mati | Hanya untuk host lokal. |
| Preview PR | Tidak (tanpa host/domain). |
| Pemeliharaan disk | Image deployment lama dipangkas juga di server remote; dangling/build cache hanya lokal. |
Contoh: app di server remote + database di host
# bukan ${{database.app-db.url}} — host internal tidak terjangkau dari server lain
DATABASE_URL=postgresql://app:PASSWORD@203.0.113.5:15432/app_db- Isi Port host pada database (mis. 15432) dan batasi akses port itu di firewall host ke IP server remote.
- Salin password dari tab Ringkasan database (mask → salin).
Proxy & domain di server remote
Setiap server bisa menjalankan Traefik-nya sendiri. Di kartu server, bagian Proxy (Traefik) di server ini: atur port HTTP/HTTPS (default 80/443) dan Email ACME bila ingin sertifikat Let's Encrypt, lalu provision.
- Setelah proxy ada, aplikasi di server itu mendapat label Traefik dengan setelan server tersebut — tab Domain bekerja seperti di host.
- DNS domain harus mengarah ke IP server itu, bukan ke host aoox. Cek DNS membandingkan dengan host server yang terdaftar.
- Port 80/443 di server itu harus bebas; ACME HTTP-01 butuh port 80 terbuka dari internet.
- Tanpa proxy server, aplikasi tetap bisa diakses lewat Port host seperti sebelumnya.
Terminal ke server remote
Halaman Terminal punya select target: Host aoox atau salah satu server. Target diikat ke tiket oleh API, bukan dikirim dari browser. Lihat Web terminal.
Menghapus server
Jebakan umum
| Gejala | Penyebab & solusi |
|---|---|
| Tes: auth failed | Key belum diotorisasi, atau username salah. Jalankan perintah otorisasi sebagai user yang sama. |
| Tes: docker: command not found | Docker belum terpasang, atau PATH shell non-interaktif tidak memuatnya (snap). Pasang via get.docker.com. |
| Tes: permission denied while trying to connect to the Docker daemon | User bukan anggota grup docker. usermod -aG docker <user>, login ulang. |
| Deploy sukses tapi tidak bisa diakses | Port host belum diisi dan server belum punya proxy, atau firewall server menutup port itu. |
| Aplikasi tidak bisa konek ke database | Memakai referensi/host internal. Pakai koneksi eksternal + port host database. |
| Nixpacks/statis: build pertama sangat lama | Helper image & base image di-pull di server itu (sekali per server). |
Langkah berikutnya
Ada yang keliru? Edit halaman ini di GitLab ↗