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ır | Zorunluluk Seviyesi | Öğrenme Eğrisi | Alternatifler |
|---|---|---|---|---|
| Git | Versiyon kontrolü, kod takibi, ekip iş birliği | Zorunlu | Orta | SVN, Mercurial |
| Docker | Konteynerizasyon, izole geliştirme ortamı | Yüksek | Orta-Yüksek | Podman, LXC |
| Ubuntu/Linux | Sunucu yönetimi, geliştirme ortamı | Yüksek | Orta | CentOS, Debian |
| VS Code | Kod editörü, hata ayıklama, eklenti ekosistemi | Önerilen | Düşük | JetBrains, Vim, Sublime |
| Terminal | Komut satırı işlemleri, otomasyon, betik yazımı | Zorunlu | Orta | PowerShell (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.
| Rehber | Dosya | Kapsam | Seviye |
|---|---|---|---|
| Git Notları | git-notes.md | Temel ve ileri Git komutları, dallandırma stratejileri, çatışma çözümü | Başlangıç - Orta |
| Docker Rehberi | docker-guide.md | Dockerfile, Docker Compose, volume yönetimi, ağ yapılandırması | Başlangıç - Orta |
| Ubuntu Geliştirici Rehberi | ubuntu-full-developer-guide.md | Sunucu kurulumu, paket yönetimi, servis yapılandırması, güvenlik | Başlangıç - İleri |
| VS Code Rehberi | vscode-guide.md | Kısayollar, eklentiler, hata ayıklama, çalışma alanı ayarları | Başlangıç |
| Terminal ve Kısa Yollar | universal-shortcuts.md | Terminal komutları, kısayollar, verimlilik ipuçları | Başlangıç |
Önerilen okuma sırası:
- Terminal ve Kısa Yollar -- temel komut satırı becerileri
- Git Notları -- versiyon kontrolü temelleri
- VS Code Rehberi -- editör verimliliği
- Docker Rehberi -- konteynerizasyon
- Ubuntu Geliştirici Rehberi -- sunucu yönetimi
Terim Sözlüğü (Glossary)
Konteyner & Altyapı (Container & Infrastructure)
| Terim | Açıklama | Örnek |
|---|---|---|
| Container | Uygulamayı ve bağımlılıklarını izole çalıştıran hafif paket | Docker container |
| Image | Container'ın salt okunur şablonu — Dockerfile'dan oluşur | node:20-alpine, php:8.3-fpm |
| Dockerfile | Image oluşturmak için talimat dosyası | FROM, RUN, COPY, CMD |
| Docker Compose | Çoklu container'ı birlikte yönetme aracı | docker compose up -d |
| Volume | Container verisini kalıcı saklama | Database verileri, upload dosyaları |
| Orchestration | Container'ları otomatik yönetme, ölçeklendirme | Kubernetes, Docker Swarm |
| Pod | Kubernetes'te en küçük deploy birimi — 1+ container | kubectl get pods |
| Cluster | Birden fazla sunucunun birlikte çalışması | Kubernetes cluster |
Versiyon Kontrol (Version Control)
| Terim | Açıklama | Örnek |
|---|---|---|
| Repository (Repo) | Proje dosyalarının versiyon geçmişiyle saklandığı depo | GitHub, GitLab, Bitbucket |
| Branch | Ana koddan ayrılan bağımsız geliştirme kolu | feature/login, bugfix/header |
| Commit | Değişikliklerin anlık görüntüsü + açıklama mesajı | git commit -m "feat: login eklendi" |
| Merge | İki branch'i birleştirme | git merge feature/login |
| Rebase | Commit geçmişini yeniden düzenleme — temiz tarihçe | git rebase main |
| Pull Request (PR) | Kod inceleme ve birleştirme talebi | GitHub PR, GitLab MR |
| Stash | Değişiklikleri geçici olarak saklama | git stash → git stash pop |
| Tag | Belirli commit'i etiketleme — sürüm numarası | v1.0.0, v2.1.3 |
CI/CD & Deployment
| Terim | Açıklama | Örnek |
|---|---|---|
| CI | Continuous Integration — kod her push'ta otomatik test | GitHub Actions, Jenkins |
| CD | Continuous Deployment — test geçen kod otomatik deploy | Vercel, Netlify, AWS |
| Pipeline | CI/CD adımlarının sıralı akışı | lint → test → build → deploy |
| Artifact | Build sonucu oluşan dağıtılabilir dosya | .tar.gz, Docker image, .deb |
| Environment | Uygulamanın çalıştığı ortam | development, staging, production |
| Blue-Green | İki ortam arası kesintisiz geçiş | Eski → Yeni, sorun olursa geri dön |
| Rollback | Problemli deploy'u geri alma | Önceki sürüme dönme |
| Secret | Gizli bilgi — şifre, API key, token | .env, GitHub Secrets, Vault |
Sunucu & Network (Server & Network)
| Terim | Açıklama | Örnek |
|---|---|---|
| Reverse Proxy | İstekleri arka plan sunuculara yönlendiren aracı | Nginx, Caddy, Traefik |
| Load Balancer | Trafiği birden fazla sunucuya dağıtma | Round-robin, least connections |
| SSL/TLS | HTTPS şifreleme — veri güvenliği | Let's Encrypt sertifikası |
| DNS | Domain Name System — alan adını IP'ye çevirme | fahriaydin.dev → 123.45.67.89 |
| Firewall | Ağ trafiğini filtreleyen güvenlik duvarı | UFW, iptables |
| SSH | Secure Shell — şifreli uzak sunucu erişimi | ssh user@sunucu |
| Port | Uygulamanın dinlediği ağ noktası | HTTP: 80, HTTPS: 443, MySQL: 3306 |
| Daemon | Arka planda sürekli çalışan servis | dockerd, nginx, sshd |
| Cron | Zamanlanmış görev çalıştırıcı | 0 3 * * * /backup.sh (her gece 3:00) |
İlgili Rehberler (Related Guides)
DevOps & Tools
- Git Notları
- Docker Rehberi
- Kubernetes
- Nginx Rehberi
- Linux CLI
- Deployment & Hosting
- Ubuntu Rehberi
- VS Code Rehberi
- Regex Rehberi