İçeriğe geç
ship-ready

Yayına alma & barındırma

Rehber 05 · 4 bölüm · 6 araç

Yayına alma & barındırma

Projeyi yayına alırken kullanılan servisler, Node.js backend’inin klasör yapısı ve yayın öncesi listesinde bunlarla çözülen maddeler. Servisler tablosunun ücretleri 25.09.2026’da, mobil servislerin ücretsiz sınırları 05.10.2026’da sitelerinden alındı.

CoolifyKendi sunucunda PaaS

Vercel, Heroku, Netlify ve Railway’e açık kaynak alternatif; kendi sunucuna (VPS, Raspberry Pi, bulut) kurulur. Git’e push edince uygulamayı yayına alır, 300’den fazla hazır servisi (veritabanları dahil) tek tıkla kurar, Let’s Encrypt SSL sertifikasını otomatik alır, veritabanı yedeklerini S3 uyumlu depoya gönderir.

Ne zamanBackend, veritabanı ya da Docker gerektiren projelerÜcretKendi sunucunda ücretsiz ve açık kaynak; yönetilen Coolify Cloud ücretli
DokployKendi sunucunda PaaS

Coolify’a benzer açık kaynak alternatif: uygulama ve veritabanı yayına alma, Docker Compose, otomatik yedek, Traefik ile yönlendirme ve kaynak izleme; tek komutla kurulur.

Ne zamanCoolify yerine; ikisinden birini seçÜcretKendi sunucunda ücretsiz (çekirdek Apache-2.0; SSO ve roller gibi kurumsal özellikler ticari lisans ister); Dokploy Cloud ücretli
fastlaneMobil yayın otomasyonu

iOS ve Android’de ekran görüntüsü üretme, imzalama (provisioning profile) ve App Store ya da Google Play’e yükleme işlerini tek komuta bağlar; proje içindeki Fastfile ile tanımlanır.

Ne zamanMobil uygulamayı sık yayınlıyorsanÜcretÜcretsiz, MIT; anonim kullanım verisi gönderir, opt_out_usage ile kapatılır
Prometheus ve Grafanaİzleme ve alarm

Prometheus sunucudan ve uygulamadan metrik toplar, Grafana bunları panolarda gösterir ve eşik aşılınca Slack gibi kanallara alarm gönderir.

Ne zamanKendi sunucunda çalışan uygulamalarÜcretKendi sunucunda ücretsiz; Prometheus Apache-2.0, Grafana AGPL-3.0
CloudflareDNS, CDN ve güvenlik

Alan adının DNS’i; trafiği önbelleğe alan ve saldırılara karşı koruyan proxy, ücretsiz SSL, DDoS koruması, güvenlik ve rate limiting kuralları.

Ne zamanHer projenin önündeÜcretÜcretsiz planda SSL, CDN ve DDoS koruması var
Cloudflare Workers ve PagesSite ve sunucusuz barındırma

Statik siteleri ve küçük API’leri barındırır; Git’e push edince yayına alır. Webhook alıcıları ve yönlendirmeler için de uygun.

Ne zamanTanıtım siteleri, hafif backend işleriÜcretÜcretsiz planda günde 100.000 istek; statik dosya istekleri ücretsiz ve sınırsız
VercelSite ve sunucusuz barındırma

Next.js ve diğer web projelerini Git’e push edince yayına alır, her PR için önizleme adresi verir; sunucusuz fonksiyonlar ve CDN dahil.

Ne zamanNext.js projeleri, tanıtım siteleriÜcretHobby planı ücretsiz ama sadece ticari olmayan kişisel kullanım için: ödeme alan, satış yapan, reklam ya da affiliate içeren site ücretli plan ister (Vercel kullanım kuralları)
Cloudflare R2Dosya depolama

S3 uyumlu depolama; dışarı veri çıkışı (egress) ücretsiz.

Ne zamanKullanıcı dosyaları, görseller, yedeklerÜcretAyda 10 GB, 1 milyon yazma ve 10 milyon okuma işlemine kadar ücretsiz
Cloudflare TunnelGüvenli erişim

Sunucuda port açmadan uygulamayı internete ya da sadece ekibe açar.

Ne zamanEv ya da ofis sunucusu, iç araçlar, stagingÜcretÜcretsiz

CAPTCHA yerine görünmez doğrulama; giriş, kayıt ve iletişim formlarını botlardan korur.

Ne zamanHerkese açık formlarÜcretÜcretsiz

Mobil uygulamada sık kullanılan derleme, backend, bildirim ve e-posta servisleri; liste bu videodan alındı, sınırlar servislerin kendi fiyat sayfalarından doğrulandı. Ücretsiz sınırlar sık değişiyor; ücretli plana geçmeden önce sayfasına yeniden bak.

Expo EASMobil derleme

React Native uygulamasını bulutta iOS ve Android için derler (Mac gerekmez), mağazalara gönderir (EAS Submit), JavaScript değişikliklerini mağaza incelemesine girmeden kullanıcılara ulaştırır (EAS Update).

Ne zamanReact Native ya da Expo projesiÜcretÜcretsiz planda ayda 15 Android ve 15 iOS derlemesi (düşük öncelikli kuyruk), EAS Update ile 1.000 aylık aktif kullanıcı; kota bitince ücret çıkmaz, derleme ay başını bekler. Starter ayda 19 $
CodemagicMobil CI/CD

Flutter, React Native ve yerel iOS ya da Android projesini her push’ta derler, test eder, imzalar ve App Store Connect ile Google Play’e yükler; macOS makinesi onlarda.

Ne zamanFlutter projesi ya da Mac’in yoksaÜcretKişisel hesapta ayda 500 dakika macOS derlemesi ücretsiz (tek eşzamanlı derleme, derleme başına en çok 120 dakika); sonrası dakika başına 0,095 $’dan
SupabaseBackend (Postgres)

Postgres veritabanı, giriş, dosya depolama, gerçek zamanlı veri ve sunucusuz fonksiyonlar; veritabanına otomatik REST API açar. Her tabloda RLS açık olmalı (yayın öncesi 3. madde).

Ne zamanİlişkisel veri ve SQL isteyen projelerÜcretÜcretsiz planda en çok 2 aktif proje, proje başına 500 MB veritabanı, 1 GB depolama ve 50.000 aylık aktif kullanıcı; yedek yok, 1 hafta kullanılmayan proje duraklatılır. Pro ayda 25 $
FirebaseBackend (Google)

Firestore veritabanı, giriş (Authentication), bildirim (Cloud Messaging), uzaktan ayar (Remote Config), çökme raporu (Crashlytics) ve barındırma (Hosting) tek projede, hazır mobil SDK’larıyla.

Ne zamanMobil uygulamada hızlı başlangıçÜcretSpark planı ücretsiz: Firestore’da 1 GiB ve günde 50.000 okuma, 20.000 yazma; Authentication’da 50.000 aylık aktif kullanıcı (SMS ile giriş sadece ücretli Blaze planında); Cloud Messaging ve Crashlytics ücretsiz; Remote Config 1 Eylül 2026’dan beri günde 100.000 isteğe kadar ücretsiz; Hosting’de 10 GB depolama ve günde 360 MB aktarım
OneSignalBildirim kampanyası

Push bildirimi, uygulama içi mesaj, e-posta ve SMS kampanyalarını panelden zamanlar, kullanıcı gruplarına göre gönderir, açılma oranını ölçer.

Ne zamanPazarlama bildirimleri; işlem bildirimleri için Firebase Cloud Messaging yeterÜcretÜcretsiz planda mobil push ve uygulama içi mesaj 1.000 aylık aktif kullanıcıya kadar (Ekim 2026’dan beri; aşılırsa 24 saat içinde yükseltilmezse mobil push durur) ve ayda 10.000 e-posta. Growth ayda 19 $’dan
Resendİşlem e-postası

Kayıt, şifre sıfırlama ve fatura e-postalarını API ile gönderir; şablonlar React ile yazılabilir, alan adı için gereken SPF ve DKIM kayıtlarını gösterir.

Ne zamanUygulamanın kendi gönderdiği e-postalar (yayın öncesi 118. madde)ÜcretÜcretsiz planda ayda 3.000, günde 100 e-posta ve 3 alan adı. Pro ayda 20 $ (50.000 e-posta)
Zoho MailAlan adlı e-posta kutusu

[email protected] gibi gelen kutusu; mağaza sayfalarında istenen destek adresi için.

Ne zamanMağaza destek ve iletişim adresiÜcretForever Free planı: 5 kullanıcı, tek alan adı, kullanıcı başına 5 GB; sadece web ve mobil uygulamadan erişilir, IMAP, POP ve yönlendirme yok. Ücretsiz plan her veri merkezinde sunulmuyor
TestFlightiOS beta testi

Uygulamanın test sürümünü mağazaya çıkmadan kullanıcılara dağıtır, geri bildirim ve çökme raporu toplar.

Ne zamaniOS’ta yayından önceÜcretÜcretsiz ama Apple Developer Program üyeliği (yıllık 99 $) gerekir; iç testte 100, dış testte 10.000 kişi, bir derleme 90 gün test edilebilir; dış testteki ilk derleme Beta App Review’a girer

Bütün backend tek server.js dosyasındaysa proje büyüdükçe okumak, test etmek ve değiştirmek zorlaşır; aşağıdaki, Express ile yazılmış bir Node.js backend’i için yaygın düzen. Bu gönderiden alındı. İstek şu sırayla ilerler: route, middleware, validator, controller, service, model ve veritabanı; yanıt aynı yoldan döner. Tek doğru yapı yok: küçük projede birkaç dosya yeter, katmanı ihtiyaç doğunca ekle; Next.js, NestJS, Supabase ya da Firebase kullanan projede bu görevler çerçevenin kendi düzenine dağılır. Girdi doğrulama ve yetki kontrolü için yayın öncesi 22. ve 9. maddelere de bak.

config/

Ortam değişkenlerini okuma, veritabanı bağlantısı ve uygulama ayarları; gizli değerler koda değil .env’e yazılır.

Örnek dosyaenv.js, db.js
routes/

API uç noktalarını tanımlar ve isteği ilgili controller’a yönlendirir; iş mantığı içermez.

Örnek dosyaauth.routes.js: router.post("/login", login)
middleware/

İstek controller’a ulaşmadan çalışan ortak adımlar: kimlik doğrulama, yetki, rate limit, istek kaydı.

Örnek dosyaauth.middleware.js
validators/

Gelen veriyi şemayla doğrular (Zod, Joi, express-validator); geçersiz istek iş mantığına ulaşmaz.

Örnek dosyalogin.schema.js
controllers/

İsteği ve yanıtı karşılar: girdiyi alır, service’i çağırır, HTTP durum kodunu ve JSON’u döner.

Örnek dosyaauth.controller.js
services/

İş mantığı: şifre kontrolü, token üretimi, fiyat hesabı. HTTP’den habersiz olduğu için tek başına test edilir.

Örnek dosyaauth.service.js
models/

Veritabanı şemaları ve veri erişimi; proje büyüyünce sorgular ayrı bir repositories/ klasörüne alınabilir.

Örnek dosyauser.model.js (Mongoose, Prisma, Drizzle)
utils/

Birden çok yerde kullanılan küçük yardımcılar: tarih biçimleme, hata sınıfı, logger.

Örnek dosyalogger.js
  • HTTPS ve HSTS (32. madde): Coolify SSL sertifikasını otomatik alır; Cloudflare’de “Always Use HTTPS” ve HSTS açılır.
  • Güvenlik başlıkları (33. madde): Uygulamada ya da Cloudflare’in yanıt başlığı kurallarıyla eklenir.
  • Bot ve rate limit (19–20. maddeler): Giriş ve kayıt formlarında Turnstile, API’de Cloudflare rate limiting kuralı.
  • Staging dışarıya kapalı (2. madde): Staging’i herkese açık alan adına koymak yerine Cloudflare Tunnel ile sadece ekibe aç.
  • Alt alan adları ve e-posta (117–118. maddeler): app. için CNAME, mail. ve news. için SPF, DKIM ve DMARC kayıtları Cloudflare DNS’e girilir.
  • Yedekleme (55. madde): Coolify veritabanı yedeklerini zamanlayıp R2 gibi S3 uyumlu bir depoya gönderir; geri yükleme testini ayrıca yap.
  • Bağımlılık denetimi (54. madde): OSV-Scanner bağımlılıkları ve container imajlarını bilinen açıklara karşı tarar (kaynak kod gönderilmez); JS/TS projesinde Knip kullanılmayan paket ve dosyaları bulur.
  • Directory listing ve source map (4 ve 7. maddeler): Barındırmada klasör listelemenin kapalı olduğunu ve .map dosyalarının yayına çıkmadığını kontrol et.
  • Kesintisiz güncelleme ve geri dönüş (120–121. maddeler): Coolify, sağlık kontrolü tanımlıysa yeni sürümü eskisiyle bir süre birlikte çalıştırarak günceller (rolling update); kesintisizliği garanti etmez, host’a port açılmışsa ya da Docker Compose kullanılıyorsa çalışmaz. Sorun çıkarsa Configuration > Rollback’ten sunucuda tutulan eski sürüme dönülür; ama bu veritabanı değişikliklerini geri almaz, şema değişiklikleri geriye uyumlu olmalı (rolling update, rollback).