İlk blog yazımı, bu siteyi oluşturduktan sonra yaşadığım bir sorunun çözümü üzerine yazmaya karar verdim. Blog sitem için değişiklik yaptığımda sürekli manuel olarak build edip Compose güncellemem gerekiyordu. Bu süreç oldukça zaman alıcı ve zahmetliydi. Çünkü backend ve frontend ayrı containerlarda çalışıyorlar. O yüzden, bu işlemleri otomatikleştirebileceğim bir çözüm arayışına girdim. Akla gelen ilk çözümlerden biri şüphesiz Jenkins oldu. Ancak Jenkins’i sunucuma deploy etmeye çalıştığımda, imaj dosyası bile build edilemiyordu ve makine kitleniyordu. Sonunda daha hafif ve kullanışlı bir çözüm arayışına girdim. Ta-da! Drone-CI’ya rastladım. Drone’un kurulumu o kadar basit ve kullanımı o kadar kolay ki, şu an deployment’ı otomatik olarak yönetebiliyorum. Bu rehberde size de kendi CI/CD’nizi nasıl deploy edebileceğinizi göstereceğim. Şimdiden iyi okumalar!
📌 NOT : Bu rehber, elinizde hâlihazırda bir alan adı (domain) ve Linux işletim sistemi bulunduğu varsayılarak hazırlanmıştır.
Farklı işletim sistemleri ve platformlar(Gitlab, Gitea, vb.) için dökümanlara buradan ulaşabilirsiniz.
Github Ayarları
Github hesabımıza giriş yapıyoruz. Ardından ayarlar kısmından Developer Settings sekmesine geliyoruz.
Açılan sayfada, yeni bir OAuth uygulaması oluşturmak için New OAuth App butonuna tıklıyoruz.
Şimdi sırayla bu alanları dolduralım:
Application name : İstediğiniz ismi verebilirsiniz. Örnek olarak “Drone”
Homepage URL : Bu alana kendi alan adınızı girin. Örneğin: example.drone.furkantrn.com
📌 NOT : Alan adı sağlayıcınızın DNS ayarlarında drone için bir A Record eklemek daha iyi olacaktır.
Authorization callback URL : Bu kısma domaininiz/login şeklinde ekleme yapınız. Örnek olarak example.drone.furkantrn.com/login
Son olarak, Register application butonuna tıklayarak uygulamanızı kaydedin.
📌 NOT : Bu sayfada Client ID ve Client Secret bilgileri görüntülenecektir. Kurulum sırasında gerekli olacağı için bu bilgileri güvenli bir yere kaydedin. Eğer Client Secret görüntülenmiyorsa, Generate a new client secret butonuna tıklayarak yeni bir tane oluşturabilirsiniz.
--detach : Containerin arka planda çalışmasını sağlar.
--volume=/var/lib/drone:/data : Drone verilerinin container dışındaki /var/lib/drone dizininde saklanmasını sağlar.
--env=DRONE_GITHUB_CLIENT_ID : GitHub OAuth uygulamanızın Client ID’sini buraya giriyoruz.
--env=DRONE_GITHUB_CLIENT_SECRET : GitHub OAuth uygulamanızın Client Secret’ını buraya giriyoruz.
--env=DRONE_RPC_SECRET : Drone server ve runner arasındaki iletişimi güvence altına almak için bir RPC Secret belirler. Bu secreti daha sonra kullanmak üzere bir yere not ediniz.
Random bir secret üretmek için terminalde şu komutu girebilirsiniz:
Terminal window
opensslrand-hex16
--env=DRONE_SERVER_HOST : Drone serverin ana bilgisayar adını (domain) belirtir. Örneğin, example.drone.furkantrn.com.
--env=DRONE_SERVER_PROTO=https: Drone sunucusunun protokolünü belirtir. Burada HTTPS kullanıyoruz.
--env=DRONE_REGISTRATION_CLOSED=true : Kayıt işlemlerinin kapalı olduğunu belirtir, yani sadece manuel olarak eklenmiş kullanıcılar Drone’a erişebilir.
--env=DRONE_USER_CREATE=username:<username>,admin:true : Drone’da ilk kullanıcıyı oluşturur. <username> kısmını github username ile aynı yapmanız önemlidir.
--publish=10256:80 : Docker konteynerinin çalışacağı portu belirtir. Bu, Drone UI’nin web üzerinden erişilebilir olmasını sağlar. İstediğiniz portu verebilirsiniz.
📌 NOT : 443 portunu publish etmememizin sebebi, Nginx ile reverse proxy yaparak alan adımızı uygulamamıza bağlayacak olmamızdır. Nginx konfigurasyonunu rehberin devamında göstereceğim.
--restart=always : Docker containerin her zaman yeniden başlatılmasını sağlar, container kapanırsa otomatik olarak tekrar başlatılır.
--name=drone : Docker containera bir isim verir. Opsiyoneldir.
📌 Tüm konfigurasyon seçenekleri için burayı ziyaret edebilirsiniz.
Bilgileri girdikten sonra containeri başlatıyoruz.
Nginx Kurulumu
Şimdi sırada alan adımızı uygulamamıza bağlamamız gerekiyor. Bunun için nginx kullanacağız. Peki nedir bu nginx?
🟢 Nginx, yüksek performanslı bir web sunucusu ve reverse proxy yazılımıdır. Özelliklerinden kısaca bahsedecek olursak:
Statik İçerik Sunma ve Yüksek Performans 🚀 : Hızlı ve verimli şekilde statik içerik sunar, aynı anda çok sayıda bağlantıyı yönetebilir.
Reverse Proxy ve Yük Dengeleme 🔄 : Gelen trafiği yönlendirerek backend sunuculara yük dengelemesi yapar ve uygulamanın ölçeklenebilirliğini artırır.
Güvenlik ve HTTPS Desteği 🔐 : SSL/TLS şifreleme ile güvenli bağlantılar sağlar ve uygulamanın güvenliğini artırır.
İlk olarak eğer sunucunuzda nginx yoksa şu komut ile yükleyebilirsin:
Terminal window
sudoaptinstallnginx
Yükleme işlemi tamamlandıktan sonra konfigurasyon dosyamızı oluşturalım:
📌 NOT : Eğer Drone Server’ı Docker’da varsayılan olarak çalıştırdıysanız, 80 portunu kullanabilirsiniz. Ancak farklı bir port belirlediyseniz docker ps komutuyla hangi portun eşlendiğini kontrol edin.
Kaydedip editörden çıkıyoruz. Aşağıdaki komut ile config dosyamızı sites-enabled klasörüne taşımamız gerekiyor. Bunun için gereken komut:
--detach : Containerin arka planda çalışmasını sağlar.
--volume=/var/run/docker.sock:/var/run/docker.sock : Runner’ın yeni Docker containerleri başlatmasına izin verir. Drone Runner, pipeline aşamalarını kendi içinde çalıştıracağı için Docker’a erişmesi gerekir.
📌 NOT : Eğer bu ayar eklenilmezse Drone pipeline’ları çalıştıramaz!
--env=DRONE_RPC_PROTO=https : Drone Server ile HTTPS üzerinden iletişim kurulmasını sağlar.
--env=DRONE_RPC_HOST= : Drone Server’ın çalıştığı domaini giriyoruz.
--env=DRONE_RPC_SECRET= : Buraya Drone server kurarkenki ürettiğimiz secret’i giriyoruz. Drone Server kurulumu sırasında belirlenen DRONE_RPC_SECRET ile aynı olmalıdır.
--env=DRONE_RUNNER_CAPACITY=2 : Aynı anda en fazla 2 tane pipeline çalıştırılmasına izin verir. Daha fazla kapasite isteniliyorsa bu sayıyı artırabilirsiniz.
-publish=3000:3000 : Runner, genellikle doğrudan HTTP bağlantısına ihtiyaç duymaz. Pipeline’ları yürütmek için sadece Drone Server ile haberleşir. Bu yüzden port açmak zorunlu değildir.
📌 Tüm konfigurasyon seçenekleri için burayı ziyaret edebilirsiniz.
Gerekli bilgileri ekleyerek containeri başlatıyoruz. Drone server ile bağlantısını kontrol etmek için şu komutu çalıştırabilirsiniz:
Terminal window
dockerlogs-fexample-drone-runner
Sağlıklı şekilde çalışıyor ise şöyle bir çıktı alırsınız:
time=2025-04-02T20:21:29Zlevel=infomsg=starting the serveraddr=:3000
time=2025-04-02T20:21:29Zlevel=infomsg=successfully pinged the remote server
time=2025-04-02T20:21:29Zlevel=infomsg=polling the remote server arch=amd64 capacity=4
endpoint=https://example.drone.furkantrn.com kind=pipeline os=linux type=docker
Artık tarayıcımıza alan adımızı girerek Drone arayüzüne giriş yapabiliriz. Eğer kurulum doğru ise şöyle bir ekran gelecektir:
Continue diyerek devam edelim.
Authorize diyerek devam edelim.
Sistem bize user registration disabled mesajı verecektir. Continue diyerek devam edelim.
Hiçbir kutucuğu doldurmadan submit butonuna tıklayarak devam edelim. Böylelikle giriş yaparken direk github bilgilerinizi kullanarak sizi yetkilendirecek ve sisteme github hesabınız olmadan kimse giremeyecek.
Artık kurulum başarılı ile tamamlanmış olup kendi CI/CD süreçlerinizi yönetebileceğiniz self-hosted bir platformunuz oldu. Bir sonraki yazımda görüşmek üzere…