Windmill, betikleri webhook’lara, iş akışlarına, cron görevlerine ve dahili arayüzlere dönüştürür - Retool ve Temporal’ın açık kaynaklı alternatifi. Kendiniz barındırmak zor değil, ama başlamadan önce bilinmesi gereken bir püf noktası var: Redis kullanmaz, internetteki birçok rehber aksini söylese de.
Windmill’i Neden Kendiniz Barındırmalısınız?
Bulut planı hem kişi başına hem de çalıştırma başına faturalandırılır. Kendiniz barındırmak iki sayacı da kaldırır ve bu bir otomasyon platformunda önemlidir, çünkü zamanlanmış olarak çalıştırmak isteyeceğiniz işler tam da çalıştırma ücretlerini biriktirecek olanlardır. Ayrıca betiklerinizi, kimlik bilgilerinizi ve iş günlüklerinizi kendi makinenizde tutar; o betikler çalıştırdığınız her şeyin API anahtarlarını taşır.
Topluluk sürümü AGPL-3.0 lisanslıdır. Kurumsal derleme bir lisans anahtarının ve farklı bir imaj etiketinin arkasındadır; platformu çalıştırmak için ona ihtiyacınız yok.
Doğru VPS’i Seçmek
Windmill uygulamaya göre değil işçiye göre boyutlandırılır. Pratik kural, vCPU başına bir işçi ve her birine 1-2 GB RAM, üstüne Postgres ile sunucu sürecinin payıdır.
| Sağlayıcı | Plan | vCPU / RAM / Disk | Fiyat | Notlar | Bağlantı |
|---|---|---|---|---|---|
| Contabo | Cloud VPS 4 | 4 / 8 GB / 100 GB SSD | 5.50 EUR/ay net | Dört çekirdek, dört işçilik paralellik demek | Contabo |
| Hetzner Cloud | CX23 | 2 / 4 GB / 40 GB NVMe | 5.49 EUR/ay net | Varsayılan iki işçili yığına uyar | Hetzner |
| DigitalOcean | Basic 4 GB | 2 / 4 GB / 80 GB SSD | 24 USD/ay | CX23 ile aynı özellikler, dört katı fiyat | DigitalOcean |
| Vultr | Regular 4 GB | 2 / 4 GB / 80 GB SSD | 20 USD/ay | En geniş bölge seçimi | Vultr |
| Linode | Linode 4 GB | 2 / 4 GB / 80 GB SSD | 24 USD/ay | Öngörülebilir performans | Linode |
İş hacmi işçi sayısıyla ölçeklendiği için burada çekirdek sayısı saat hızından önemlidir. Ayrıntılı karşılaştırma için tam VPS karşılaştırmamıza bakın.
Ön Koşullar
- En az 2 vCPU ve 4 GB RAM’e sahip, Ubuntu 24.04 LTS çalıştıran bir VPS
- Docker Engine ve Compose v2
- TLS istiyorsanız sunucuya yönlendirilmiş bir alan adı
Adım 1: VPS’i Hazırlayın
Bağlanın ve güncelleyin:
ssh root@sunucu-ip-adresiniz
apt update && apt upgrade -y
Docker’ı ve Compose eklentisini kurun:
apt install -y docker.io docker-compose-v2
systemctl enable --now docker
docker compose version
Caddy’nin kullanacağı portları açın:
ufw allow OpenSSH && ufw allow 80 && ufw allow 443
ufw enable
Adım 2: Resmî Compose Yığınını İndirin
Windmill için elle compose dosyası yazmayın. Proje kendi dosyasını yayımlar ve işçileri, indeksleyiciyi ve dil sunucularını doğru biçimde birbirine bağlar:
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
İndirdiğiniz yığın yedi servis çalıştırır:
db-postgres:16, hem veritabanı hem de iş kuyruğuwindmill_server- 8000 portunda API ve web arayüzüwindmill_worker- işleri yürütürwindmill_worker_native- hafif işler, yaklaşık 0.1 CPU ve 128 MBwindmill_indexer- iş geçmişinde tam metin aramawindmill_extra- tarayıcı içi düzenleyiciyi besleyen dil sunucularıcaddy- 80 portunda ters proxy
Bu listede Redis yok ve sizinkinde de olmamalı.
Adım 3: Parolanızı ve Alan Adınızı Ayarlayın
Yayımlanan .env bilinçli olarak zayıf bir varsayılan içerir:
DATABASE_URL=postgres://postgres:changeme@db/windmill?sslmode=disable
WM_IMAGE=ghcr.io/windmill-labs/windmill:main
Veritabanı ilk açılışta oluşturulduğu için changeme değerini o açılıştan önce üretilmiş bir sırla değiştirin:
openssl rand -hex 24
Aynı dosyada BASE_URL değerini alan adınıza ayarlayın. Caddy sertifika istemek için onu okur.
Adım 4: Başlatın
docker compose up -d
docker compose ps
İlk açılış birkaç imaj çeker ve veritabanı göçlerini uygular, bu yüzden ona bir dakika tanıyın. Alan adınızı açıp ilk hesabı oluşturun - o hesap örneğin süper yöneticisi olur.
Adım 5: İhtiyaç Duydukça İşçi Ekleyin
Windmill’i çoğu self-hosting uygulamasından ayıran kısım burası. Tek bir süreci büyüterek değil, işçi konteyneri ekleyerek ölçeklenirsiniz. docker-compose.yml içindeki windmill_worker bloğunu kopyalayın, yeni bir servis adı verin, aynı DATABASE_URL ve MODE=worker değerlerini koruyun, sonra uygulayın:
docker compose up -d
İşçiler Postgres üzerinden koordine olur, başka bir yapılandırma değişmez. Her biri için kabaca bir vCPU ve 1-2 GB RAM ayırın.
Adım 6: Veritabanını Yedekleyin
Önemli olan her şey - betikler, akışlar, zamanlamalar, kaynaklar, iş geçmişi - Postgres’te durur. Bağımlılık önbelleği birimi türetilmiş veridir ve kendini yeniden oluşturur.
docker compose exec db pg_dump -U postgres windmill | gzip > windmill-$(date +%F).sql.gz
Dosyayı sunucudan dışarı kopyalayın. Windmill diğer sistemlerinizin kimlik bilgilerini sakladığı için o dökümü bir sır olarak görün ve şifreli saklayın.
İnsanların Takıldığı Yerler
Bir blogdan Redis’li compose dosyası kopyalamak. Windmill’in ona hiç ihtiyacı olmadı. Konteyner açılır ve boş boş bekler, siz de kuyruğun onu neden kullanmadığını merak edersiniz.
Durağan hâle göre boyutlandırmak. Bellek zirvesi bağımlılık kurulumunda yaşanır. pandas içe aktaran bir Python işi ilk çalıştırmada sonrakilerin çok üstünde RAM ister, yani boştayken sorunsuz görünen bir yığın soğuk bir işte çökebilir.
changeme değerini olduğu gibi bırakmak. Bu, yayımlanan .env dosyasındaki Postgres parolasıdır ve 5432 portunu bir gün dışarı açarsanız fırsatçı bir taramanın ilk deneyeceği şeydir.
Windmill, hızlı çekirdekten çok sayıda çekirdeği ödüllendirir; ucuz Avrupa çok çekirdekli planlarını onun için alışılmadık biçimde iyi bir seçenek yapan da budur. Aynı anda kaç iş çalıştırmak istediğinize göre boyutlandırın, Postgres dökümünü şifreli bir yerde tutun; gerisi rahat yaşanan bir servistir.
Daha fazla self-hosting projesi ve ipucu için awesome-selfhosted listesine veya r/selfhosted topluluğuna göz atın.
Frequently asked questions
Windmill'i kendim barındırmak için Redis gerekiyor mu?
Hayır ve bu pek çok kişinin ayağını kaydırıyor. Windmill hem veritabanı hem de iş kuyruğu olarak PostgreSQL kullanır, dolayısıyla resmî compose dosyasında Redis servisi de REDIS_URL değişkeni de yoktur. Buna rağmen birkaç üçüncü taraf rehber bir tane ekler. İçinde Redis konteyneri olan bir compose dosyası kopyaladıysanız, Windmill'in hiç bağlanmadığı bir servisi çalıştırıyorsunuz ve onu güvenle kaldırabilirsiniz.
Çalışan bir Windmill kurulumuna nasıl işçi eklerim?
Compose dosyasına aynı DATABASE_URL adresini gösteren ve MODE=worker taşıyan bir windmill_worker servisi daha ekleyin, ardından docker compose up -d çalıştırın. İşçiler Postgres üzerinden koordine olur, dolayısıyla başka hiçbir ayarı değiştirmeniz gerekmez. Pratik sınır çekirdek sayınızdır: her standart işçi aynı anda tek bir iş yürütür ve kabaca bir vCPU ile 1-2 GB RAM ister.
Windmill'i HTTPS arkasına nasıl alırım?
Yığın zaten Caddy ile gelir ve varsayılan olarak 80 portunda düz HTTP sunar. Otomatik TLS için BASE_URL değerini alan adınıza ayarlayın, ardından yayımlanan .env dosyasındaki açıklamaların tarif ettiği gibi Caddyfile ile caddy servisini 443'ü açacak biçimde düzenleyin. Sertifikanın ilk açılışta üretilebilmesi için DNS'i sunucuya başlatmadan önce yönlendirin.