- Artikel ini adalah checklist yang mendokumentasikan prosedur self-hosting VPS dengan Hetzner dan Coolify secara rinci langkah demi langkah
- Hetzner direkomendasikan karena latensi rendah di Eropa, rasio harga terhadap performa yang sangat baik, dan skema harga yang transparan
- Mencakup isu yang sering ditemui di praktik nyata seperti setup server awal yang berfokus pada keamanan, keamanan SSH, firewall, dan cara mengatur pembaruan otomatis
- Menjelaskan secara detail konfigurasi lingkungan production, monitoring, backup, dan pemecahan masalah untuk melakukan deployment aplikasi Node.js dengan aman
- Ini adalah panduan praktis untuk membangun kapabilitas DevOps dan kemampuan pengelolaan yang fleksibel sambil menyiapkan server sendiri
Checklist persiapan setup VPS
- Pada bagian pemilihan penyedia layanan VPS, Hetzner disebut sebagai opsi yang direkomendasikan dari sisi harga/performa
- Pilih spesifikasi minimal 1GB RAM dan 20GB storage, serta catat alamat IP server dan informasi akun root
- Siapkan klien SSH di mesin lokal, dan gunakan generator kata sandi yang kuat
Alasan memilih penyedia VPS
- Hetzner Cloud murah, cepat, dan andal di wilayah Eropa
- Alternatif: DigitalOcean (onboarding/dokumentasi sangat baik, harga meningkat), AWS Lightsail (terikat dengan AWS, lebih sulit untuk pemula), Linode (stabil tetapi kurang kompetitif dari sisi harga), Render/Fly.io (nyaman sebagai PaaS tetapi biaya dan keterbatasannya lebih besar)
- Hetzner 2–3 kali lebih murah untuk spesifikasi yang setara, tanpa penagihan yang tidak transparan, dan unggul karena data center di Eropa
Checklist setup server awal
Koneksi pertama dan pembaruan sistem
- Perbarui daftar paket dan lakukan upgrade sistem
- Menyediakan perintah untuk memeriksa informasi sistem (contoh: uname -a, cat /etc/os-release)
Pengaturan keamanan akun root
- Tetapkan kata sandi yang kompleks dan simpan dengan aman
- Buat akun pengguna yang unik alih-alih memakai nama akun yang lazim seperti 'admin' atau 'user'
- Berikan hak sudo ke akun baru dan verifikasi apakah sudah diterapkan dengan benar
Konfigurasi autentikasi kunci SSH
- Buat pasangan kunci Ed25519 (disarankan) atau RSA di mesin lokal
- Tambahkan kunci publik ke
.ssh/authorized_keys di server lalu atur izinnya
- Pastikan login dengan kunci SSH berfungsi normal (bisa terhubung tanpa memasukkan kata sandi)
- Nonaktifkan autentikasi kata sandi, dan bila perlu periksa juga file terpisah milik cloud-init
- Restart daemon SSH dan pastikan statusnya berjalan normal
- Pastikan login root dinonaktifkan untuk memblokir akses root jarak jauh
Checklist pengaturan firewall
Pengaturan dasar UFW
- Tolak semua koneksi masuk secara default, izinkan koneksi keluar
- Izinkan port SSH, HTTP(80), HTTPS(443) dan pastikan UFW diterapkan
- Opsi: batasi port SSH ke IP tertentu, dan ubah nomor port (untuk memperkuat keamanan) sebagai lapisan pertahanan tambahan
Checklist pengaturan pembaruan otomatis
Konfigurasi Unattended Upgrades
- Instal paket unattended-upgrades dan apt-listchanges, lalu pilih persetujuan penggunaan default
- Dapat mengaktifkan pembaruan keamanan dengan membuka komentar terkait, serta mengatur notifikasi email dan opsi reboot otomatis
- Uji apakah pembaruan otomatis bekerja dan periksa statusnya
Checklist deployment aplikasi production
Konfigurasi lingkungan operasional Node.js
- Instal Node.js LTS dan verifikasi versinya
- Unggah file aplikasi ke server lalu lakukan instalasi dependensi untuk persiapan produksi
Menggunakan process manager (PM2)
- Jalankan aplikasi dengan PM2 dalam mode production, dengan opsi clustering
- Atur PM2 agar otomatis berjalan saat boot, serta sediakan perintah restart/monitoring
Pengaturan reverse proxy (Nginx)
- Buat file konfigurasi situs Nginx dan terapkan proxy pass
- Aktifkan situs lalu restart Nginx
Checklist pengaturan sertifikat SSL
Let's Encrypt dan Certbot
- Setelah menginstal certbot dan python3-certbot-nginx, lakukan penerbitan sertifikat SSL otomatis berbasis domain
- Sediakan opsi otomatisasi perpanjangan dan pengujian validitas sertifikat
Checklist monitoring dan pemeliharaan
Metode monitoring dasar
- Instal alat pemeriksaan sumber daya sistem seperti htop dan iotop
- Lakukan monitoring log real-time untuk syslog dan auth.log, serta atur kebijakan rotasi log (logrotate)
Strategi backup
- Tulis skrip backup aplikasi dan database menggunakan tar
- Jalankan backup berkala sesuai jadwal (crontab)
Checklist pemecahan masalah
Masalah koneksi SSH
- Periksa pengaturan firewall, status layanan SSH, log autentikasi, dan jaringan
Error terkait izin
- Periksa izin file/folder, grup, dan pengaturan sudo
Layanan tidak berjalan
- Periksa status dan log dengan systemctl dan journalctl, lalu cek sintaks file konfigurasi
Penggunaan resource berlebihan
- Analisis log proses/disk/jaringan/aplikasi
Checklist verifikasi akhir
Verifikasi keamanan
- Tinjau apakah semua item seperti autentikasi kunci SSH/login kata sandi/login root/firewall/pembaruan otomatis/mode production/SSL/backup berfungsi dengan baik
Uji performa
- Lakukan load test dengan Apache Bench sambil memantau resource dan memeriksa error pada log
Daftar perintah referensi cepat
Periksa informasi sistem
- htop, df -h, free -h, uname -a
Manajemen proses
- pm2 status, pm2 restart all, pm2 logs, pm2 monit
Terkait keamanan
- sudo ufw status, sudo fail2ban-client status, sudo lynis audit system
Manajemen layanan
- sudo systemctl status nginx, sudo systemctl restart nginx, sudo journalctl -u nginx
Penutup
- Checklist ini menyediakan prosedur setup dan pengelolaan VPS yang lengkap
- Bukan hanya hemat biaya, tetapi juga memberi pengelolaan langsung, pembelajaran, dan otonomi DevOps
- Self-hosting dengan Hetzner dan Coolify memungkinkan pengalaman kepercayaan diri dan kebebasan melalui pengalaman praktis
- Ini adalah konten yang berfungsi sebagai panduan nyata bagi mereka yang ingin mencoba hosting VPS
1 komentar
Opini Hacker News
Menurut saya ini ringkasan yang sangat bagus untuk pemula, pasti akan saya bookmark.
Tapi sayangnya, meskipun Coolify disebut di judul, isinya hampir tidak membahasnya.
Tulisan lain yang bermanfaat dengan topik serupa adalah 'Setting up a Production-Ready VPS from Scratch', dan saya juga menyimpannya lewat tautan di bawah ini.
https://dreamsofcode.io/blog/setting-up-a-production-ready-vps-from-scratch
Saat ingin memahami topik seperti itu lebih dalam, saya biasanya memasukkan tautan artikel ke LLM lalu
"Ini adalah artikel tentang 'topik/judul': https://article.link. Pahami dan analisis dengan baik, lalu kembangkan tiap bagiannya dengan pengetahuanmu sendiri, dan tambahkan juga bagian tambahan yang relevan"
Saya belajar dengan prompt seperti itu.
https://www.youtube.com/watch?v=taJlPG82Ucw
Saya sudah menjalankan setup ini sekitar 1 tahun, dan ini pertama kalinya self-hosting terasa benar-benar bisa saya tangani dengan percaya diri.
OVH juga sama andalnya dengan Hetzner, dan sekarang punya penawaran yang jauh lebih murah.
https://us.ovhcloud.com/vps/configurator/?planCode=vps-2025-model3&brick=VPS%2BModel%2B3&pricing=upfront12&processor=%20&vcore=8__vCore&storage=200__SSD__NVMe
Kalau memakai Coolify, saya sedang mempertimbangkan distro mana yang sebaiknya dipilih.
Saya bimbang antara Ubuntu 24.04 dan Debian 13, mana yang lebih baik.
OVH VPS - 24 vCPU (atau thread), RAM 96GB seharga $53.4 per bulan.
Hetzner VPS (dengan opsi AMD) adalah 16vCPU, 32GB, $54.9/bulan.
DO Droplet adalah 16vCPU, RAM 64GB dengan harga $504/bulan.
Linode dan Upcloud juga jauh lebih mahal dibanding OVH, di kisaran 24~20vCPU dan RAM 96GB seharga $576/bulan.
Saya tidak tahu CPU apa yang dipakai OVH, tapi bahkan jika itu CPU Intel E-Core, dengan selisih harga seperti ini tetap terlihat sangat menarik.
Sebagai referensi, Hetzner juga punya opsi Intel vCPU yang lebih murah, tetapi itu perangkat keras lama dan slot hanya tersedia jika pelanggan lain membatalkan.
Jadi saya hanya memakai opsi AMD terbaru sebagai pembanding.
Satu-satunya masalah OVH adalah kalau ingin menyewa VPS mereka (sekitar $30/bulan), saya harus mengirim salinan kartu identitas.
Saya tidak ingin menyebarkan data pribadi saya seperti itu, jadi akhirnya saya memilih penyedia yang lebih mahal.
Dalam pengalaman saya (meski tidak terlalu panjang), server cloud Hetzner performanya jauh lebih baik daripada OVH VPS.
Saya tetap puas memakai keduanya.
Saya penasaran kenapa OVH dan Hetzner bisa semurah ini dibanding penyedia lain.
Untuk VPS mungkin masih bisa dimengerti karena lebih banyak berbagi sumber daya, tapi dedicated server mereka juga sangat murah.
Saya jadi bertanya-tanya apakah ini semacam honeypot, atau mungkin harga OVH memang baru berubah belakangan ini.
Saya ingat beberapa tahun lalu harganya lebih mahal daripada Hetzner.
Semua CPU yang disebut di sini kemungkinan besar sebenarnya adalah sumber daya bersama.
Dan mereka juga tidak mengungkap seberapa besar tingkat pembagiannya.
Di Hetzner ada server dengan jumlah core yang sama tapi harganya setengahnya.
Di atas kertas tidak terlihat, tapi kalau dites performanya, server yang murah itu memang hanya memberi sekitar separuh kinerja.
Setelah mematikan dua pengaturan CSS di bawah ini, UI/UX blog jadi jauh lebih baik.
pre {
margin: 2rem 0 !important;
padding: 1rem !important;
}
Padding dan margin pada blok kode terlalu besar sehingga di layar hanya terlihat 3 baris.
Dan kalau memasang Webmin/Virtualmin, pekerjaan seperti menambah subdomain atau user baru jadi jauh lebih mudah.
Saya mengklik karena penasaran dengan Coolify, tapi ternyata itu hanya disebut di tag, pengantar, penutup, dan semacamnya, sementara isi utamanya tidak membahasnya.
Menurut saya penyebutan Coolify itu sendiri tidak tepat.
Tulisan ini sebenarnya tentang cara menyiapkan VPS untuk deployment Coolify.
Tidak membahas instalasi Coolify itu sendiri.
Selama ini saya mengelola semua layanan di VM dengan Docker Compose, jadi saya mengklik karena penasaran apakah Coolify akan menjadi alternatif yang jauh lebih baik daripada cara itu.
Tapi ternyata sama sekali tidak ada pembahasan nyata tentang Coolify, dan pekerjaan manual untuk menyiapkan Coolify justru terlihat lebih rumit.
Cara saya yang “cukup pakai base image Docker Compose lalu ubah sedikit” terlihat jauh lebih sederhana,
jadi saya merasa cara yang saya pakai masih sangat layak dipertahankan.
Nilai plusnya, pindah antar host juga 99% selesai hanya dengan menyalin satu file YAML Docker Compose.
Saya mencoba Coolify beberapa bulan lalu, dan muncul berbagai masalah saat beberapa container dihubungkan lewat Compose.
Misalnya, saya lupa ada container tertentu yang sudah berjalan lalu tanpa sengaja menjalankannya lagi, atau keduanya berjalan tapi di Coolify hanya satu yang terdeteksi.
Kalau tiap service didaftarkan terpisah di Coolify, hasilnya lumayan lebih baik.
Pada akhirnya saya juga kembali ke setup mandiri berbasis Docker Compose, dan justru jauh lebih mudah dioperasikan.
Saya benar-benar merasa upaya seperti Coolify itu perlu, tapi untuk sekarang masih belum cukup matang untuk dipakai di operasi yang serius.
Jika Coolify atau proyek serupa tidak mendukung backup database dan streaming replication, itu akan tetap berada di ranah hobi saja.
Saya menjalankan 2 VM dengan Docker Compose dan skrip bash, dan menurut saya hanya dengan menyiapkan backup per jam ke S3, wal streaming, serta streaming replication untuk PG dan Redis saja sudah memenuhi syarat minimum untuk operasi nyata.
Tergantung kebutuhan pemakaian, tapi saya sudah mencoba Coolify dan CapRover.
Akhirnya saya memilih CapRover karena dengan Git Hook ia bisa build otomatis setiap kali commit, sehingga aplikasi NodeJS bisa dijalankan lebih cepat.
Keduanya mendukung fitur ini, tetapi CapRover terasa lebih minim friksi.
Di sisi lain, Coolify punya lebih banyak fitur.
Coolify berjalan di atas Traefik dan Docker, dan pada dasarnya hanyalah UI di atas itu.
Banyak fitur penting terkait backup yang masih tidak ada (meski bisa diatasi dengan sesuatu seperti restic), dan UX-nya juga hanya sekadar lumayan.
Coolify masih membutuhkan hak akses root saat instalasi.
Saya dengar mereka sedang mengembangkan branch yang memungkinkan instalasi tanpa hak akses root.
Anda bisa login ke server lewat ssh, memasang Coolify, lalu setelah itu menonaktifkan login root.
Kalau Anda siap menghapus server dan menyiapkannya lagi dari awal, itu bisa dilakukan.
Saya juga baru-baru ini mencoba deployment Coolify benar-benar dari nol, tapi terus kena error di ssh key.
Saya memang berhasil men-deploy banyak proyek di server lain, tetapi pendekatan “cukup beri file docker compose” belum pernah benar-benar bekerja dengan baik dalam praktik buat saya.
Saya baru-baru ini memindahkan server FreeBSD ke Hetzner, dan prosesnya sangat mudah.
Satu-satunya variabel adalah port untuk mail server diblokir sampai siklus pembayaran benar-benar selesai.
Saya paham kebijakan itu, tapi karena tidak dijelaskan dengan jelas di awal, saya sempat kaget.
Sebagai catatan, kalau kartu kredit Anda kedaluwarsa, Hetzner bisa langsung memutus jaringan sepenuhnya.
Tidak ada peringatan sebelumnya, dan saya baru tahu setelah dihubungi pelanggan atau staf.
Ini benar-benar pernah terjadi pada saya.
Jika Anda menghubungi tim Hetzner dan menjelaskan jenis trafiknya, mereka kadang bisa membuka port lebih awal.
Saya menunjukkan bukti proyek yang akan dimigrasikan, dan mereka langsung membukanya.
Alat seperti Coolify (atau Dokploy) juga terlihat bagus, tapi saya selalu merasa kurang karena status server tidak terekam sebagai kode.
Karena itu saya lebih suka NixOS atau Ansible, tetapi untuk benar-benar membangun production setup, keduanya butuh terlalu banyak boilerplate dan kustomisasi.
Saya penasaran apakah ada yang tahu framework infrastructure-as-code yang bukan Kubernetes, tapi lebih deklaratif dan memudahkan pengelolaan server produksi.
Nyaris tidak banyak yang perlu dibackup dari konfigurasi Coolify, dan semua pengaturan aplikasi ada di /data/coolify.
Saya membackup seluruh volume dengan kopia.
Ini memang bukan solusi yang elegan, agak hacky, tapi cukup berguna untuk disaster recovery.
Panduannya bagus.
Tapi saya tidak setuju dengan pengaturan firewall-nya, terutama kalau memakai Hetzner.
Kalau hanya butuh konfigurasi sederhana, firewall bawaan Hetzner saja sudah cukup dan efek “outsourcing”-nya juga besar.
Kalau ingin lebih kustom, itu juga bisa diatur lewat API.
https://docs.hetzner.cloud/reference/cloud#firewalls
Saya penasaran apakah firewall Hetzner punya kekurangan fatal tertentu.
Saya rasa saran "izinkan SSH hanya dari IP saya saja (opsional tapi direkomendasikan)" itu berbahaya.
Kalau IP berubah, Anda bisa benar-benar terkunci keluar.
Memang bisa di-reset lewat dashboard Hetzner, tapi daripada mengikatnya ke IP rumah yang terus berubah, lebih baik memakai sesuatu seperti Tailscale
atau punya IP VPN eksternal yang statis.
Hanya dengan memakai autentikasi kunci untuk SSH saja, hampir semua masalah keamanan utama sudah bisa dicegah.
Menambahkan lapisan untuk mengurangi noise log juga bagus, dan jika ada layanan selain SSH yang tidak perlu diekspos ke internet,
lebih baik lindungi dengan VPN atau semacamnya.
Sebenarnya, di server kebanyakan layanan lain lebih rentan daripada SSH.
Ya, memang berbahaya.
Banyak orang memakai IP dinamis di rumah.
Menurut saya cukup aman jika menyiapkan SSH key dan memblokir login root.
Menurut saya bagian setup aplikasi produksi sebaiknya diganti dengan Docker.
Sekarang Docker jauh lebih repeatable dan lebih mudah dikonfigurasi.