Deployment Kabusu: Kod Yayınlamak Neden Solo Geliştiriciler İçin Hâlâ Bu Kadar Zor
Özet: Kod yazmayı öğrendiniz. Harika bir şey inşa ettiniz. Şimdi onu internete koymanız gerekiyor. Gerçek kabusa hoş geldiniz — deployment. Bu rehber neden bu kadar acı verici olduğunu, 2025’te hangi seçeneklerin var olduğunu ve DevOps tavşan deliğinden nasıl kaçacağınızı anlatıyor.
Her Geliştiricinin Korktuğu An
Başardınız. Haftalarca kod yazdıktan sonra, uygulamanız sonunda çalışıyor. Frontend akıcı, backend istekleri mükemmel şekilde işliyor, veritabanı her şeyi doğru saklıyor. Yerel ortamda çalıştırıyorsunuz ve muhteşem görünüyor.
Sonra sayısız geliştiriciyi yıkan o soru geliyor:
“Bunu internete nasıl koyarım?”
Ve aniden, tanımadığınız terimlerden oluşan bir denizde boğuluyorsunuz:
- Docker
- Kubernetes
- CI/CD pipeline’ları
- Nginx reverse proxy
- SSL sertifikaları
- Ortam değişkenleri
- Load balancer’lar
- Container orkestrasyonu
- Serverless fonksiyonlar
- VPS yapılandırması
Sadece uygulamanızı dünyayla paylaşmak istiyordunuz. Bunun yerine, zaten her şeyi bildiğinizi varsayan dokümantasyon okuyorsunuz.
Bu deployment kabusu. Ve yalnız değilsiniz.
Asıl Sorun: Kod Yazmak Kolay, Deployment Zor
”Benim Makinemde Çalışıyor” Laneti
Her geliştirici bu acıyı bilir. Uygulamanız dizüstü bilgisayarınızda mükemmel çalışıyor. Ama deploy etmeye çalıştığınız an:
- Bağımlılıklar eksik
- Ortam değişkenleri ayarlanmamış
- Veritabanı bağlantısı başarısız
- Portlar engellenmiş
- Dosya yolları yanlış
- Şu kütüphane, varlığından haberiniz bile olmayan bir sistem bağımlılığı gerektiriyor
Bu yeni bir sorun değil. On yıllardır yazılım geliştirmenin belası. Docker tam olarak bunu çözmek için yaratıldı — ama Docker’ın kendisi öğrenilmesi gereken başka bir şey haline geldi.
Beceri Açığı
İşte kod yazmayı öğrenmeye başladığınızda kimsenin söylemediği şey:
Uygulamayı inşa etmek = İşin %50’si Deploy etmek ve sürdürmek = Diğer %50’si
Çoğu kodlama bootcamp’ı ve tutorial’ı neredeyse tamamen özellik geliştirmeye odaklanır. Deployment genellikle sondaki kısa bir bahisten ibarettir: “Şimdi Heroku’ya deploy edin!” — sanki bu bir şey açıklıyormuş gibi.
Sonuç? Full-stack uygulamalar geliştirebilen ama bunları bir sunucuda nasıl çalıştıracağı hakkında hiçbir fikri olmayan milyonlarca geliştirici.
Solo Geliştiricinin İkilemi
Bir şirkette, genellikle bir DevOps ekibi vardır. Sunucuları, deployment’ları, CI/CD’yi, izlemeyi ve güvenliği onlar halleder. Geliştiriciler sadece… geliştirirler.
Ama solo geliştirici veya indie hacker olarak, siz DevOps ekibisiniz. Ayrıca:
- Frontend geliştirici
- Backend geliştirici
- Veritabanı yöneticisi
- Güvenlik uzmanı
- Sistem yöneticisi
- Müşteri desteği
Deployment’ın bunaltıcı hissettirmesi şaşırtıcı değil.
Karmaşıklık Patlaması
2015’e Karşı 2025: Kolaylaşmadı, Zorlaştı
On yıllık ilerlemenin ardından deployment’ın daha basit olacağını düşünebilirsiniz. Bazı açılardan öyle. Ama birçok açıdan, daha karmaşık hale geldi.
2015 Deployment:
- FTP ile dosyaları shared hosting’e yükle
- Ya da Heroku’ya push et (ücretsiz katman)
- Bitti
2025 Deployment:
- Docker ile containerize et
- Kubernetes kur (veya yönetilen bir servis kullan)
- GitHub Actions ile CI/CD pipeline yapılandır
- Staging ve production ortamlarını kur
- Secrets yönetimi uygula
- Auto-scaling yapılandır
- İzleme ve loglama kur
- SSL sertifikaları ve domain’leri hallt
- Veritabanı migration’larını yönet
- 47 farklı YAML dosyasıyla uğraş
Sektör, büyük ekipler için harika çalışan ama solo geliştiricileri ezen “en iyi uygulamalara” doğru ilerledi.
Araç Patlaması
2025 itibarıyla, “modern” bir deployment şunları içerebilir:
| Katman | Araçlar | Öğrenme Eğrisi |
|---|---|---|
| Containerization | Docker, Podman | Orta |
| Orkestrasyon | Kubernetes, Docker Swarm | Çok Yüksek |
| CI/CD | GitHub Actions, GitLab CI, Jenkins, CircleCI | Orta-Yüksek |
| Infrastructure as Code | Terraform, Pulumi, Ansible | Yüksek |
| Bulut Sağlayıcıları | AWS, GCP, Azure, DigitalOcean | Yüksek |
| İzleme | Prometheus, Grafana, Datadog | Orta |
| Loglama | ELK Stack, Loki | Orta |
| Secrets Yönetimi | Vault, AWS Secrets Manager | Orta |
| Reverse Proxy | Nginx, Traefik, Caddy | Orta |
| SSL/TLS | Let’s Encrypt, Certbot | Düşük-Orta |
Her araç gerçek bir sorunu çözüyor. Ama birlikte, ustalaşması yıllar alan bir ekosistem oluşturuyorlar.
YAML Cehennemi
Bir Hacker News yorumu saçmalığı mükemmel özetliyor:
“2012: Altyapınız 2 sistem yöneticisi tarafından yönetiliyor.
2022: Altyapınız 10 son derece karmaşık DevOps aracı kullanılarak otomatikleştirildi. İki sistem yöneticisini otomasyonla ortadan kaldırdınız — ama sonra 2 kat daha fazla maaş alan 5 DevOps mühendisi işe almak zorunda kaldınız. Toplam karmaşıklık 10 kat.
YAML, TOML, artı Ansible, Pulumi, Terraform scriptleri yazdılar. Bunlar özel, bazen kırılgan ve her 3 yılda bir yeniden yazılıyor.”
Bu sadece espri değil — gerçeklik.
Platform Ortamı: 2025’teki Seçenekleriniz
1. Kademe: “Sunucuları Düşünmek İstemiyorum”
Bu platformlar çoğu karmaşıklığı soyutlar. Kodu push edersiniz, gerisini onlar halleder.
Vercel
En uygun: Next.js, React, frontend odaklı uygulamalar
Artıları:
- İnanılmaz geliştirici deneyimi
- Git’ten otomatik deployment’lar
- Dahili CDN ve edge fonksiyonlar
- Her PR için önizleme deployment’ları
Eksileri:
- Sınırlı backend yetenekleri
- Serverless fonksiyon zaman aşımları (10-60 saniye)
- Ölçeklendiğinde pahalılaşıyor
- JavaScript dışı backend’ler için pek uygun değil
Fiyatlandırma: Ücretsiz katman, sonra aylık $20
Railway
En uygun: Full-stack uygulamalar, veritabanları, hızlı prototipler
Artıları:
- 4 tıklamada deploy
- Çoğu dili ve framework’ü destekler
- Kolay veritabanı sağlama (Postgres, Redis, MySQL)
- Harika arayüz ve geliştirici deneyimi
- Gerçek zamanlı loglar ve metrikler
Eksileri:
- Kullanım bazlı fiyatlandırma sizi şaşırtabilir
- $5 deneme kredisi hızla tükeniyor
- Rakiplere kıyasla sınırlı bölgeler
Fiyatlandırma: Kullanım bazlı, küçük uygulamalar için ~$5-20/ay
Render
En uygun: Heroku mültecileri, öngörülebilir fiyatlandırma
Artıları:
- Basit ve öngörülebilir fiyatlandırma
- Otomatik yedeklemeli yönetilen Postgres
- Background worker’lar ve cron job’lar
- Denemeler için iyi ücretsiz katman
Eksileri:
- Ücretsiz katman servisleri 15 dakika sonra uykuya geçiyor
- Daha yavaş cold start’lar
- Bazı rakiplerden daha az özellik
Fiyatlandırma: Ücretsiz katman, sonra servis başına aylık $7
2. Kademe: “Daha Fazla Kontrol İstiyorum Ama Çok Fazla Değil”
Fly.io
En uygun: Global dağıtım, düşük gecikmeli uygulamalar
Artıları:
- Container’ları kolayca global olarak deploy edin
- Edge computing için harika
- WebSocket desteği
- İyi CLI deneyimi
Eksileri:
- Daha dik öğrenme eğrisi
- Docker anlamayı gerektiriyor
- CLI ağırlıklı iş akışı
- Fiyatlandırma kafa karıştırıcı olabilir
Fiyatlandırma: Ücretsiz katman, sonra kullandıkça öde
DigitalOcean App Platform
En uygun: Daha sonra VPS’e ölçeklenmesi gerekebilecek geliştiriciler
Artıları:
- Temiz arayüz
- İyi dokümantasyon
- Gerektiğinde tam VPS’e ölçeklenebilir
- Yönetilen veritabanları mevcut
Eksileri:
- Vercel/Railway kadar cilalı değil
- Daha az otomatik optimizasyon
Fiyatlandırma: Minimum aylık $5
3. Kademe: “Tam Kontrol İstiyorum”
VPS (DigitalOcean Droplets, Linode, Vultr)
En uygun: Deneyimli geliştiriciler, ölçekte maliyet optimizasyonu
Artıları:
- Tam kontrol
- Ölçekte öngörülebilir maliyetler
- Her şeyi çalıştırabilir
- Gerçek sunucu yönetimi öğrenin
Eksileri:
- Her şeyi siz yönetiyorsunuz
- Güvenlik sizin sorumluluğunuz
- Otomatik ölçekleme yok
- Önemli zaman yatırımı
Fiyatlandırma: Temel VPS için aylık $5-10
AWS/GCP/Azure
En uygun: Kurumsal, karmaşık mimariler
Artıları:
- Sınırsız ölçeklenebilirlik
- İhtiyacınız olabilecek her servis
- Sektör standardı
Eksileri:
- Bunaltıcı karmaşıklık
- Yanlışlıkla binlerce dolar harcamak kolay
- Dik öğrenme eğrisi
- Dokümantasyon uzmanlık varsayıyor
Fiyatlandırma: Kullandıkça öde (fatura şokuna hazır olun)
Backend Geliştiricisinin Spesifik Sorunları
1. Veritabanı Deployment’ı
Yerel PostgreSQL’iniz harika çalışıyor. Ama production’da:
- Veritabanı nerede yaşayacak?
- Migration’ları nasıl yöneteceksiniz?
- Yedeklemeler ne olacak?
- Connection pooling’i nasıl halledeceksiniz?
- Connection string formatı ne?
- Kimlik bilgileri güvende mi?
Yeni başlayanlar için çözümler:
- Railway/Render: Tek tıklamayla Postgres, otomatik yedeklemeler
- PlanetScale: Branching’li MySQL (harika geliştirici deneyimi)
- Supabase: Ekstralarla Postgres (auth, storage, realtime)
- Neon: Branching’li serverless Postgres
2. Ortam Değişkenleri
Uygulamanız secret’lara ihtiyaç duyuyor: API anahtarları, veritabanı URL’leri, JWT secret’ları. Yerel ortamda, bir .env dosyanız var. Production’da:
- Secret’lar nereye gidecek?
- Onları nasıl güvende tutacaksınız?
- Farklı ortamları nasıl yöneteceksiniz?
- Ya yanlışlıkla Git’e commit ederseniz?
Yeni başlayanlar için çözümler:
- Platform-native secret’lar (Railway, Render, Vercel hepsinde var)
- Basit başlayın, aşırı mühendislik yapmayın
- Gerekli değişkenleri belgelemek için
.env.examplekullanın
3. Dosya Depolama
Uygulamanız dosya yüklemelerini işliyor. Yerel ortamda, /uploads’a gidiyorlar. Production’da:
- Serverless platformlarda dosya depolayamazsınız
- Sunucu yeniden başlatmaları geçici depolamayı kaybeder
- Harici depolamaya ihtiyacınız var (S3, Cloudflare R2)
- Şimdi başka bir servis öğrenmeniz gerekiyor
Yeni başlayanlar için çözümler:
- Cloudflare R2: S3 uyumlu, cömert ücretsiz katman
- Supabase Storage: Zaten Supabase kullanıyorsanız
- Uploadthing: Basitleştirilmiş dosya yüklemeleri
4. Background Job’lar
Uygulamanızın e-posta göndermesi, görüntü işlemesi veya zamanlanmış görevler çalıştırması gerekiyor:
- Serverless fonksiyonların zaman aşımları var
- Bir job kuyruğuna ihtiyacınız var
- Worker’lara ihtiyacınız var
- Şimdi Redis veya başka bir kuyruk sistemine ihtiyacınız var
Yeni başlayanlar için çözümler:
- Render Background Workers: Basit background process’ler
- Inngest: Harika geliştirici deneyimli modern job kuyruğu
- Trigger.dev: Next.js için background job’lar
5. “Yerel Ortamda Çalışıyordu” Debugging’i
Deployment’ınız başarısız oluyor. Loglar şifreli bir şey söylüyor. Ne yanlış olduğu hakkında hiçbir fikriniz yok.
Yaygın suçlular:
- Eksik ortam değişkenleri (sorunların %90’ı)
- Farklı Node.js/Python sürümü
- Build vs runtime bağımlılıkları
- Dosya yolu farklılıkları (Windows vs Linux)
- Eksik sistem bağımlılıkları
Yeni Başlayanlar İçin Önerdiğim Yol
Aşama 1: Basit Başlayın
Docker, Kubernetes ve AWS’yi aynı anda öğrenmeye çalışmayın.
- TEK bir platform seçin (Railway veya Render)
- En basit projenizi deploy edin
- Platformun sizin için ne yaptığını anlayın
- Deployment sürecini uçtan uca deneyimleyin
Aşama 2: Karmaşıklığı Kademeli Olarak Ekleyin
Birkaç uygulama deploy ettikten sonra:
- Docker temellerini öğrenin (sadece Dockerfile, orkestrasyon değil)
- GitHub Actions ile CI/CD’yi anlayın
- Trade-off’ları anlamak için farklı platformları deneyin
Aşama 3: Gerçekten İhtiyacınız Olduğunda Derinleşin
Sadece gerçekten ihtiyacınız olduğunda:
- VPS yönetimini öğrenin
- Kubernetes kavramlarını anlayın
- Belirli servisler için AWS/GCP’yi keşfedin
Solo Geliştiriciler İçin “Yeterince İyi” Stack
2025’te çoğu solo proje için:
| Bileşen | Öneri | Neden |
|---|---|---|
| Frontend Hosting | Vercel veya Cloudflare Pages | Ücretsiz, hızlı, otomatik |
| Backend Hosting | Railway veya Render | Basit, uygun fiyatlı |
| Veritabanı | Railway Postgres veya Supabase | Yönetilen, yedeklemeli |
| Dosya Depolama | Cloudflare R2 | Ucuz, S3 uyumlu |
| Domain’ler/DNS | Cloudflare | Ücretsiz, hızlı, güvenli |
| İzleme | Better Stack veya platform dahili | Basit başlayın |
Toplam maliyet: Çoğu hobi projesi için aylık $0-30
İhtiyacınız Olan Zihinsel Değişim
Deployment’ın Bir Beceri Olduğunu Kabul Edin
Deployment “sadece kodu sunucuya koymak” değil. Öğrenmesi zaman alan ayrı bir beceri seti. Anında bilmediğiniz için kendinizi hırpalamayın.
”Sıkıcı” Teknolojiyi Kucaklayın
En yeni, en çok övülen deployment araçları her zaman en iyi seçim değildir. Bazen “sadece çalışan” sıkıcı seçenek tam da ihtiyacınız olan şeydir.
Önce Yayınlayın, Sonra Optimize Edin
İlk deployment’ınızın mükemmel olması gerekmiyor. Çalışması gerekiyor. Sorunu daha iyi anladığınızda her zaman geliştirebilirsiniz.
Yaparak Öğrenin
Deployment hakkında okumak sizi ancak bir yere kadar götürür. Küçük bir şey deploy edin. Bozun. Düzeltin. Tekrar deploy edin. Bu gerçek öğrenme yoludur.
Yardım İsteyin
Deployment ekosistemi, deneyimli geliştiricilerin bile takıldığı kadar karmaşık. Sessizce acı çekmeyin. Şuralarda soru sorun:
- Stack Overflow
- Reddit (r/webdev, r/devops)
- Discord toplulukları
- Twitter/X
Açık Konuşalım: Deployment Ayak Bağı Olduğunda
Bazen deployment karmaşıklığı buna değmez. İşte alternatifler:
Statik Site Olarak Yayınlayın
Uygulamanız statik frontend + üçüncü taraf backend servisleri (Firebase, Supabase vb.) ile çalışabiliyorsa, yapın. Statik hosting fiilen ücretsiz ve sonsuz ölçeklenebilir.
Backend-as-a-Service Kullanın
- Supabase: Postgres + Auth + Storage + Realtime
- Firebase: SQL hariç her şey
- Convex: Reaktif backend platformu
- Appwrite: Açık kaynak Firebase alternatifi
Başkasının Platformunda Yayınlayın
Bir web uygulaması inşa etmek yerine, şunları düşünün:
- Chrome eklentisi inşa etmek
- CLI aracı inşa etmek
- Mevcut platformların üzerine inşa etmek (Shopify uygulaması, Notion entegrasyonu)
Gelecek: İyileşiyor mu?
İyi Haberler
- Yapay zeka destekli deployment: Railway ve Vercel gibi araçlar framework’leri otomatik algılamada daha akıllı hale geliyor
- Daha iyi varsayılanlar: Platformlar giderek artan şekilde kutudan çıkar çıkmaz “sadece çalışıyor”
- Daha basit araçlar: Yeni platformlar geliştirici deneyimine öncelik veriyor
- Ücretsiz katmanlar: Heroku kendisini öldürmesine rağmen, alternatifler mevcut
Kötü Haberler
- Karmaşıklık artmaya devam ediyor: “En iyi uygulamalar” çıtası yükselmeye devam ediyor
- Maliyet sürünemesi: Ücretsiz katmanlar küçülüyor
- Araç değişimi: Ekosistem değişmeye devam ediyor
- Yapay zeka kaynaklı karmaşıklık: Yapay zeka artık daha da karmaşık yapılandırmalar üretebiliyor
Gerçeklik
Deployment muhtemelen hiçbir zaman “yayınla’ya tıkla” kadar basit olmayacak. Ama çoğu zaman olduğu kadar zor olmak zorunda değil. Araçlarınızı akıllıca seçin, basit başlayın ve hiç yayınlanmayan mükemmel bir şey inşa etmektense kusurlu bir şey yayınlamanın daha iyi olduğunu unutmayın.
Hızlı Başlangıç: İlk Uygulamanızı Bugün Deploy Edin
Next.js/React Uygulamanız Varsa:
# Vercel CLI'yi yükleyinnpm i -g vercel
# Deploy edinvercel
# Bu kadar. Cidden.Node.js/Python Backend’iniz Varsa:
- railway.app’e gidin
- “Start a New Project”a tıklayın
- “Deploy from GitHub repo”yu seçin
- Deponuzu seçin
- Ortam değişkenlerini ekleyin
- 2 dakika bekleyin
- Yayındasınız
Veritabanına da İhtiyacınız Varsa:
- Railway’de ”+ New Service”a tıklayın
- “Database” → “PostgreSQL” seçin
- Connection URL’yi kopyalayın
- Uygulamanıza ortam değişkeni olarak ekleyin
- Bitti
Son Düşünceler
Deployment zor. Bununla zorlanmanız normal. Seçeneklerden bunalmış hissetmeniz normal. “Doğru” yol yerine “kolay” yolu seçmeniz normal.
En iyi deployment stratejisi, uygulamanızı kullanıcıların önüne koyan stratejidir. Geri kalan her şey optimizasyondur.
Basit başlayın. Sık yayınlayın. Giderken öğrenin.
Kodunuz görülmeyi hak ediyor. Deployment kaygısının onu sonsuza dek dizüstü bilgisayarınızda tutmasına izin vermeyin.
En büyük deployment sorununuz ne? Deneyiminizi paylaşın — hepimiz oradaydık.