57 lines
4.1 KiB
Markdown
57 lines
4.1 KiB
Markdown
# İhaleist yayın ve geri dönüş çalışma notu
|
||
|
||
Bu çalışma notu üretim dağıtımında kullanılacak kontrol sırasını tanımlar. Gerçek üretim erişimi ve sağlayıcı hesapları bu depoda tutulmaz.
|
||
|
||
## Zorunlu üretim değişkenleri
|
||
|
||
- `NODE_ENV=production`
|
||
- `AUTH_SECRET`: en az 32 rastgele baytın hex/base64 karşılığı; Google istemci kimliği yerine kullanılamaz.
|
||
- `CORS_ORIGINS`: frontend originlerinin virgülle ayrılmış tam HTTPS adresleri.
|
||
- Sağlayıcı kullanılacaksa ilgili `GOOGLE_CLIENT_ID`, `STRIPE_SECRET_KEY`, `STRIPE_WEBHOOK_SECRET`, `RESEND_API_KEY` ve `TELEGRAM_BOT_TOKEN` değerleri.
|
||
- `IHALEIST_USER_DATA_DIR` ve `IHALEIST_SHARED_DATA_DIR`: kalıcı volume altında, uygulama dışından erişilemeyen dizinler.
|
||
- Coolify Advanced ayarında **Include Source Commit in Build** açık olmalıdır. Docker imajı `SOURCE_COMMIT` değerini `/api/version` yanıtındaki `release` alanına taşır; bu değer gizli değildir.
|
||
|
||
## Compose ile staging smoke testi
|
||
|
||
Kökteki `docker-compose.production.yml` production benzeri container, kalıcı `ihaleist-data` volume’u ve `/api/ready` healthcheck’i tanımlar. `AUTH_SECRET` zorunludur; sağlayıcı değişkenleri yalnız ilgili entegrasyon açılacaksa verilir.
|
||
|
||
```sh
|
||
AUTH_SECRET="<uzun-rastgele-değer>" IHALEIST_IMAGE=ihaleist:ci IHALEIST_PORT=18080 \
|
||
docker compose -f docker-compose.production.yml up -d
|
||
docker compose -f docker-compose.production.yml ps
|
||
AUTH_SECRET=dummy docker compose -f docker-compose.production.yml down
|
||
```
|
||
|
||
Yerel compose smoke testi 6 Eylül 2026’da `healthy` duruma ulaştı; bu sonuç production deployment kanıtı değildir.
|
||
|
||
## Coolify production sağlık kontrolü
|
||
|
||
Coolify uygulaması `ihaleist:main` için sağlık kontrolü `GET http://localhost:80/api/ready` olarak etkindir; port 80, 10 saniye aralık, 5 saniye zaman aşımı ve 10 deneme kullanılır. Üretim imajında bu kontrolün çalışması için `curl` bulunmalıdır. 6 Eylül 2026 tarihli son rollout `3bfd802` commit'iyle tamamlandı ve uygulama panelinde `running:healthy` olarak doğrulandı. Ardından `npm run qa:live -- https://ihaleist.com` ve `npm run qa:live-five -- https://ihaleist.com` salt okunur olarak başarıyla çalıştırıldı.
|
||
|
||
## Yayın öncesi
|
||
|
||
1. `npm ci`, `npm test` ve `npm run build` çalıştırılır; build chunk uyarıları yayın engeli değil, performans backlog’u olarak kaydedilir.
|
||
2. Veritabanı ve `server/data` volume’ünün tarihli, geri yüklenebilir yedeği alınır; yedek içeriği loglanmaz.
|
||
3. Yeni imaj staging’de başlatılır; `/api/health`, giriş, dosya yükleme/indirme ve beş sabit regresyon ihalesi doğrulanır.
|
||
4. CORS allowlistesi, auth secret ve sağlayıcı test anahtarları staging yanıtlarında kontrol edilir.
|
||
|
||
Hedef commit ve yerel frontend asset hash’i verilerek salt okunur canlı kabul çalıştırılır:
|
||
|
||
```sh
|
||
IHALEIST_EXPECTED_RELEASE="$(git rev-parse HEAD)" \
|
||
IHALEIST_EXPECTED_ASSET_SHA256="$(npm run -s qa:asset-hash)" \
|
||
npm run qa:live -- https://ihaleist.com
|
||
```
|
||
|
||
`qa:asset-hash`, `dist/index.html` içindeki giriş scriptini okuyarak yalnız gerçekten yüklenen ana JavaScript asset’inin hash’ini üretir. Probe `/api/version` release değerini, ana sayfadaki gerçek asset’i ve container içinden bildirilen asset hash’ini birlikte karşılaştırır.
|
||
|
||
## Kademeli yayın
|
||
|
||
Önce tek test firmasıyla trafik açılır. Kayıt, belge, analiz ve bildirim metrikleri izlenir. Hata oranı veya veri tutarsızlığı artarsa yeni trafik durdurulur; dış sağlayıcılara gerçek ödeme, e-posta veya resmi teklif gönderimi yapılmaz.
|
||
|
||
## Geri dönüş
|
||
|
||
Sorun halinde önce uygulama imajı son doğrulanmış sürüme alınır. Migration verisi silinmez veya körlemesine tersine çevrilmez; yedek ayrı bir staging kopyasına geri yüklenerek kayıtlar karşılaştırılır. Veri kaybı şüphesi varsa yalnızca doğrulanmış yedekten ileri düzeltme yapılır ve olay commit, sürüm, iz sürme kimliği ve etkilenen kayıt türüyle kaydedilir.
|
||
|
||
Bu not, staging/production erişimi ve gerçek yedek geri yükleme kanıtı olmadan “yayın kabul edildi” anlamına gelmez.
|