← Kembali ke Blog

Self-Host Coolify: Deploy dari Git, TLS, dan Backup Terjadwal di Satu VPS

Kamu sewa VPS. Tapi tiap project baru tetap mulai dengan cara yang sama: nulis Compose file lagi, nyusun blok reverse proxy lagi, bikin cron job lagi buat dump Postgres ke folder yang nggak pernah dicek siapa pun. Platform managed menghapus kerjaan itu, lalu menagih per seat dan per build minute, plus naruh pipeline deploy kamu di akun orang lain.

Coolify itu control plane yang kamu install di server sendiri. Dia clone repo kamu, build container, arahkan domain ke situ, terbitkan certificate, provisioning database, dan jalanin backup terjadwal. Panduan ini ngebahas jalur lengkapnya dari install sampai tes restore. Semua command, menu, dan angka di sini diambil dari dokumentasi resmi Coolify yang link-nya ada di bawah.

Prasyarat

  • Server Linux dengan akses root lewat SSH. Server baru lebih aman dibanding server yang sudah dipakai hal lain.
  • Batas minimum versi terdokumentasi adalah 2 core CPU, 2 GB RAM, dan 10 GB disk. Itu buat Coolify sendiri plus satu dua aplikasi kecil, bukan server produksi yang sibuk.
  • Ubuntu LTS (20.04, 22.04, atau 24.04) atau Debian. Coolify juga jalan di Arch, Alpine, dan Raspberry Pi OS 64-bit. Kalau kamu pakai Ubuntu non-LTS, pilih jalur install manual.
  • Port 22, 80, dan 443 terbuka. Port 8000 cuma buka sampai dashboard-nya pindah ke domain sendiri.
  • Docker sebaiknya bukan dari snap. Kalau dari snap, hapus dan biarkan installer pakai paket resmi Docker.
  • Domain yang bisa kamu arahkan ke server, kalau mau HTTPS di hostname sendiri. Buat tes cepat, kamu bisa pakai domain sslip.io yang digenerate Coolify dari IP server.

Langkah 1: install

curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash

Script-nya install Docker Engine versi 24 ke atas kalau belum ada, ngatur setelan daemon dan logging Docker, bikin direktori data di /data/coolify, generate SSH key yang dipakai Coolify buat ngelola server, lalu nyalain container Coolify plus reverse proxy-nya. Begitu selesai, terminal bakal nampilin link dashboard di port 8000.

Buka di browser: http://IP_SERVER:8000

Langkah 2: dua hal sebelum ngapa-ngapain

Bikin akun admin. Selama akun pertama belum ada, halaman registrasi terbuka, dan siapa pun yang daftar duluan jadi instance admin dengan akses ke host. Dokumentasinya nyebut ini langkah keamanan beneran, bukan formalitas, karena memang begitu.

Lalu copy /data/coolify/source/.env keluar dari server. File itu nyimpen APP_KEY yang dipakai buat enkripsi value di database Coolify. Kalau kamu restore instance tanpa file ini, secret yang tersimpan nggak akan bisa dibuka.

Kalau kamu nggak mau jendela registrasi itu kebuka sama sekali, bikin root user waktu install dengan cara ini:

sudo -E env ROOT_USERNAME=RootUser [email protected] ROOT_USER_PASSWORD='password-kuat' bash -c 'curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash'

Langkah 3: firewall

ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 8000/tcp
ufw enable
ufw status verbose

Port 8000 sifatnya sementara. Begitu dashboard sudah bisa dibuka lewat HTTPS di domain kamu, tutup lagi.

Satu catatan dari halaman troubleshooting Coolify: aturan ufw LIMIT di port 22 bisa bikin koneksi server kelihatan nggak stabil, karena koneksinya lewat SSH dan rate limit-nya ikut kena. Pakai aturan allow biasa buat SSH lebih aman.

Langkah 4: domain dashboard dan TLS

Arahkan record A ke server dulu, misalnya coolify.example.com. Habis itu buka Settings, masuk ke Configuration, lalu General, dan set URL ke https://coolify.example.com.

Certificate-nya baru bisa terbit kalau tiga hal terpenuhi: hostname resolve ke server ini, port 80 dan 443 sampai ke proxy Coolify, dan domainnya tersimpan di Coolify. Yang kamu tulis cuma satu baris URL HTTPS, sisanya proxy yang minta certificate-nya.

Langkah 5: buktikan pipeline-nya dengan deploy sekali pakai

Sebelum nyambungin repository, deploy sesuatu yang nggak mungkin gagal karena kode.

Bikin project, pilih Create New Resource, pilih Docker Image, lalu isi nginx:alpine. Set Ports Exposes ke 80. Deploy.

Coolify bikin domain tes dengan pola http://UUID.IP_SERVER.sslip.io. Buka URL-nya. Begitu halaman welcome Nginx muncul, empat lapisan sekaligus terbukti jalan: server, daemon Docker, proxy, dan routing domain. Kalau halamannya nggak muncul, cek log deployment dan pastikan Ports Exposes-nya 80, karena itu penyebab paling umum deploy pertama yang "sukses" tapi nggak nyajiin apa-apa.

Langkah 6: deploy aplikasi beneran dari Git

Bikin resource baru dari URL repository publik, deploy key, atau GitHub App buat repo privat. GitHub, GitLab, Bitbucket, dan Gitea semuanya didukung.

Pilih build pack:

  • Nixpacks bikin image dengan mendeteksi stack kamu dan generate Dockerfile-nya. Railpack adalah penerusnya dan cara kerjanya sama.
  • Static nyajiin file hasil build lewat Nginx, ini yang kamu mau buat situs Astro, Vite, atau generator lainnya.
  • Dockerfile dan Docker Compose nyerahin build ke file yang memang kamu rawat sendiri. Pakai ini kalau Dockerfile hasil generate terus salah tebak.

Habis itu set domain di field Domains, pakai URL lengkap: https://app.example.com. Tanpa port, Coolify ngarahin trafik ke port 80 di dalam container. Kalau aplikasimu dengerin port 3000, tulis https://app.example.com:3000 dan trafiknya diarahkan ke port container itu.

Environment variable ada di bagian Environment Variables punya resource. Buat resource Docker Compose, referensi di dalam Compose file seperti ${DATABASE_URL} bikin Coolify otomatis nyiapin field yang bisa diedit, jadi nilainya nggak ikut masuk ke repository. Operator-nya wajib kamu tahu: ${VAR:-default} ngisi nilai awal, dan ${VAR:?} nandain variable sebagai wajib, yang bikin deployment diblokir sampai kamu isi.

Auto deploy datang dari integrasi Git. Sambungkan lewat GitHub App, lalu buka Configuration, Advanced, Deployment & Git, dan aktifkan Auto Deploy. Push ke branch yang dikonfigurasi bakal trigger deployment. Di monorepo, set Watch Paths di Configuration, General, Build jadi misalnya apps/api/** atau packages/shared/**, biar commit yang cuma nyentuh dokumentasi nggak nge-rebuild API kamu.

Rollback bukan fitur terpisah. Semua riwayat ada di Deployments, dan redeploy commit sebelumnya cukup pakai satu tombol.

Langkah 7: database, lalu backup

Coolify bikin Postgres, MySQL, MariaDB, MongoDB, dan ClickHouse sebagai resource sekali klik dengan kredensial yang digenerate otomatis. Dua hal operasional lebih penting dari proses setup-nya.

Pertama, aplikasimu ngobrol sama database lewat jaringan internal Docker. Port container-nya nggak dipublish, dan sebaiknya tetap begitu. Cuma klien di luar server yang butuh port publik, dan itu saklar sadar, bukan default.

Kedua, backup-nya cukup beneran buat dipakai. Buka database, masuk ke Backups, dan tambah schedule. Schedule-nya berupa cron expression, tersedia preset dari every_minute sampai yearly. Pilih database mana yang ikut, lalu tambah target S3-compatible. Khusus Postgres, Coolify jalanin ini:

pg_dump --format=custom --no-acl --no-owner --username postgres myapp

Restore-nya pakai tool pasangannya:

pg_restore --verbose --clean -h localhost -U postgres -d postgres pg-dump-postgres-1700000000.dmp

Satu peringatan yang sering kena waktu upgrade: dump format custom sensitif terhadap beda versi antara pg_dump dan pg_restore. Pindah ke major version Postgres yang lebih baru lebih mulus pakai dump plain atau tar, lalu restore lewat psql. Dan lakukan satu kali tes restore ke database buangan sekarang juga. Backup yang belum pernah kamu restore itu dugaan, bukan rencana pemulihan.

Database milik Coolify sendiri juga dibackup lewat mekanisme yang sama, jadi satu bucket bisa nampung dua-duanya.

Langkah 8: upgrade

Ada tiga mode. Automatic ngambil versi baru sendiri. Semi-automatic nampilin tombol Upgrade di sidebar dan nunggu kamu klik. Manual berarti jalanin installer-nya lagi:

curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash

Buat kunci versi tertentu, kirim sebagai argumen: bash -s 4.0.0-beta.400. Dokumentasinya minta satu hal sebelum semua ini dijalankan, dan ini berlaku buat semua platform self-hosted: backup dulu. Kalau kamu mau ngetes rilis sebelum masuk production, matikan automatic update di Settings dan upgrade instance staging-nya manual.

Kapan pakai, kapan jangan

Coolify cocok kalau kamu jalanin beberapa aplikasi dan mau ada dashboard, TLS, provisioning database, dan backup terjadwal tanpa nulis sendiri semua plumbing-nya.

Pilih Docker Compose biasa plus proxy kalau cuma ada satu dua service yang jarang berubah. Moving parts-nya lebih sedikit dan kontrolnya penuh, tapi certificate, backup, dan script deploy jadi kode milik kamu.

Dokku kasih deploy ala Heroku lewat git push dari CLI, tanpa dashboard. Kamal deploy dari CI langsung ke server lewat SSH dan nggak ninggalin control plane yang jalan terus di mesinnya. Dua-duanya komitmen yang lebih kecil daripada PaaS penuh, dan dua-duanya mengasumsikan kamu nyaman tanpa UI web.

Cloud PaaS, termasuk opsi hosted dari Coolify sendiri, jawaban yang tepat kalau kamu memang nggak mau jadi operator. Coolify Cloud ngejalanin control plane-nya buat kamu mulai 5 dolar per bulan, sementara workload tetap di servermu.

Yang kamu bayar saat self-host, konkretnya:

  • Coolify ngelola server lewat SSH, termasuk host tempat dia jalan. Dokumentasinya jelas: localhost diizinkan tapi nggak direkomendasikan sebagai satu-satunya target, karena server yang sibuk bisa bikin Coolify sendiri nggak responsif justru saat kamu butuh.
  • Satu container proxy jalan per server. Pindah dari Traefik ke Caddy, atau ke Custom dengan proxy sendiri, bakal motong semua rute publik sampai resource-nya di-redeploy dengan label baru.
  • Tetap satu mesin. Satu VPS, satu disk, satu control plane. Copy database di S3 dan file .env yang nyimpen APP_KEY sebaiknya memang ada di luar server.

Verdict

Buat developer solo atau tim kecil yang sekarang bayar beberapa managed service, Coolify menggantikan sebagian biaya itu dengan satu VPS kecil dan satu sore buat setup. Yang kamu beli adalah kenyamanan dengan jejak audit milik sendiri. Yang kamu ambil alih adalah sistem operasinya, daemon Docker-nya, renew TLS, dan latihan restore-nya.

Kerjakan latihan restore-nya. Langkah itu yang misahin konfigurasi backup dari kemampuan pemulihan sebenarnya.

Langkah berikutnya

Set up instance backup biar /data/coolify sendiri juga keluar dari server, aktifkan two-factor authentication di akun admin, dan tutup port 8000 setelah dashboard punya domain. Kalau timmu lebih dari satu orang, tambahkan member dengan role yang sesuai daripada berbagi login root.

Referensi

Butuh Bantuan Implementasi?

Saya membantu tim mendesain dan membangun infrastruktur cloud scalable, pipeline DevOps, dan sistem production-grade.

Konsultasi Gratis