Independent testing Updated August 2026 387 self-hosting guides 5 VPS providers tested

guide

Cara Menghosting Sendiri Windmill di VPS (Panduan Lengkap)

Terapkan Windmill, alternatif sumber terbuka untuk Retool dan Temporal, di VPS dengan tumpukan compose resmi. Ukuran worker nyata, TLS via Caddy, pencadangan, dan penskalaan.

Windmill mengubah skrip menjadi webhook, alur kerja, tugas cron, dan antarmuka internal - alternatif sumber terbuka untuk Retool dan Temporal. Menghostingnya sendiri tergolong lugas, dengan satu hal yang perlu diketahui sebelum mulai: Windmill tidak memakai Redis, terlepas dari apa yang dikatakan sejumlah panduan di internet.

Mengapa Menghosting Sendiri Windmill?

Paket cloud menagih per kursi sekaligus per eksekusi. Menghosting sendiri menghapus kedua meteran itu, dan untuk platform otomatisasi hal itu penting, karena pekerjaan yang paling ingin Anda jalankan terjadwal justru pekerjaan yang akan menumpuk biaya eksekusi. Cara ini juga menyimpan skrip, kredensial, dan log pekerjaan Anda di mesin sendiri, dan skrip-skrip itu rutin memegang kunci API untuk segala hal lain yang Anda jalankan.

Edisi komunitas berlisensi AGPL-3.0. Build enterprise berada di balik kunci lisensi dan tag image berbeda; Anda tidak memerlukannya untuk menjalankan platformnya.

Memilih VPS yang Tepat

Windmill diukur per worker, bukan per aplikasi. Patokannya satu worker per vCPU dengan 1-2 GB RAM masing-masing, di atas kebutuhan Postgres dan proses server.

PenyediaPaketvCPU / RAM / DiskHargaCatatanTautan
ContaboCloud VPS 44 / 8 GB / 100 GB SSD5,50 EUR/bulan netEmpat core berarti paralelisme empat workerContabo
Hetzner CloudCX232 / 4 GB / 40 GB NVMe5,49 EUR/bulan netPas untuk tumpukan bawaan dua workerHetzner
DigitalOceanBasic 4 GB2 / 4 GB / 80 GB SSD24 USD/bulanSpesifikasi sama dengan CX23 pada harga empat kali lipatDigitalOcean
VultrRegular 4 GB2 / 4 GB / 80 GB SSD20 USD/bulanPilihan region terluasVultr
LinodeLinode 4 GB2 / 4 GB / 80 GB SSD24 USD/bulanKinerja mudah ditebakLinode

Karena throughput mengikuti jumlah worker, di sini jumlah core lebih penting daripada kecepatan clock. Untuk perbandingan terperinci, kunjungi halaman perbandingan VPS lengkap kami.

Prasyarat

Langkah 1: Siapkan VPS Anda

Sambungkan lalu perbarui:

ssh root@ip-vps-anda
apt update && apt upgrade -y

Pasang Docker dan plugin Compose:

apt install -y docker.io docker-compose-v2
systemctl enable --now docker
docker compose version

Buka port yang akan dipakai Caddy:

ufw allow OpenSSH && ufw allow 80 && ufw allow 443
ufw enable

Langkah 2: Ambil Tumpukan Compose Resmi

Jangan menulis sendiri berkas compose untuk Windmill. Proyeknya menerbitkan satu, dan berkas itu merangkai worker, indexer, serta language server dengan benar:

mkdir -p ~/windmill && cd ~/windmill
curl -fsSL -o docker-compose.yml https://raw.githubusercontent.com/windmill-labs/windmill/main/docker-compose.yml
curl -fsSL -o .env https://raw.githubusercontent.com/windmill-labs/windmill/main/.env
curl -fsSL -o Caddyfile https://raw.githubusercontent.com/windmill-labs/windmill/main/Caddyfile

Tumpukan yang baru saja Anda unduh menjalankan tujuh layanan:

Tidak ada Redis dalam daftar itu, dan tidak perlu ada di daftar Anda.

Langkah 3: Atur Kata Sandi dan Domain Anda

Berkas .env bawaan memuat nilai default yang sengaja dibuat lemah:

DATABASE_URL=postgres://postgres:changeme@db/windmill?sslmode=disable
WM_IMAGE=ghcr.io/windmill-labs/windmill:main

Ganti changeme dengan rahasia yang dibangkitkan sebelum start pertama, karena basis data dibuat pada boot pertama itu:

openssl rand -hex 24

Di berkas yang sama, atur BASE_URL ke domain Anda. Caddy membacanya untuk meminta sertifikat.

Langkah 4: Nyalakan

docker compose up -d
docker compose ps

Start pertama menarik beberapa image dan menjalankan migrasi basis data, jadi beri waktu sekitar satu menit. Buka domain Anda lalu buat akun pertama - akun itu menjadi superadmin instance.

Langkah 5: Tambah Worker Sesuai Kebutuhan

Inilah bagian yang membuat Windmill berbeda dari kebanyakan aplikasi self-hosting. Anda tidak menskalakan dengan membesarkan satu proses, melainkan dengan menambah kontainer worker. Salin blok windmill_worker di docker-compose.yml, beri nama layanan baru, pertahankan DATABASE_URL yang sama dan MODE=worker, lalu terapkan:

docker compose up -d

Worker berkoordinasi lewat Postgres, jadi tidak ada konfigurasi lain yang berubah. Siapkan kira-kira satu vCPU dan 1-2 GB RAM untuk masing-masing.

Langkah 6: Cadangkan Basis Datanya

Semua yang penting - skrip, alur, jadwal, resource, riwayat pekerjaan - berada di Postgres. Volume cache dependensi adalah data turunan dan akan membangun ulang dirinya sendiri.

docker compose exec db pg_dump -U postgres windmill | gzip > windmill-$(date +%F).sql.gz

Salin keluar dari server. Perlu dicatat, Windmill menyimpan kredensial untuk sistem Anda yang lain, jadi perlakukan dump itu sebagai rahasia dan enkripsi saat disimpan.

Tempat Orang Sering Tersandung

Menyalin berkas compose berbasis Redis dari sebuah blog. Windmill tidak pernah memerlukannya. Kontainernya akan menyala lalu menganggur sementara Anda bertanya-tanya mengapa antreannya tidak memakainya.

Menentukan ukuran berdasarkan kondisi tenang. Lonjakan memori terjadi saat instalasi dependensi. Pekerjaan Python yang mengimpor pandas butuh RAM jauh lebih besar pada jalan pertama dibanding jalan berikutnya, sehingga tumpukan yang tampak baik-baik saja saat menganggur bisa gagal pada pekerjaan yang dingin.

Membiarkan changeme apa adanya. Itu kata sandi Postgres di berkas .env yang dipublikasikan, dan itu hal pertama yang dicoba pemindai oportunistik jika suatu saat Anda membuka port 5432.

Windmill lebih menghargai mesin dengan core lebih banyak ketimbang core yang lebih cepat, dan itulah yang membuat paket multi-core Eropa yang murah jadi pilihan luar biasa bagus untuknya. Tentukan ukuran sesuai jumlah pekerjaan yang ingin berjalan sekaligus, simpan dump Postgres di tempat terenkripsi, dan sisanya adalah layanan yang mudah diajak hidup berdampingan.

Untuk proyek self-hosting lainnya dan kiat tambahan, telusuri daftar awesome-selfhosted atau komunitas r/selfhosted.

Frequently asked questions

Apakah saya perlu Redis untuk menghosting sendiri Windmill?

Tidak, dan hal ini menjebak cukup banyak orang. Windmill memakai PostgreSQL sekaligus sebagai basis data dan antrean pekerjaan, sehingga berkas compose resmi tidak memuat layanan Redis maupun variabel REDIS_URL. Beberapa panduan pihak ketiga tetap menambahkannya. Jika Anda menyalin berkas compose yang berisi kontainer Redis, Anda menjalankan layanan yang tidak pernah dihubungi Windmill, dan Anda bisa menghapusnya dengan aman.

Bagaimana cara menambah worker pada instance Windmill yang sedang berjalan?

Tambahkan satu layanan windmill_worker lagi ke berkas compose yang mengarah ke DATABASE_URL yang sama dengan MODE=worker, lalu jalankan docker compose up -d. Worker berkoordinasi lewat Postgres, jadi tidak ada yang perlu dikonfigurasi ulang. Batas praktisnya adalah jumlah core Anda: tiap worker standar menjalankan satu pekerjaan pada satu waktu dan meminta kira-kira satu vCPU serta 1-2 GB RAM.

Bagaimana cara menaruh Windmill di belakang HTTPS?

Tumpukannya sudah menyertakan Caddy, yang secara bawaan menyajikan HTTP biasa di port 80. Untuk TLS otomatis, atur BASE_URL ke domain Anda lalu sunting Caddyfile dan layanan caddy agar membuka port 443, seperti dijelaskan komentar pada berkas .env bawaan. Arahkan DNS ke server sebelum menyalakannya supaya sertifikat bisa diterbitkan saat boot pertama.