Üretim kurulumu tek compose dosyasıdır: docker-compose.prod.yml. Beş servis kalkar ve sıra bilinçlidir: Migration’ın ayrı bir servis olması yarış önler: üç uygulama aynı anda kalkıp şemayı aynı anda kurmaya çalışmaz — migrate bitmeden uygulamalar başlamaz. Uygulamalar migration bağlantısını değil, RLS’e tabi kısıtlı rolü kullanır.

Adım adım

.env içine taban adresleri ekleyin (banka dönüşleri ve e-posta bağlantıları bunlara göre üretilir):
Sonra:
Compose, zorunlu sırlardan biri eksikse hiç kalkmaz (:?zorunlu doğrulaması); uygulamalar da açılışta anahtarları doğrular — üretimde zayıf ya da eksik anahtarla süreç başlamaz.
Geliştirme kompozisyonu (docker-compose.yml) ile üretim kompozisyonunun proje adları bilinçli olarak ayrıdır (poyra / poyra-prod): aynı ad, üretimin geliştirme volume’ünü devralması gibi gerçek bir arızaya yol açmıştı. İkisini aynı makinede çalıştırıyorsanız adlara dokunmayın.

Veritabanı rolleri

İlk açılışta docker/initdb betikleri iki rol kurar:
  • poyra — tablo sahibi: migration ve Hangfire deposu bunu kullanır.
  • poyra_app — uygulama rolü: SUPERUSER/BYPASSRLS değildir, satır düzeyi güvenliğe tabidir ve kritik tablolarda DELETE yetkisi yoktur.
API açılışta canlı bir bekçi sorgusuyla rolün gerçekten RLS’e tabi olduğunu doğrular; süper kullanıcıyla bağlanmış bir üretim süreci açılmaz — süper kullanıcıda politikalar yerinde durur ama tek satır bile filtrelenmez.

Ters vekil

Üç alan adını üç porta bağlayın; TLS vekilin işidir. Caddy örneği:
  • Panel Blazor Server’dır: vekilde WebSocket geçişi açık olmalıdır.
  • /hangfire (arka plan işleri panosu) API host’undadır ve platform anahtarıyla korunur; vekilde tümüyle kapatmak da meşru bir tercihtir.
  • Sağlık uçları: GET /health/live (süreç ayakta mı) ve GET /health/ready (veritabanına erişebiliyor mu — başarısızsa 503). İzleme ve yük dengeleyici bunlara bakmalıdır.
Sonraki adım: Yapılandırma ve İlk açılış.