Cara Deploy Aplikasi Web dengan Kamal di VPS DomaiNesia
Halo, DomaiNesians! Bagi kalian para developer atau tim IT, proses deploy aplikasi web sering kali menjadi tahap yang penuh tantangan. Mulai dari menyiapkan server, mengkonfigurasi environment, hingga memastikan aplikasi berjalan tanpa downtime. Semuanya butuh waktu dan ketelitian ekstra.
Nah, untuk kalian yang ingin proses deploy jadi lebih lancar, efisien, dan minim risiko, kalian bisa coba menggunakan Kamal. Kamal adalah tools deployment open-source (dari Basecamp/37signals) yang dirancang untuk menyederhanakan seluruh proses deployment aplikasi berbasis kontainer (Docker), mulai dari staging hingga produksi.
Nah, buat kalian yang tertarik menggunakan Kamal dalam proses deployment, simak artikel ini sampai tuntas ya!
Apa Itu Kamal?
Kamal adalah sebuah alat deployment berbasis CLI yang untuk mempermudah proses deployment atau peluncuran aplikasi web kontainer, terutama untuk mereka yang ingin beralih dari sistem deployment klasik seperti Capistrano.Â
Nama Kamal sendiri terinspirasi dari alat navigasi yaitu alat navigasi Arab kuno yang dulu digunakan oleh para pelaut Arab dan Asia Selatan untuk menentukan lintang di laut.
Berbeda dengan Kubernetes yang kompleks, atau Capistrano yang manual, Kamal adalah alat deployment yang menggabungkan kemudahan dan kontrol dengan skala rendah. Di sini, kamu bisa menggunakan berbagai fitur seperti:
- Automasi deployment (build, push, deploy, restart, hingga rollback).
- Pengelolaan container Docker secara terintegrasi.
- Dukungan multi-server tanpa downtime.
- Konfigurasi layanan tambahan seperti database, load balancer, dan proxy.
Kamal sendiri bekerja dengan cara mengatur seluruh proses deployment dari tahap build image Docker, meng-uploadnya ke container registry, hingga menjalankan aplikasi di server target. Selain itu, alat deployment yang satu ini juga bisa digunakan untuk berbagai kebutuhan seperti server fisik (bare metal), Virtual Machine (termasuk Cloud VPS DomaiNesia), dan lingkungan hybrid dengan banyak node.
Mengapa Memilih Kamal untuk Deployment?
Meskipun banyak tools deployment di luar sana, tapi Kamal punya beberapa keunggulan yang membuatnya cocok untuk developer di Indonesia. Berikut beberapa alasan mengapa kamu perlu mempertimbangkan untuk menggunakannya:
- Praktis dan Sederhana
Proses deployment dapat dijalankan hanya dengan beberapa perintah CLI, sehingga tidak butuh setup yang terlalu rumit.
- Automasi Menyeluruh
Mulai dari update kode, restart container, hingga migrasi database dapat dijalankan otomatis, sehingga mengurangi risiko human error.
- Stabil dan Andal
Deployment dilakukan secara rolling (bergilir), sehingga aplikasi tetap online selama proses update.
- Kompatibel dengan VPS Linux
Cloud VPS DomaiNesia mendukung berbagai distro Linux (Ubuntu, Debian, CentOS), yang sepenuhnya kompatibel dengan Kamal.
- Tanpa Downtime
Fitur rolling deployment dan health check memastikan aplikasi tetap tersedia untuk pengguna.
- Integrasi Layanan Tambahan
Kamal adalah tools yang bisa mengatur layanan seperti Traefik (reverse proxy) atau Redis, langsung dalam workflow deployment.
Syarat Deployment Kamal di VPS DomaiNesia
Untuk melakukan deployment aplikasi web dengan tools deployment, berikut beberapa persyaratan yang perlu kamu siapkan:
- VPS yang aktif dan bisa diakses via SSH. Pada tutorial kali ini, kita menggunakan Cloud VPS DomaiNesia dengan sistem operasi Ubuntu 22.04.
- Domain yang mengarah ke server (opsional, tapi disarankan).
- Akses root atau user dengan sudo privileges.
- Docker sudah terinstal di server.
- Kamal terinstal di sistem lokal atau langsung di server.
- Kode aplikasi web yang sudah siap dideploy (misalnya aplikasi Ruby on Rails, Laravel, atau Node.js).
Persiapan Deployment Menggunakan Kamal
Sebelum kita masuk ke tutorial bagaimana cara teknis deployment aplikasi web, berikut beberapa persiapan yang perlu kita lakukan.
1. Akses VPS dan Update Sistem
Pertama, login ke server Cloud VPS DomaiNesia menggunakan SSH:
|
1 |
ssh root@IP_SERVER |
Ganti IP_SERVER dengan alamat IP Server VPS kamu. Lalu, update sistem dengan perintah berikut:
|
1 |
sudo apt update && sudo apt upgrade -y |
2. Instal Docker di Server
Karena Kamal adalah tools deployment yang bekerja dengan container, kamu tidak perlu menginstal Ruby, Node.js, Laravel, atau PHP langsung di server. Cukup pastikan Docker sudah tersedia:
|
1 |
sudo apt update && sudo apt install -y docker.io |
Lalu cek versi Docker untuk memastikan instalasi berhasil:
|
1 |
docker --version |
Sebagai catatan, docker-compose tidak dibutuhkan untuk menjalankan Kamal, karena proses orkestrasi container sudah ditangani langsung oleh Kamal.
3. Instal Kamal
Dalam proses instalasi, kamu bisa memilih salah satu opsi berikut sesuai kebutuhan dan spesifikasi VPS kamu.
a. Opsi A – Install via Ruby
Jika Ruby sudah terpasang di VPS kamu, jalankan perintah berikut:
|
1 |
gem install kamal |
b. Opsi B – Jalankan via Docker (Tanpa Install Ruby)
Jika kamu tidak ingin menginstal Ruby, jalankan Kamal langsung lewat Docker. Selanjutnya, agar kamu tidak perlu mengetik perintah yang panjang setiap kali mengeksekusi perintah Kamal, buat alias dengan cara berikut:
c. Jalankan alias
|
1 |
alias kamal="docker run --rm -it -v $(pwd):/app ghcr.io/basecamp/kamal" |
d. Untuk membuat alias permanen (opsional)
Jika kamu tidak mau mengetik ulang setiap kali menjalankan perintah Kamal, simpan alias untuk membuatnya permanen.
|
1 2 |
echo 'alias kamal="docker run --rm -it -v $(pwd):/app ghcr.io/basecamp/kamal"' >> ~/.bashrc source ~/.bashrc |
4. Buat Proyek (Jika Belum Ada Proyek)
Untuk mendeploy aplikasi web menggunakan Kamal, kamu harus memiliki proyek yang ingin dideploy terlebih dahulu. Jika kamu belum punya proyek aplikasi web untuk dicoba, buat proyek Node.js sederhana sebagai dummy:
a. Buat folder proyek
|
1 |
mkdir kamal-dummy && cd kamal-dummy |
b. Buat file index.js
|
1 2 3 4 5 6 7 8 9 10 11 |
const express = require("express"); const app = express(); const port = process.env.PORT || 3000; app.get("/", (req, res) => {  res.send("Hello from Kamal 🚀"); }); app.listen(port, () => {  console.log(`App running on port ${port}`); }); |
c. Buat Dockerfile
|
1 2 3 4 5 6 |
FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm install COPY . . CMD ["node", "index.js"] |
5. Build dan Jalankan Docker (Opsional sebelum deploy)
Setelah berhasil membuat aplikasi, tes lokal aplikasi tersebut dengan build & run Docker.
|
1 2 3 |
docker build -t kamal-dummy . docker rm -f kamal-dummy  # hapus container lama jika ada docker run -d -p 3000:3000 --name kamal-dummy kamal-dummy |
Selanjutnya, cek log & pastikan aplikasi berjalan:
|
1 |
docker logs -f kamal-dummy |
Jika sudah berjalan, akses aplikasi dari browser kamu dengan URL berikut:
|
1 |
http://IP_SERVER:3000 |
Ganti IP_SERVER dengan alamat IP VPS kalian masing-masing. Jika berhasil maka akan muncul output sebagai berikut:
Dengan output tersebut, artinya proyek kamu sudah siap untuk dideploy menggunakan Kamal. Jika terjadi error saat kamu mengakses URL tersebut, jalankan perintah berikut untuk cek port 3000 apakah port tersebut diblokir firewall:
|
1 |
ufw allow 3000/tcp |
6. Konfigurasi Kamal
Setelah Kamal terinstal, jalankan perintah berikut untuk menginisialisasi Kamal di folder proyek:
|
1 |
kamal init |
Kamal menggunakan file deploy.yml untuk mengatur proses deployment. Struktur sederhananya:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
service: hello image: <dockerhub_username>/<image_name> servers:  - 103.127.x.x builder:  arch: amd64  remote: false registry:  server: docker.io  username: dockerhub_user  password:   secure: DOCKERHUB_PASSWORD env:  clear:   PORT: 3000 |
Dalam konfigurasi tersebut kamu bisa mengatur beberapa hal yaitu:
- Nama service aplikasi
- Image kontainer (nama yang ada di registry)
- List server target deploy
- Registri dan autentikasi
- Environment variable rahasia
Proses Deployment Aplikasi Web Menggunakan Kamal
Setelah konfigurasi siap, jalankan proses deployment aplikasi web menggunakan Kamal.
1. Setup Awal
Jalankan perintah berikut untuk setup awal Kamal:
|
1 |
kamal setup |
Kamal akan menyiapkan direktori, izin akses, dan service yang dibutuhkan di server.
2. Deploy Aplikasi
Setelah setup, jalankan perintah berikut untuk deploy aplikasi:
|
1 |
kamal deploy |
Perintah ini akan menjalankan beberapa proses yaitu:
- Build image Docker.
- Push image ke registry.
- Pull image ke server target
- Menjalankan container baru di server.
- Mengalihkan traffic via kamal-proxy setelah health check sukses
- Menghentikan container lama setelah container baru berjalan stabil.
- Menghapus image dan kontainer lama.
3. Mengelola Environment Variables
Tambahkan atau ubah variabel environment:
|
1 |
kamal env push |
Gunakan perintah ini setiap ada perubahan file .env.
4. Menjalankan Perintah di Server
Berikut contoh perintah yang bisa kamu jalankan:
|
1 |
kamal app exec 'rails db:migrate' |
Atau membuka bash shell dalam container:
|
1 |
kamal app exec -i bash |
Fitur Tambahan: Monitoring, Rollback, dan Management
Kamal juga punya beberapa perintah lain yang bisa kamu gunakan yaitu:
1. Monitoring dan Maintenance
Kamal menyediakan perintah untuk memantau status server:
|
1 |
kamal details |
Atau khusus aplikasi:
|
1 |
kamal app details |
2. Rollback Jika Terjadi Masalah
Jika deployment terbaru gagal, jalankan perintah berikut untuk melakukan rollback:
|
1 |
kamal rollback PREVIOUS_TAG |
Kamal akan mengembalikan container ke versi sebelumnya.
3. Membersihkan Server
Jalankan perintah berikut jika ingin menghapus aplikasi sepenuhnya:
|
1 |
kamal remove |
Sebagai catatan, sebelum menjalankan perintah kamal remove, pastikan kamu sudah melakukan backup server.
4. Mengelola Traefik
Berikut perintah untuk restart Traefik:
|
1 |
kamal traefik reboot |
Rolling restart untuk menghindari downtime:
|
1 |
kamal traefik reboot --rolling |
5. Cek Versi Aplikasi
Untuk cek versi aplikasi yang sedang berjalan menggunakan Kamal, gunakan perintah berikut:
|
1 |
kamal app version |
6. Menghentikan atau Memulai Kontainer
Jika kamu ingin menghentikan atau memulai ulang kontainer di Kamal, jalankan perintah berikut:
- Stop kontainer:
|
1 |
kamal app stop |
- Mulai ulang kontainer:
|
1 |
kamal app start |
Kesimpulan
Kamal adalah solusi praktis yang bisa digunakan untuk melakukan deployment aplikasi web dengan mudah dan cepat. Jika kamu ingin mendapatkan pengalaman deployment aplikasi dengan Kamal yang lancar tanpa kendala, kamu bisa mengkombinasikan Kamal dengan Cloud VPS DomaiNesia.
Dengan kombinasi tersebut kamu bisa melakukan deployment dengan cepat tanpa downtime, mengelola environment dengan aman, melakukan rollback dengan mudah jika ada masalah, serta menjaga server tetap optimal dan rapi.
Jadi, jika kamu ingin mencoba, mulailah dengan Cloud VPS DomaiNesia yang sudah dilengkapi akses root penuh, pilihan OS yang fleksibel, performa tinggi, dan backup otomatis.





