Skip to content

DevOps & Tools Genel Bakış (Overview)

Giriş (Introduction)

Bu kategori, yazılım geliştirme sürecinin altyapısını oluşturan araç ve teknolojileri kapsar. Modern bir yazılım projesinde kod yazmak tek başına yeterli değildir; kodun versiyonlanması, çalıştırılacağı ortamın hazırlanması, sunuculara dağıtılması ve tüm bu süreçlerin otomasyonu gerekir.

Bu rehber grubunda aşağıdaki konular ele alınmaktadır:

  • Geliştirme Ortamı: Kod editörleri, terminal araçları ve verimli çalışma düzenleri
  • Versiyon Kontrolü (Version Control): Kaynak kodun takibi, dallandırma stratejileri ve ekip içi iş birliği
  • Konteynerizasyon (Containerization): Uygulamaların izole ortamlarda paketlenmesi ve taşınabilir hale getirilmesi
  • Sunucu Yönetimi (Server Management): Linux tabanlı sunucuların kurulumu, yapılandırması ve bakımı

Amaç, bir geliştiricinin "kodumu yazdım, şimdi ne yapacağım?" sorusuna sistematik bir cevap sunmaktır.


Araç Karşılaştırma Tablosu (Tool Comparison)

Aşağıdaki tablo, bu kategoride ele alınan temel araçları özetlemektedir.

AraçNe İçin KullanılırZorunluluk SeviyesiÖğrenme EğrisiAlternatifler
GitVersiyon kontrolü, kod takibi, ekip iş birliğiZorunluOrtaSVN, Mercurial
DockerKonteynerizasyon, izole geliştirme ortamıYüksekOrta-YüksekPodman, LXC
Ubuntu/LinuxSunucu yönetimi, geliştirme ortamıYüksekOrtaCentOS, Debian
VS CodeKod editörü, hata ayıklama, eklenti ekosistemiÖnerilenDüşükJetBrains, Vim, Sublime
TerminalKomut satırı işlemleri, otomasyon, betik yazımıZorunluOrtaPowerShell (Windows)

Zorunluluk seviyeleri hakkında:

  • Zorunlu: Her geliştiricinin bilmesi gereken, alternatifi olmayan beceriler
  • Yüksek: Profesyonel projelerde neredeyse standart, öğrenmemek dezavantaj oluşturur
  • Önerilen: Verimlilik artırır ancak farklı tercihler yapılabilir

DevOps Öğrenme Yol Haritası (Learning Roadmap)

Aşağıdaki sıralama, bir geliştiricinin DevOps becerilerini adım adım inşa etmesi için önerilen yolu göstermektedir. Her adım bir öncekinin üzerine kuruludur.

Adım 1: Terminal Temelleri (Terminal Basics)

Komut satırını rahat kullanabilmek tüm sonraki adımların ön koşuludur. Dosya sistemi gezinme, dosya işlemleri, süreç yönetimi ve temel betik yazımı bu aşamada öğrenilmelidir.

  • Temel komutlar: cd, ls, cp, mv, rm, mkdir, cat, grep
  • Dosya izinleri ve kullanıcı yönetimi
  • Pipe ve yönlendirme operatörleri
  • Ortam değişkenleri

Adım 2: Git

Versiyon kontrolü, bireysel projelerde bile vazgeçilmezdir. Commit, branch, merge ve conflict çözme işlemlerini öğrenmek gerekir.

  • git init, git clone, git add, git commit
  • Dallandırma: git branch, git checkout, git merge
  • Uzak depo işlemleri: git push, git pull, git fetch
  • Çatışma çözümü (conflict resolution) ve rebase stratejileri

Adım 3: VS Code

Editörü verimli kullanmak geliştirme hızını doğrudan etkiler. Kısayollar, eklentiler ve entegre terminal kullanımı bu aşamada ele alınır.

  • Temel kısayollar ve çoklu imleç kullanımı
  • Eklenti yönetimi (ESLint, Prettier, GitLens vb.)
  • Entegre terminal ve hata ayıklama araçları
  • Çalışma alanı yapılandırması

Adım 4: Docker

Uygulamaların izole ortamlarda çalıştırılması, "benim makinemde çalışıyor" sorununu ortadan kaldırır.

  • Dockerfile yazımı ve imaj oluşturma
  • Konteyner yaşam döngüsü: docker run, docker stop, docker rm
  • Docker Compose ile çoklu konteyner yönetimi
  • Volume ve ağ yapılandırması

Adım 5: Linux/Ubuntu

Üretim sunucuları büyük çoğunlukla Linux tabanlıdır. Temel sistem yönetimi bilgisi sunucu işlemleri için gereklidir.

  • Paket yönetimi: apt update, apt install
  • Servis yönetimi: systemctl
  • Güvenlik duvarı yapılandırması: ufw
  • SSH bağlantısı ve anahtar yönetimi

Adım 6: CI/CD (Sürekli Entegrasyon / Sürekli Dağıtım)

Sürekli entegrasyon ve sürekli dağıtım, kod değişikliklerinin otomatik olarak test edilmesini ve yayınlanmasını sağlar.

  • GitHub Actions veya GitLab CI temelleri
  • Pipeline tanımlama ve aşamalar
  • Otomatik test ve dağıtım süreçleri

Adım 7: Nginx

Web sunucusu ve ters proxy olarak Nginx, uygulamaların dünyaya açılmasında kritik rol oynar.

  • Temel yapılandırma ve sanal sunucu tanımları
  • Ters proxy ayarları
  • SSL/TLS sertifika yönetimi (Let's Encrypt)
  • Yük dengeleme temelleri

Adım 8: Kubernetes (İleri Seviye / Advanced)

Büyük ölçekli projelerde konteynerlerin orkestasyonu için kullanılır. Docker bilgisi ön koşuldur.

  • Pod, Service, Deployment kavramları
  • kubectl temel komutları
  • Helm ile paket yönetimi
  • Ölçeklendirme ve izleme

Ne Zaman Ne Kullanılır - Karar Ağacı (Decision Tree)

Projenizin ihtiyacına göre hangi aracı kullanacağınızı belirlemek için aşağıdaki karar ağacını takip edebilirsiniz.

Versiyon Kontrolü Gerekiyor mu?

Evet -- Git kullanın. Bu tartışmaya açık değildir; her projede, her zaman Git kullanılmalıdır. Bireysel projede bile commit geçmişi hayat kurtarır.

Geliştirme Ortamı Tutarsızlığı Var mı?

Evet -- Docker kullanın. "Benim makinemde çalışıyor" sorunuyla karşılaşıyorsanız, Docker Compose ile tüm bağımlılıkları tanımlayın. Ekipteki herkes aynı ortamda çalışsın.

Uygulamayı Sunucuya Yayınlamak mı İstiyorsunuz?

Evet -- Ubuntu + Nginx kombinasyonunu kullanın. Ubuntu sunucu işletim sistemi olarak, Nginx ise web sunucusu veya ters proxy olarak görev yapar.

Verimli Bir Kod Editörüne İhtiyacınız Var mı?

Evet -- VS Code kullanın. Ücretsiz, hafif, geniş eklenti desteği ve entegre terminal ile en yaygın tercih. Farklı bir editör tercih etmenizde sakınca yoktur ancak VS Code ekosistemi çok geniştir.

Birden Fazla Konteyner Yönetmeniz mi Gerekiyor?

  • Az sayıda konteyner -- Docker Compose yeterlidir.
  • Büyük ölçekli, üretim ortamı -- Kubernetes kullanın. Otomatik ölçeklendirme, kendini iyileştirme ve sürüm geçişi gibi özelliklere ihtiyacınız varsa Kubernetes doğru seçimdir.

Dağıtım Sürecini Otomatikleştirmek mi İstiyorsunuz?

Evet -- CI/CD pipeline kurun. GitHub Actions, GitLab CI veya Jenkins ile her push işleminde testleri otomatik çalıştırın ve başarılı olursa üretim ortamına dağıtın.


Rehber Haritası (Guide Map)

Aşağıdaki tablo, bu kategorideki mevcut rehberleri ve kapsadıkları konuları özetlemektedir.

RehberDosyaKapsamSeviye
Git Notlarıgit-notes.mdTemel ve ileri Git komutları, dallandırma stratejileri, çatışma çözümüBaşlangıç - Orta
Docker Rehberidocker-guide.mdDockerfile, Docker Compose, volume yönetimi, ağ yapılandırmasıBaşlangıç - Orta
Ubuntu Geliştirici Rehberiubuntu-full-developer-guide.mdSunucu kurulumu, paket yönetimi, servis yapılandırması, güvenlikBaşlangıç - İleri
VS Code Rehberivscode-guide.mdKısayollar, eklentiler, hata ayıklama, çalışma alanı ayarlarıBaşlangıç
Terminal ve Kısa Yollaruniversal-shortcuts.mdTerminal komutları, kısayollar, verimlilik ipuçlarıBaşlangıç

Önerilen okuma sırası:

  1. Terminal ve Kısa Yollar -- temel komut satırı becerileri
  2. Git Notları -- versiyon kontrolü temelleri
  3. VS Code Rehberi -- editör verimliliği
  4. Docker Rehberi -- konteynerizasyon
  5. Ubuntu Geliştirici Rehberi -- sunucu yönetimi

Terim Sözlüğü (Glossary)

Konteyner & Altyapı (Container & Infrastructure)

TerimAçıklamaÖrnek
ContainerUygulamayı ve bağımlılıklarını izole çalıştıran hafif paketDocker container
ImageContainer'ın salt okunur şablonu — Dockerfile'dan oluşurnode:20-alpine, php:8.3-fpm
DockerfileImage oluşturmak için talimat dosyasıFROM, RUN, COPY, CMD
Docker ComposeÇoklu container'ı birlikte yönetme aracıdocker compose up -d
VolumeContainer verisini kalıcı saklamaDatabase verileri, upload dosyaları
OrchestrationContainer'ları otomatik yönetme, ölçeklendirmeKubernetes, Docker Swarm
PodKubernetes'te en küçük deploy birimi — 1+ containerkubectl get pods
ClusterBirden fazla sunucunun birlikte çalışmasıKubernetes cluster

Versiyon Kontrol (Version Control)

TerimAçıklamaÖrnek
Repository (Repo)Proje dosyalarının versiyon geçmişiyle saklandığı depoGitHub, GitLab, Bitbucket
BranchAna koddan ayrılan bağımsız geliştirme kolufeature/login, bugfix/header
CommitDeğişikliklerin anlık görüntüsü + açıklama mesajıgit commit -m "feat: login eklendi"
Mergeİki branch'i birleştirmegit merge feature/login
RebaseCommit geçmişini yeniden düzenleme — temiz tarihçegit rebase main
Pull Request (PR)Kod inceleme ve birleştirme talebiGitHub PR, GitLab MR
StashDeğişiklikleri geçici olarak saklamagit stashgit stash pop
TagBelirli commit'i etiketleme — sürüm numarasıv1.0.0, v2.1.3

CI/CD & Deployment

TerimAçıklamaÖrnek
CIContinuous Integration — kod her push'ta otomatik testGitHub Actions, Jenkins
CDContinuous Deployment — test geçen kod otomatik deployVercel, Netlify, AWS
PipelineCI/CD adımlarının sıralı akışılint → test → build → deploy
ArtifactBuild sonucu oluşan dağıtılabilir dosya.tar.gz, Docker image, .deb
EnvironmentUygulamanın çalıştığı ortamdevelopment, staging, production
Blue-Greenİki ortam arası kesintisiz geçişEski → Yeni, sorun olursa geri dön
RollbackProblemli deploy'u geri almaÖnceki sürüme dönme
SecretGizli bilgi — şifre, API key, token.env, GitHub Secrets, Vault

Sunucu & Network (Server & Network)

TerimAçıklamaÖrnek
Reverse Proxyİstekleri arka plan sunuculara yönlendiren aracıNginx, Caddy, Traefik
Load BalancerTrafiği birden fazla sunucuya dağıtmaRound-robin, least connections
SSL/TLSHTTPS şifreleme — veri güvenliğiLet's Encrypt sertifikası
DNSDomain Name System — alan adını IP'ye çevirmefahriaydin.dev123.45.67.89
FirewallAğ trafiğini filtreleyen güvenlik duvarıUFW, iptables
SSHSecure Shell — şifreli uzak sunucu erişimissh user@sunucu
PortUygulamanın dinlediği ağ noktasıHTTP: 80, HTTPS: 443, MySQL: 3306
DaemonArka planda sürekli çalışan servisdockerd, nginx, sshd
CronZamanlanmış görev çalıştırıcı0 3 * * * /backup.sh (her gece 3:00)

DevOps & Tools

Diğer Kategoriler (Other Categories)

Developer Guides & Technical References