$ aoox

DocsInfrastruktur

Docker Swarm

Menjalankan aplikasi sebagai service dengan replika di beberapa mesin, memakai orkestrator yang sudah ada di Docker — tanpa Kubernetes.

Untuk apa
Beberapa mesin di bawah satu panel
Bentuk
Aplikasi sebagai service + replika
Siapa
Owner (init/leave/node), admin melihat status

Swarm atau server remote?

Server remote (SSH)Swarm
BentukPanel mengendalikan daemon lain lewat SSHSatu cluster; scheduler Docker yang menempatkan task
AplikasiSatu container di server yang dipilihN replika yang bisa tersebar di beberapa node
DomainProxy per server (atau port host)Traefik di manager dengan swarm provider
Cocok untukLingkungan terpisah, region berbedaMenambah kapasitas untuk aplikasi yang sama

Keduanya bisa dipakai bersamaan: host aoox menjadi manager swarm, sementara server remote tetap melayani aplikasi lain secara terpisah.

Alur

  1. 01inithost jadi manager, overlay aoox-swarm dibuat
  2. 02joinnode lain bergabung dengan token dari panel
  3. 03serviceaplikasi diubah ke Mode deploy service + replika
  4. 04rollingdaemon mengganti task bertahap, rollback bila gagal

Mengaktifkan swarm

  1. Settings → Docker Swarm → Init swarm (owner)

    Isi Advertise address bila host punya lebih dari satu IP — alamat inilah yang dipakai node lain untuk menghubungi manager. Kosongkan untuk deteksi otomatis.

    aoox menjadikan daemon host sebagai manager, membuat overlay network aoox-swarm yang bisa di-attach, memasukkan proxy dan managed database ke sana, lalu mengaktifkan swarm provider Traefik.

  2. Gabungkan node lain

    Kartu Swarm menampilkan perintah join lengkap dengan token — jalankan di mesin yang akan bergabung (Docker sudah terpasang, port 2377, 7946, dan 4789/udp terbuka antar node):

    docker swarm join --token SWMTKN-1-… <ip-manager>:2377

    Token worker dan manager berbeda; token hanya ditampilkan kepada owner. Node yang bergabung muncul di daftar node beberapa detik kemudian.

  3. Pastikan registry terjangkau dari node lain

    Node menarik image sendiri dari registry lokal. Status swarm memperingatkan bila REGISTRY_PUBLIC_HOST masih localhost — node lain tidak bisa menariknya. Set ke hostname/IP yang terjangkau (dengan TLS atau insecure-registries) — lihat Registry.

Mengelola node

AksiEfek
Availability: activeNode menerima task baru.
Availability: pauseTask yang ada tetap jalan; tidak menerima task baru.
Availability: drainTask dipindahkan ke node lain — dipakai sebelum maintenance.
Role: manager / workerPromosikan atau turunkan node. Jumlah manager ganjil (1, 3, 5) agar kuorum aman.
LabelPasangan key=value, mis. zone=eu — dipakai sebagai constraint penempatan.
Hapus nodeDitolak (409) bila node masih aktif; drain dulu, lalu hapus. Di node itu jalankan docker swarm leave.

Aplikasi sebagai service

Di Pengaturan aplikasi, ubah Mode deploy dari container ke service:

FieldKeterangan
ReplikaJumlah task yang dijalankan. Stop = skala ke 0; Start mengembalikannya.
PenempatanNode tertentu, atau constraint bebas (node.labels.zone==eu, node.role==worker, node.hostname, node.platform.os).
Rolling updateParalelisme (berapa task diganti sekaligus), jeda antar batch, dan urutan (start-first / stop-first).
  • Pergantian mode, replika, penempatan, atau limit dijalankan sebagai deployment config — tanpa build, dan tidak memblokir request.
  • Daemon melakukan rolling update sendiri; bila task baru tidak pernah jalan sampai batas waktu, spec lama dikembalikan dan aplikasi tetap melayani.
  • Aplikasi yang punya mount selalu ditempatkan di host tempat volumenya berada — volume Docker tidak ikut berpindah node.
  • Deploy ulang yang identik tetap memicu rolling update (ForceUpdate), jadi tombol Deploy selalu berefek.

Yang perlu diketahui tentang task

AspekDi mode service
LogSemua task, dari node mana pun.
MetrikDijumlahkan dari task yang berjalan di host — Engine API tidak bisa membaca task di node lain.
Job & terminal execHanya task lokal.
NotifikasiWatcher memberi tahu bila service bertahan di bawah jumlah replika (task yang tidak pernah start).
DomainTraefik swarm provider merutekan ke service, bukan ke container.

Keluar dari swarm

Kembalikan dulu semua aplikasi ke Mode deploy: container — keluar dari swarm menghapus service yang berjalan. Setelah itu Settings → Docker Swarm → keluar (owner). Node lain perlu menjalankan docker swarm leave sendiri.

Jebakan umum

GejalaPenyebab & solusi
Task pending: no suitable nodeConstraint tidak cocok dengan label node mana pun, atau aplikasi punya mount sehingga terkunci di host. Longgarkan penempatan.
Node lain: image pull failed / x509REGISTRY_PUBLIC_HOST masih localhost, registry tanpa TLS, atau node belum punya entri insecure-registries.
Service tidak pernah mencapai jumlah replikaHealth check gagal atau resource kurang; rolling update di-rollback otomatis setelah timeout. Cek log task.
Metrik kosong untuk aplikasi di node lainSesuai batasan: metrik hanya dari task lokal.
Node hilang setelah rebootDaemon node belum start, atau firewall menutup port swarm (2377/7946/4789).
Belum tersedia
Stack compose sebagai swarm stack; secret/config Swarm; exec dan metrik lintas node; penjadwalan otomatis volume antar node.

Langkah berikutnya

Ada yang keliru? Edit halaman ini di GitLab ↗