{"id":38579,"date":"2026-02-03T12:41:40","date_gmt":"2026-02-03T09:41:40","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=38579"},"modified":"2026-02-03T12:41:40","modified_gmt":"2026-02-03T09:41:40","slug":"ortam-hazirligi-ve-onkosullar","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/ortam-hazirligi-ve-onkosullar\/","title":{"rendered":"Ortam Haz\u0131rl\u0131\u011f\u0131 ve \u00d6nko\u015fullar"},"content":{"rendered":"<p><body><\/p>\n<p>S\u00fcrekli Entegrasyon (CI) ve S\u00fcrekli Da\u011f\u0131t\u0131m (CD) s\u00fcre\u00e7leri, modern yaz\u0131l\u0131m geli\u015ftirmenin temel ta\u015flar\u0131ndan biridir. Bu s\u00fcre\u00e7ler, kod de\u011fi\u015fikliklerinin otomatik olarak test edilmesini, derlenmesini ve da\u011f\u0131t\u0131lmas\u0131n\u0131 sa\u011flayarak geli\u015ftirme d\u00f6ng\u00fcs\u00fcn\u00fc h\u0131zland\u0131r\u0131r ve hatalar\u0131 azalt\u0131r. Drone, Docker tabanl\u0131, kullan\u0131m\u0131 kolay ve olduk\u00e7a esnek bir CI\/CD platformudur.<\/p>\n<p>Bu rehberde, Ubuntu 16.04 i\u015fletim sistemi \u00fczerinde Drone CI\/CD sunucusunu ve agent&#8217;\u0131n\u0131 nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ve yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011freneceksiniz. Ubuntu 16.04&#8217;\u00fcn ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fcn sonuna geldi\u011fini (End Of Life &#8211; EOL) ve yeni projeler i\u00e7in daha g\u00fcncel LTS (Long Term Support) s\u00fcr\u00fcmlerinin tercih edilmesi gerekti\u011fini unutmay\u0131n. Ancak bu rehber, \u00f6zel bir gereksinim nedeniyle Ubuntu 16.04 kullanman\u0131z durumunda size yol g\u00f6sterecektir.<\/p>\n<p>Kuruluma ba\u015flamadan \u00f6nce a\u015fa\u011f\u0131daki \u00f6nko\u015fullara sahip oldu\u011funuzdan emin olun:<\/p>\n<ul>\n<li>Ubuntu 16.04 y\u00fckl\u00fc bir sunucu.<\/li>\n<li>Sunucuda Docker kurulu ve \u00e7al\u0131\u015f\u0131r durumda.<\/li>\n<li>GitHub, GitLab veya Gitea gibi bir Git sa\u011flay\u0131c\u0131s\u0131nda bir hesap. Drone, bu sa\u011flay\u0131c\u0131lar arac\u0131l\u0131\u011f\u0131yla depolar\u0131n\u0131za eri\u015fim sa\u011flar.<\/li>\n<li>Drone sunucunuz i\u00e7in bir alan ad\u0131 veya alt alan ad\u0131 (\u00f6rn: <code>ci.ornek.com<\/code>).<\/li>\n<\/ul>\n<h2>Ortam Haz\u0131rl\u0131\u011f\u0131 ve \u00d6nko\u015fullar<\/h2>\n<p>Drone ve Docker&#8217;\u0131n d\u00fczg\u00fcn \u00e7al\u0131\u015fabilmesi i\u00e7in Ubuntu 16.04 sunucunuzu haz\u0131rlamam\u0131z gerekiyor. Bu b\u00f6l\u00fcmde, sisteminizi g\u00fcncelleyecek, Docker&#8217;\u0131 kuracak (e\u011fer kurulu de\u011filse) ve gerekli a\u011f ayarlar\u0131n\u0131 yap\u0131land\u0131raca\u011f\u0131z.<\/p>\n<h3>Sistem G\u00fcncellemesi<\/h3>\n<p>Herhangi bir kuruluma ba\u015flamadan \u00f6nce sistem paket listesini g\u00fcncelleyelim ve mevcut paketleri y\u00fckseltelim:<\/p>\n<pre><code class=\"language-bash\">sudo apt-get update\nsudo apt-get upgrade -y\n<\/code><\/pre>\n<h3>Docker Kurulumu (E\u011fer Kurulu De\u011filse)<\/h3>\n<p>Drone tamamen Docker tabanl\u0131 \u00e7al\u0131\u015ft\u0131\u011f\u0131 i\u00e7in sunucunuzda Docker&#8217;\u0131n kurulu olmas\u0131 \u015fartt\u0131r. E\u011fer kurulu de\u011filse, a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 izleyerek Docker CE (Community Edition) s\u00fcr\u00fcm\u00fcn\u00fc kurabilirsiniz:<\/p>\n<pre><code class=\"language-bash\"># Gerekli paketleri kurun\nsudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common\n\n<h2>Docker'\u0131n GPG anahtar\u0131n\u0131 ekleyin<\/h2>\ncurl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo apt-key add -\n\n<h2>Docker deposunu sisteminize ekleyin<\/h2>\nsudo add-apt-repository \"deb [arch=amd64] https:\/\/download.docker.com\/linux\/ubuntu $(lsb_release -cs) stable\"\n\n<h2>Paket listesini tekrar g\u00fcncelleyin ve Docker CE'yi kurun<\/h2>\nsudo apt-get update\nsudo apt-get install -y docker-ce\n\n<h2>Docker servisinin ba\u015flad\u0131\u011f\u0131ndan ve sistem ba\u015flang\u0131c\u0131nda etkin oldu\u011fundan emin olun<\/h2>\nsudo systemctl enable docker\nsudo systemctl start docker\n<\/code><\/pre>\n<p>Kurulumdan sonra, mevcut kullan\u0131c\u0131n\u0131z\u0131 <code>docker<\/code> grubuna ekleyerek <code>sudo<\/code> kullanmadan Docker komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rabilirsiniz. Bu de\u011fi\u015fikli\u011fin etkili olmas\u0131 i\u00e7in oturumu kapat\u0131p tekrar a\u00e7man\u0131z veya sunucuyu yeniden ba\u015flatman\u0131z gerekebilir.<\/p>\n<pre><code class=\"language-bash\">sudo usermod -aG docker $USER\n<\/code><\/pre>\n<h3>DNS Kayd\u0131 ve G\u00fcvenlik Duvar\u0131 Ayarlar\u0131<\/h3>\n<p>Drone sunucusuna alan ad\u0131n\u0131z \u00fczerinden eri\u015febilmek i\u00e7in DNS sa\u011flay\u0131c\u0131n\u0131zda sunucunuzun IP adresine i\u015faret eden bir A kayd\u0131 olu\u015fturman\u0131z gerekmektedir (\u00f6rn: <code>ci.ornek.com<\/code> -> <code>sunucu_ip_adresiniz<\/code>).<\/p>\n<p>G\u00fcvenlik duvar\u0131 (UFW) kullan\u0131yorsan\u0131z, Drone&#8217;un eri\u015filebilir olmas\u0131 i\u00e7in HTTP (80) ve HTTPS (443) portlar\u0131n\u0131 a\u00e7man\u0131z gerekir:<\/p>\n<pre><code class=\"language-bash\">sudo ufw allow 80\/tcp\nsudo ufw allow 443\/tcp\nsudo ufw enable # E\u011fer UFW etkin de\u011filse\nsudo ufw status # Kurallar\u0131 kontrol edin\n<\/code><\/pre>\n<h2>Drone Server Kurulumu<\/h2>\n<p>Drone sunucusu, Git depolar\u0131n\u0131zla etkile\u015fime giren, CI\/CD i\u015flerini y\u00f6neten ve web aray\u00fcz\u00fcn\u00fc sunan ana bile\u015fendir. Kurulum i\u00e7in \u00f6ncelikle bir OAuth uygulamas\u0131 olu\u015fturmam\u0131z gerekiyor.<\/p>\n<h3>Git Sa\u011flay\u0131c\u0131n\u0131zda OAuth Uygulamas\u0131 Olu\u015fturma<\/h3>\n<p>Drone&#8217;un Git depolar\u0131n\u0131za eri\u015febilmesi ve kullan\u0131c\u0131lar\u0131n Git sa\u011flay\u0131c\u0131n\u0131z \u00fczerinden oturum a\u00e7abilmesi i\u00e7in bir OAuth uygulamas\u0131 olu\u015fturman\u0131z gerekir. Bu rehberde GitHub \u00f6rne\u011fini kullanaca\u011f\u0131z, ancak GitLab veya Gitea i\u00e7in de s\u00fcre\u00e7 benzerdir.<\/p>\n<ol>\n<li>GitHub hesab\u0131n\u0131za giri\u015f yap\u0131n.<\/li>\n<li>Ayarlar (Settings) -> Geli\u015ftirici Ayarlar\u0131 (Developer settings) -> OAuth Uygulamalar\u0131 (OAuth Apps) b\u00f6l\u00fcm\u00fcne gidin.<\/li>\n<li>Yeni OAuth Uygulamas\u0131 (New OAuth App) butonuna t\u0131klay\u0131n.<\/li>\n<li>A\u015fa\u011f\u0131daki bilgileri girin:\n<ul>\n<li><strong>Uygulama Ad\u0131 (Application name):<\/strong> Drone CI (veya istedi\u011finiz bir isim)<\/li>\n<li><strong>Anasayfa URL&#8217;si (Homepage URL):<\/strong> <code>https:\/\/ci.ornek.com<\/code> (kendi alan ad\u0131n\u0131zla de\u011fi\u015ftirin)<\/li>\n<li><strong>Yetkilendirme Geri \u00c7a\u011f\u0131rma URL&#8217;si (Authorization callback URL):<\/strong> <code>https:\/\/ci.ornek.com\/login<\/code> (kendi alan ad\u0131n\u0131zla de\u011fi\u015ftirin)<\/li>\n<\/ul>\n<\/li>\n<li>Uygulamay\u0131 kaydettikten sonra size bir <strong>Client ID<\/strong> ve <strong>Client Secret<\/strong> verilecektir. Bu bilgileri g\u00fcvenli bir yerde saklay\u0131n, Drone kurulumunda kullanaca\u011f\u0131z.<\/li>\n<\/ol>\n<h3>Drone Sunucusunu Docker ile \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>\u015eimdi Drone sunucusunu Docker konteyneri olarak \u00e7al\u0131\u015ft\u0131rabiliriz. A\u015fa\u011f\u0131daki komutta yer alan yer tutucular\u0131 kendi bilgilerinizle de\u011fi\u015ftirmeyi unutmay\u0131n.<\/p>\n<ul>\n<li><code><your-client-id><\/code>: GitHub&#8217;dan ald\u0131\u011f\u0131n\u0131z Client ID.<\/li>\n<li><code><your-client-secret><\/code>: GitHub&#8217;dan ald\u0131\u011f\u0131n\u0131z Client Secret.<\/li>\n<li><code>ci.ornek.com<\/code>: Kendi alan ad\u0131n\u0131z.<\/li>\n<li><code><your-rpc-secret><\/code>: Drone sunucusu ile agent&#8217;lar\u0131 aras\u0131ndaki ileti\u015fimi g\u00fcvence alt\u0131na almak i\u00e7in kullan\u0131lan bir s\u0131r. Bunu a\u015fa\u011f\u0131daki komutla olu\u015fturabilirsiniz:\n<pre><code class=\"language-bash\">openssl rand -hex 16\n<h2>\u00d6rnek \u00e7\u0131kt\u0131: 5c85114a7966f3621421f114e9e034a1<\/h2>\n<\/code><\/pre>\n<\/li>\n<\/ul>\n<p>Drone sunucusunu ba\u015flatmak i\u00e7in a\u015fa\u011f\u0131daki Docker komutunu kullan\u0131n:<\/p>\n<pre><code class=\"language-bash\">docker run \\\n  --volume=\/var\/lib\/drone:\/data \\\n  --env=DRONE_GITHUB_CLIENT_ID=<your-client-id> \\\n  --env=DRONE_GITHUB_CLIENT_SECRET=<your-client-secret> \\\n  --env=DRONE_RPC_SECRET=<your-rpc-secret> \\\n  --env=DRONE_SERVER_HOST=ci.ornek.com \\\n  --env=DRONE_SERVER_PROTO=https \\\n  --env=DRONE_TLS_AUTOCERT=true \\\n  --publish=80:80 \\\n  --publish=443:443 \\\n  --restart=always \\\n  --detach=true \\\n  --name=drone \\\n  drone\/drone:1\n<\/code><\/pre>\n<p>Yukar\u0131daki komutta:<\/p>\n<ul>\n<li><code>--volume=\/var\/lib\/drone:\/data<\/code>: Drone&#8217;un verilerini (yap\u0131land\u0131rma, veritaban\u0131 vb.) kal\u0131c\u0131 olarak saklamas\u0131 i\u00e7in bir Docker volume&#8217;\u00fc ba\u011flar.<\/li>\n<li><code>DRONE_SERVER_PROTO=https<\/code> ve <code>DRONE_TLS_AUTOCERT=true<\/code>: Drone&#8217;un otomatik olarak Let&#8217;s Encrypt arac\u0131l\u0131\u011f\u0131yla HTTPS sertifikas\u0131 almas\u0131n\u0131 ve kullanmas\u0131n\u0131 sa\u011flar. Bu, web aray\u00fcz\u00fcne g\u00fcvenli eri\u015fim i\u00e7in \u00f6nemlidir.<\/li>\n<li><code>--publish=80:80 --publish=443:443<\/code>: Sunucunun 80 ve 443 numaral\u0131 portlar\u0131n\u0131 Docker konteynerinin ayn\u0131 portlar\u0131na y\u00f6nlendirir.<\/li>\n<li><code>--name=drone<\/code>: Konteynerin ad\u0131n\u0131 belirler.<\/li>\n<li><code>drone\/drone:1<\/code>: Kullan\u0131lacak Drone sunucusu Docker imaj\u0131d\u0131r (Drone v1).<\/li>\n<\/ul>\n<p>Konteynerin \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frulamak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">docker ps -a | grep drone\ndocker logs drone\n<\/code><\/pre>\n<h2>Drone Agent Kurulumu ve Yap\u0131land\u0131rmas\u0131<\/h2>\n<p>Drone Agent, CI\/CD i\u015flerini (build, test, deploy ad\u0131mlar\u0131) fiilen y\u00fcr\u00fcten bile\u015fendir. Agent&#8217;lar, Docker daemon&#8217;\u0131na eri\u015ferek i\u015fleri konteynerler i\u00e7inde \u00e7al\u0131\u015ft\u0131r\u0131r. Birden fazla agent kurarak paralel i\u015f y\u00fcklerini y\u00f6netebilirsiniz.<\/p>\n<h3>Drone Agent&#8217;\u0131 Docker ile \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>Agent&#8217;\u0131 ba\u015flatmak i\u00e7in a\u015fa\u011f\u0131daki Docker komutunu kullan\u0131n. Burada dikkat etmeniz gereken en \u00f6nemli nokta, <code>DRONE_RPC_SECRET<\/code> de\u011fi\u015fkeninin Drone sunucusunda kulland\u0131\u011f\u0131n\u0131z s\u0131r ile <strong>ayn\u0131 olmas\u0131 gerekti\u011fidir<\/strong>.<\/p>\n<pre><code class=\"language-bash\">docker run \\\n  --volume=\/var\/run\/docker.sock:\/var\/run\/docker.sock \\\n  --env=DRONE_RPC_SECRET=<your-rpc-secret> \\\n  --env=DRONE_SERVER_HOST=ci.ornek.com \\\n  --env=DRONE_SERVER_PROTO=https \\\n  --restart=always \\\n  --detach=true \\\n  --name=drone-agent \\\n  drone\/agent:1\n<\/code><\/pre>\n<p>Yukar\u0131daki komutta:<\/p>\n<ul>\n<li><code>--volume=\/var\/run\/docker.sock:\/var\/run\/docker.sock<\/code>: Bu, agent&#8217;\u0131n sunucudaki Docker daemon&#8217;\u0131na eri\u015fmesini sa\u011flar. Agent, build ad\u0131mlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in Docker&#8217;\u0131 kullan\u0131r. <strong>Bu, agent&#8217;\u0131n d\u00fczg\u00fcn \u00e7al\u0131\u015fmas\u0131 i\u00e7in kritik bir ayard\u0131r.<\/strong><\/li>\n<li><code>DRONE_RPC_SECRET<\/code>: Sunucu ile agent aras\u0131ndaki kimlik do\u011frulama s\u0131rr\u0131d\u0131r.<\/li>\n<li><code>DRONE_SERVER_HOST<\/code> ve <code>DRONE_SERVER_PROTO<\/code>: Agent&#8217;\u0131n hangi Drone sunucusuna ba\u011flanaca\u011f\u0131n\u0131 belirtir.<\/li>\n<\/ul>\n<p>Agent&#8217;\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 ve sunucuya ba\u011fland\u0131\u011f\u0131n\u0131 do\u011frulamak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">docker ps -a | grep drone-agent\ndocker logs drone-agent\n<\/code><\/pre>\n<p>Loglarda agent&#8217;\u0131n sunucuya ba\u015far\u0131yla ba\u011fland\u0131\u011f\u0131na dair mesajlar g\u00f6rmelisiniz.<\/p>\n<h2>Drone Kullan\u0131m\u0131 ve \u0130lk Proje<\/h2>\n<p>Drone sunucusu ve agent&#8217;\u0131 kurulduktan sonra, art\u0131k web aray\u00fcz\u00fc \u00fczerinden depolar\u0131n\u0131z\u0131 etkinle\u015ftirmeye ve ilk CI\/CD projenizi olu\u015fturmaya haz\u0131rs\u0131n\u0131z.<\/p>\n<h3>Drone Web Aray\u00fcz\u00fcne Eri\u015fim<\/h3>\n<p>Web taray\u0131c\u0131n\u0131z\u0131 a\u00e7\u0131n ve Drone sunucunuzun alan ad\u0131na gidin (\u00f6rn: <code>https:\/\/ci.ornek.com<\/code>). Kar\u015f\u0131n\u0131za Git sa\u011flay\u0131c\u0131n\u0131z (\u00f6rn: GitHub) ile oturum a\u00e7ma ekran\u0131 gelecektir. OAuth uygulamas\u0131 olu\u015ftururken kulland\u0131\u011f\u0131n\u0131z Git hesab\u0131n\u0131zla giri\u015f yap\u0131n.<\/p>\n<h3>Depo Etkinle\u015ftirme<\/h3>\n<p>Giri\u015f yapt\u0131ktan sonra, Drone aray\u00fcz\u00fcnde Git hesab\u0131n\u0131zdaki depolar\u0131n bir listesini g\u00f6receksiniz. Bir depoyu CI\/CD s\u00fcre\u00e7lerine dahil etmek i\u00e7in:<\/p>\n<ol>\n<li>Sol men\u00fcden &#8220;Repositories&#8221; (Depolar) se\u00e7ene\u011fine t\u0131klay\u0131n.<\/li>\n<li>Depolar\u0131n\u0131z\u0131n listesi g\u00f6r\u00fcnm\u00fcyorsa &#8220;Sync&#8221; (Senkronize Et) butonuna t\u0131klayarak depolar\u0131n\u0131z\u0131 g\u00fcncelleyin.<\/li>\n<li>CI\/CD \u00e7al\u0131\u015ft\u0131rmak istedi\u011finiz deponun yan\u0131ndaki &#8220;Activate&#8221; (Etkinle\u015ftir) butonuna t\u0131klay\u0131n.<\/li>\n<li>A\u00e7\u0131lan pencerede gerekli izinleri onaylay\u0131n ve depo ayarlar\u0131n\u0131 kaydedin.<\/li>\n<\/ol>\n<h3><code>.drone.yml<\/code> Dosyas\u0131 Olu\u015fturma<\/h3>\n<p>Drone, her projenin k\u00f6k dizininde bulunan <code>.drone.yml<\/code> adl\u0131 bir yap\u0131land\u0131rma dosyas\u0131 arac\u0131l\u0131\u011f\u0131yla CI\/CD ad\u0131mlar\u0131n\u0131 tan\u0131mlar. Bu dosya, Drone&#8217;a ne zaman hangi ad\u0131mlar\u0131 \u00e7al\u0131\u015ft\u0131rmas\u0131 gerekti\u011fini s\u00f6yler.<\/p>\n<p>\u00d6rnek olarak, basit bir Node.js projesi i\u00e7in <code>.drone.yml<\/code> dosyas\u0131 \u015f\u00f6yle g\u00f6r\u00fcnebilir:<\/p>\n<pre><code class=\"language-yaml\">kind: pipeline\nname: default\n\nsteps:\n  - name: build\n    image: node:16 # Build i\u00e7in Node.js 16 Docker imaj\u0131n\u0131 kullan\n    commands:\n      - npm install # Ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckle\n      - npm test    # Testleri \u00e7al\u0131\u015ft\u0131r\n\ntrigger:\n  branch:\n    - main # Yaln\u0131zca 'main' dal\u0131na yap\u0131lan push'larda \u00e7al\u0131\u015ft\u0131r\n  event:\n    - push # 'push' olaylar\u0131nda \u00e7al\u0131\u015ft\u0131r\n<\/code><\/pre>\n<p>Bu <code>.drone.yml<\/code> dosyas\u0131, <code>main<\/code> dal\u0131na her <code>push<\/code> yap\u0131ld\u0131\u011f\u0131nda bir pipeline ba\u015flat\u0131r. Bu pipeline, <code>node:16<\/code> Docker imaj\u0131n\u0131 kullanarak <code>npm install<\/code> ve <code>npm test<\/code> komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131ran tek bir <code>build<\/code> ad\u0131m\u0131na sahiptir.<\/p>\n<h3>De\u011fi\u015fiklikleri Git&#8217;e Y\u00fckleme<\/h3>\n<p><code>.drone.yml<\/code> dosyas\u0131n\u0131 olu\u015fturduktan sonra, bu dosyay\u0131 projenizin k\u00f6k dizinine kaydedin ve Git deponuza commit edip push yap\u0131n:<\/p>\n<pre><code class=\"language-bash\">git add .drone.yml\ngit commit -m \"Add Drone CI configuration\"\ngit push origin main\n<\/code><\/pre>\n<p>De\u011fi\u015fiklikleri push yapt\u0131\u011f\u0131n\u0131zda, Drone otomatik olarak bu olay\u0131 alg\u0131layacak ve <code>.drone.yml<\/code> dosyas\u0131nda tan\u0131mlanan pipeline&#8217;\u0131 \u00e7al\u0131\u015ft\u0131racakt\u0131r.<\/p>\n<h3>Build Durumunu \u0130zleme<\/h3>\n<p>Drone web aray\u00fcz\u00fcne geri d\u00f6n\u00fcn. Etkinle\u015ftirdi\u011finiz deponun alt\u0131nda yeni bir build&#8217;in ba\u015flad\u0131\u011f\u0131n\u0131 ve ad\u0131mlar\u0131n\u0131n durumunu g\u00f6receksiniz. Her ad\u0131m\u0131n loglar\u0131na t\u0131klayarak detayl\u0131 \u00e7\u0131kt\u0131lar\u0131 inceleyebilirsiniz. Build ba\u015far\u0131l\u0131 oldu\u011funda ye\u015fil, ba\u015far\u0131s\u0131z oldu\u011funda k\u0131rm\u0131z\u0131 renkle i\u015faretlenecektir.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<p>Bu rehberde, Ubuntu 16.04 \u00fczerinde Drone CI\/CD sunucusunu ve agent&#8217;\u0131n\u0131 kurmay\u0131 ve temel bir CI\/CD pipeline&#8217;\u0131 olu\u015fturmay\u0131 \u00f6\u011frendiniz. Drone&#8217;un Docker-native yap\u0131s\u0131 sayesinde, projeleriniz i\u00e7in h\u0131zl\u0131, izole ve \u00f6l\u00e7eklenebilir CI\/CD s\u00fcre\u00e7leri olu\u015fturabilirsiniz. Daha karma\u015f\u0131k pipeline&#8217;lar i\u00e7in Drone belgelerini inceleyerek da\u011f\u0131t\u0131m ad\u0131mlar\u0131, bildirimler, matris build&#8217;leri ve daha fazlas\u0131n\u0131 ke\u015ffedebilirsiniz.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><strong>S: Drone neden \u00e7al\u0131\u015fm\u0131yor veya build&#8217;ler ba\u015flam\u0131yor?<\/strong><br \/>\n<strong>C:<\/strong> \u0130lk olarak, Docker konteynerlerinin \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun: <code>docker ps -a<\/code>. Ard\u0131ndan, Drone sunucusu ve agent&#8217;\u0131n\u0131n loglar\u0131n\u0131 kontrol edin: <code>docker logs drone<\/code> ve <code>docker logs drone-agent<\/code>. Ortam de\u011fi\u015fkenlerinin (\u00f6zellikle <code>DRONE_RPC_SECRET<\/code>) sunucu ve agent aras\u0131nda e\u015fle\u015fti\u011finden emin olun. G\u00fcvenlik duvar\u0131n\u0131z\u0131n (UFW) 80 ve 443 portlar\u0131n\u0131 a\u00e7t\u0131\u011f\u0131ndan da emin olun.<\/p>\n<p><strong>S: Birden fazla agent kullanabilir miyim?<\/strong><br \/>\n<strong>C:<\/strong> Evet, kesinlikle. Ayn\u0131 <code>DRONE_RPC_SECRET<\/code> ve <code>DRONE_SERVER_HOST<\/code> de\u011fi\u015fkenlerini kullanarak istedi\u011finiz kadar Drone agent&#8217;\u0131 \u00e7al\u0131\u015ft\u0131rabilirsiniz. Drone, gelen i\u015fleri mevcut agent&#8217;lar aras\u0131nda otomatik olarak dengeleyecektir. Bu, paralel build&#8217;ler i\u00e7in harikad\u0131r.<\/p>\n<p><strong>S: Ubuntu 16.04 yerine daha yeni bir s\u00fcr\u00fcm kullanmal\u0131 m\u0131y\u0131m?<\/strong><br \/>\n<strong>C:<\/strong> \u015eiddetle tavsiye edilir. Ubuntu 16.04 art\u0131k Canonical taraf\u0131ndan desteklenmiyor ve g\u00fcvenlik g\u00fcncellemeleri alm\u0131yor. \u00dcretim ortamlar\u0131 i\u00e7in Ubuntu 20.04 LTS veya 22.04 LTS gibi g\u00fcncel ve desteklenen bir i\u015fletim sistemi kullanman\u0131z, sisteminizin g\u00fcvenli\u011fi ve kararl\u0131l\u0131\u011f\u0131 i\u00e7in kritik \u00f6neme sahiptir. Bu rehber sadece iste\u011finiz \u00fczerine 16.04&#8217;\u00fc hedef alm\u0131\u015ft\u0131r.<\/p>\n<p><strong>S: HTTPS kurmak zorunda m\u0131y\u0131m?<\/strong><br \/>\n<strong>C:<\/strong> Evet, \u00f6zellikle GitHub\/GitLab gibi harici Git sa\u011flay\u0131c\u0131larla entegrasyon yap\u0131yorsan\u0131z HTTPS zorunludur. Bu rehberdeki <code>DRONE_TLS_AUTOCERT=true<\/code> ayar\u0131, Drone&#8217;un otomatik olarak Let&#8217;s Encrypt sertifikalar\u0131 al\u0131p kullanmas\u0131n\u0131 sa\u011flayarak s\u00fcreci basitle\u015ftirir. Kendi sertifikalar\u0131n\u0131z\u0131 kullanmak isterseniz, bir ters proxy (Nginx, Caddy) arkas\u0131nda Drone&#8217;u \u00e7al\u0131\u015ft\u0131rabilirsiniz.<\/p>\n<p><strong>S: <code>DRONE_RPC_SECRET<\/code> nedir ve neden \u00f6nemlidir?<\/strong><br \/>\n<strong>C:<\/strong> <code>DRONE_RPC_SECRET<\/code>, Drone sunucusu ile Drone agent&#8217;lar\u0131 aras\u0131ndaki ileti\u015fimi g\u00fcvence alt\u0131na almak i\u00e7in kullan\u0131lan payla\u015f\u0131lan bir s\u0131rd\u0131r. Bu s\u0131r, agent&#8217;lar\u0131n sunucuya kimlik do\u011frulamas\u0131 yapmas\u0131n\u0131 sa\u011flar. Sunucu ve t\u00fcm agent&#8217;lar aras\u0131nda ayn\u0131 de\u011fere sahip olmal\u0131d\u0131r. Bu s\u0131rr\u0131 g\u00fcvenli bir \u015fekilde saklay\u0131n ve ba\u015fkalar\u0131yla payla\u015fmay\u0131n.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"S\u00fcrekli Entegrasyon (CI) ve S\u00fcrekli Da\u011f\u0131t\u0131m (CD) s\u00fcre\u00e7leri, modern yaz\u0131l\u0131m geli\u015ftirmenin temel ta\u015flar\u0131ndan biridir. Bu s\u00fcre\u00e7ler, kod d","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-38579","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Ortam Haz\u0131rl\u0131\u011f\u0131 ve \u00d6nko\u015fullar - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/ortam-hazirligi-ve-onkosullar\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ortam Haz\u0131rl\u0131\u011f\u0131 ve \u00d6nko\u015fullar\" \/>\n<meta property=\"og:description\" content=\"S\u00fcrekli Entegrasyon (CI) ve S\u00fcrekli Da\u011f\u0131t\u0131m (CD) s\u00fcre\u00e7leri, modern yaz\u0131l\u0131m geli\u015ftirmenin temel ta\u015flar\u0131ndan biridir. Bu s\u00fcre\u00e7ler, kod d\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/ortam-hazirligi-ve-onkosullar\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-03T09:41:40+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ortam-hazirligi-ve-onkosullar\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ortam-hazirligi-ve-onkosullar\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Ortam Haz\u0131rl\u0131\u011f\u0131 ve \u00d6nko\u015fullar\",\"datePublished\":\"2026-02-03T09:41:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ortam-hazirligi-ve-onkosullar\/\"},\"wordCount\":1786,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ortam-hazirligi-ve-onkosullar\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ortam-hazirligi-ve-onkosullar\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/ortam-hazirligi-ve-onkosullar\/\",\"name\":\"Ortam Haz\u0131rl\u0131\u011f\u0131 ve \u00d6nko\u015fullar - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-03T09:41:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ortam-hazirligi-ve-onkosullar\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ortam-hazirligi-ve-onkosullar\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ortam-hazirligi-ve-onkosullar\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ortam Haz\u0131rl\u0131\u011f\u0131 ve \u00d6nko\u015fullar\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ortam Haz\u0131rl\u0131\u011f\u0131 ve \u00d6nko\u015fullar - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/ortam-hazirligi-ve-onkosullar\/","og_locale":"tr_TR","og_type":"article","og_title":"Ortam Haz\u0131rl\u0131\u011f\u0131 ve \u00d6nko\u015fullar","og_description":"S\u00fcrekli Entegrasyon (CI) ve S\u00fcrekli Da\u011f\u0131t\u0131m (CD) s\u00fcre\u00e7leri, modern yaz\u0131l\u0131m geli\u015ftirmenin temel ta\u015flar\u0131ndan biridir. Bu s\u00fcre\u00e7ler, kod d","og_url":"https:\/\/fatihsoysal.com\/blog\/ortam-hazirligi-ve-onkosullar\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-03T09:41:40+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"11 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/ortam-hazirligi-ve-onkosullar\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/ortam-hazirligi-ve-onkosullar\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Ortam Haz\u0131rl\u0131\u011f\u0131 ve \u00d6nko\u015fullar","datePublished":"2026-02-03T09:41:40+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/ortam-hazirligi-ve-onkosullar\/"},"wordCount":1786,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/ortam-hazirligi-ve-onkosullar\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/ortam-hazirligi-ve-onkosullar\/","url":"https:\/\/fatihsoysal.com\/blog\/ortam-hazirligi-ve-onkosullar\/","name":"Ortam Haz\u0131rl\u0131\u011f\u0131 ve \u00d6nko\u015fullar - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-03T09:41:40+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/ortam-hazirligi-ve-onkosullar\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/ortam-hazirligi-ve-onkosullar\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/ortam-hazirligi-ve-onkosullar\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Ortam Haz\u0131rl\u0131\u011f\u0131 ve \u00d6nko\u015fullar"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38579","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=38579"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38579\/revisions"}],"predecessor-version":[{"id":38580,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38579\/revisions\/38580"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=38579"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=38579"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=38579"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}