Bu site kendi sunucumda Coolify ile yayında
Yönetilen bir platform on dakika sürerdi. Onun yerine Coolify ile kurduğum yayın hattının ne yaptığını ve nerede tökezlediğimi anlatıyorum.
- devops
- coolify
- docker
Neden kendi sunucum
Bu siteyi yönetilen bir platformda barındırmak on dakikalık bir iş olurdu. Kendi sunucumda çalıştırmak ise sitenin kendisini bir iddianın kanıtına çeviriyor: DevOps yaptığını söyleyen bir portfolyonun, üstünde durduğu altyapıyı da göstermesi gerektiğini düşünüyorum.
Hat nasıl çalışıyor
Uygulama çok aşamalı bir Dockerfile ile derleniyor; deps, builder ve runner aşamaları ayrı, çalışan konteyner root olmayan bir kullanıcıya düşüyor ve yalnızca .next/standalone, .next/static ve public klasörlerini taşıyor. Açık kaynak, kendi sunucumda çalışan dağıtım platformu Coolify, GitHub App entegrasyonu üzerinden depoyu izliyor: main dalına giden her commit otomatik bir yayın tetikliyor, açılan her pull request kendi önizleme adresini alıyor. Önde Traefik duruyor, TLS sonlandırma ve yönlendirme orada.
Nerede tökezledim
İlk tökezleme sağlık kontrolüydü. Coolify'ın arayüzden kurduğu HTTP sağlık kontrolü, konteynerin içinde curl veya wget bulunmasını şart koşuyor (Coolify docs (yeni sekmede açılır)); kullandığım node:24-alpine imajında curl yok, wget ise busybox'ın kısıtlı sürümü. Bu depodaki kontrol bu yüzden harici bir ikiliye yaslanmak yerine Node'un kendi fetch çağrısıyla yazıldı ve production'a bağlanmadan önce staging'de doğrulanıyor. Konteynerin kendi sağlık kontrolü şu satıra indi:
HEALTHCHECK --interval=15s --timeout=5s --start-period=30s --retries=3 \
CMD ["node", "-e", "fetch(`http://127.0.0.1:${process.env.PORT || 3000}/api/health`).then((r) => process.exit(r.ok ? 0 : 1)).catch(() => process.exit(1))"]
İkincisi ortam değişkenlerinin katmanıydı: NEXT_PUBLIC_ ile başlayan değerler derleme sırasında paket içine gömülüyor, bu yüzden derleme değişkeni olarak verilmek zorundalar; bu depoda site adresi eksikse derleme bilerek hata veriyor ki yanlış adres sessizce pakete gömülmesin. Bunun tersi daha kötü: bir API anahtarını derleme değişkeni yapmak onu imaj katmanlarına ve derleme günlüklerine sızdırabiliyor.
Ne kazandım
Yayın adımının tamamı bir komuta indi ve altyapının her parçası depoda duruyor. Karşılığında ödediğim bedel bakım: sunucu, sertifika ve güncellemeler artık benim işim. Kişisel bir site için bu takas bana değdi, çünkü öğrenmek istediğim şey tam olarak buydu. Aynı hattı bir müşterinin sitesi için de kurdum; bu tür işleri hizmetler sayfasında topladım.
Paylaş
Bu sayfanın bağlantısı paylaşıldığında görünen kart.
- X'te paylaş (yeni sekmede açılır)
- LinkedIn'de paylaş (yeni sekmede açılır)
- WhatsApp'ta paylaş (yeni sekmede açılır)
- E-posta ile gönder
Aklınızda bir iş var mı?
Birkaç cümle yeter: ne yapılacak ve ne zamana kadar.