GitHub’dan kendi sunucuna deploy

Zelie, kendi sunucunda çalışan uygulama hosting’i. GitHub’ı bir kez bağla; her push uygulamanı build eder, testlerini çalıştırır ve kendi Linux sunucunda yayına alır. Alan adı, HTTPS ve geri almaya hazır son beş sürüm dahil. Tek komutla kurulur ve Docker gerektirmez.

Zelie’de bir uygulamanın deploy’ları: canlı sürüm ve Roll back bağlantılı dört eski sürüm

01

Bir push’ta ne olur

  1. 01Build. Kod geçici bir container’da build edilir. Dockerfile’ı olan bir depo onunla build edilir. Yoksa Railpack Node, Python, Go, statik siteler ve daha fazlası için build’i çıkarır; Zelie seçtiği build ve başlatma komutlarını gösterir.
  2. 02Test. Projenin testleri yeni imajda, kendine ait bir container’da, en fazla on dakika çalışır. Node projelerinde Zelie test betiğini kendisi bulur; başka herhangi bir komut da ayarlanabilir. Başarısız bir test eski sürümü yerinde tutar.
  3. 03Sağlık kontrolü. Yeni sürüm eskisinin yanında başlar. Alan adı olan bir uygulama, sağlık yolunda bir dakika içinde yanıt vermek zorunda.
  4. 04Canlı. Trafik yeni sürüme geçer. GitHub’daki commit build ediliyor, canlı ya da başarısız olarak işaretlenir.

Herhangi bir adım başarısız olursa eski sürüm hizmet vermeye devam eder ve log nedenini gösterir. Son beş canlı sürümün imajları saklanır, yani geri alma bir iki saniye sürer.

02

Kendi hesabında bir GitHub App

GitHub’ı bağlamak, kendi hesabında ya da organizasyonunda, yalnız seçtiğin depolara erişimi olan bir GitHub App oluşturur. Özel depolar çalışır. App kodu okuyabilir ve commit durumlarını ayarlayabilir, başka bir şey değil; özel anahtarı da saklanmadan önce şifrelenir.

  • Açık bırakırsan uygulamanın dalına gelen her push onu deploy eder.
  • Bir push yalnız o depoya ve dala ayarlı uygulamaları deploy eder; böylece tek bir GitHub App, birbirinin yoluna çıkmadan birçok uygulamaya hizmet eder.
  • Her webhook her şeyden önce kendi sırrına karşı kontrol edilir; iki kez gelen bir teslimat bir kez işlenir.
  • Açık depolar, deploy’u kendin başlattığında App olmadan da deploy edilir.

03

İmajlar ve düz dosyalar da

Bir container imajı
nginx:1.27 gibi herhangi bir açık imaj, kendi alan adı ve HTTPS’iyle. Zelie registry’yi günde bir kez kontrol eder ve etiket ilerlediyse yeni imajı önerir.
Kendi dosyaların
Node.js, Python, Bun, Deno ya da Java’yı seç ve dosyaları yükle ya da SFTP ile gönder. Bir Discord botu ya da küçük bir site için uygun. Burada build adımı yok: dosyalar uygulamanın kendisi.

04

Her uygulamanın aldıkları

Alan adı ve HTTPS
Bir alan adıyla kurulduğunda Zelie sertifikaları Let’s Encrypt’ten alır. Cloudflare Tunnel arkasında HTTPS’i Cloudflare halleder ve sunucuda hiçbir port açık olmaz.
Değişkenler ve sırlar
Düz ve gizli değişkenler ya da yapıştırılmış koca bir .env dosyası. Bir sır kaydedilirken mühürlenir; build’ler değişkenleri imajın dışında kalan BuildKit sırları olarak alır.
Yanında veritabanları
Bir tıkla PostgreSQL, MariaDB ya da Redis. Birini bağlamak uygulamaya DATABASE_URL ya da REDIS_URL verir; başka hiçbir şey ona ulaşamaz.
Canlı loglar ve metrikler
Build, deploy ve uygulama logları anında. İstekler, sunucu hataları, bellek, CPU ve trafik; dakikada bir ölçüm, bir gün saklanır.
Çökmeler halledilir
Kendiliğinden duran bir uygulama geri gelir, her çökmeden sonra biraz daha uzun bekleyerek. On dakikada beş çökmeden sonra kapalı kalır ve panel nedenini söyler.
Kendi container’ı
Kendi ağı ve kullanıcı namespace’i, bellek ve CPU sınırlarıyla. Container içindeki root, sunucuda hiç kimsedir.

05

Kendi sunucunda

Zelie, kendi containerd’si olan ve durumunu SQLite’ta tutan yaklaşık 50 MB’lık tek bir dosya. Kendi süreçleri boştayken 66 MB belleğin altında kalır, yani küçük bir VPS’te uygulamalara yer kalır. Debian ya da Ubuntu’da, amd64 ya da arm64’te çalışır; aynı panel uygulamalarının yanında oyun sunucuları da çalıştırabilir.

Her push’ta deploy için GitHub’ın panele ulaşabilmesi gerekir; bu bir alan adıyla ya da Cloudflare Tunnel ile olur. Her uygulama tek bir imaj, tek bir Dockerfile ya da tek bir dosya klasörü; Docker Compose dosyaları okunmaz.

06

Sorular

Zelie özel GitHub depolarını deploy edebilir mi?

Evet. Zelie, kendi hesabında ya da organizasyonunda, yalnız seçtiğin depolara erişimi olan bir GitHub App oluşturur; özel depolar onun üzerinden çalışır.

Dockerfile gerekir mi?

Hayır. Dockerfile varsa Zelie onunla build eder. Yoksa Railpack Node, Python, Go, statik siteler ve daha fazlası için build’i çıkarır; seçtiği build ve başlatma komutlarını değiştirebilirsin.

Bir deploy uygulamayı bozarsa ne olur?

Yeni bir sürüm ancak build edildikten, testlerini geçtikten ve sağlık kontrolüne yanıt verdikten sonra trafik alır. Başarısız olursa eski sürüm hizmet vermeye devam eder. Son beş canlı sürümden herhangi birine tek tıkla geri dönülebilir.

Sunucuda Docker gerekir mi?

Hayır. Zelie kendi containerd’sini getirir ve sıradan bir Zelie container’ı içinde BuildKit ile build eder. Makinede zaten Docker varsa Zelie ona dokunmaz.

Ücretsiz mi?

Evet, tek bir sunucuda; uygulama, veritabanı ya da oyun sunucusu sınırı yok. Zelie AGPL lisansıyla açık kaynak.

Zelie'yi kur

Bunu bir Debian veya Ubuntu sunucusunda root olarak çalıştır. Sürümün imzasını kontrol eder, Zelie'yi kurar ve insanların panele nasıl ulaşacağını sorar.

curl -fsSL https://github.com/Caria-Core/zelie/releases/latest/download/install.sh | sh

Tek sunucuda ücretsiz. Neleri değiştirdiğini bilmek istersen önce kurulumun nasıl işlediğini oku.

GitHub’dan kendi sunucuna deploy: uygulama hosting · Zelie