# Yayına alma

> Siteyi Cloudflare Pages, Netlify, Docker ya da Node üzerinde barındır, doğru ortam değerlerini ayarla ve alan adını bağla.

## Render modunu seç

`.env` içinde `RENDER_MODE` değerini ayarla. Varsayılan değer çoğu siteye uyar.

| Mod | Sayfalar ne zaman üretilir | Barındırma | Ne zaman |
| --- | --- | --- | --- |
| static (varsayılan) | build anında | Cloudflare Pages, Netlify, nginx | çoğu site |
| hybrid | build anında, artı sunucu uçları | Node.js | sitenin iletişim formu gibi kendi sunucu uçları gerekiyorsa |
| server | her istekte | CDN arkasında Node.js | binlerce sayfa ya da dakikalar içinde güncellenmesi gereken içerik |

Sayfa kodu her modda aynıdır. Şablonun bir sunucuya ihtiyacı varsa `README.md` dosyasında yazar.

## Önce yerelde build al

```bash
pnpm build
```

Bunun için [Sanity bağlantısı](https://templates.artizanteknoloji.com/dokumanlar/sanity-baglantisi) adımındaki Sanity ayarların gerekir. Build bilgisayarında geçiyorsa host da aynı çıktıyı üretir.

## Statik: Cloudflare Pages ya da Netlify

Gizli reponu host’a bağla ve şu build ayarlarını kullan:

| Ayar | Değer |
| --- | --- |
| Build komutu | pnpm build |
| Çıktı klasörü | dist/client |
| Node.js sürümü | 22 |

Build ortam değerlerini ekle. Bunları `.env` dosyandan kopyala:

```bash
PUBLIC_SITE_URL=https://example.com
PUBLIC_SANITY_PROJECT_ID=abc12345
PUBLIC_SANITY_DATASET=production
PUBLIC_SANITY_API_VERSION=2026-08-01
```

Build, host’un yönlendirme ve başlık dosyalarını (`_redirects`, `_headers`) senin için yazar; bunları elle düzenleme.

## Statik: Docker (nginx)

```bash
docker build -f Dockerfile.static \
  --build-arg PUBLIC_SITE_URL=https://example.com \
  --build-arg PUBLIC_SANITY_PROJECT_ID=abc12345 \
  -t my-site .
docker run -p 8080:8080 my-site
```

İmaj, nginx’i root yetkisi olmadan 8080 portunda çalıştırır. Sağlık kontrolü `/api/health` adresindedir.

## Hybrid ya da server: Docker (Node.js)

```bash
docker build -f Dockerfile.node \
  --build-arg RENDER_MODE=hybrid \
  --build-arg PUBLIC_SITE_URL=https://example.com \
  --build-arg PUBLIC_SANITY_PROJECT_ID=abc12345 \
  -t my-site .
docker run -p 3000:3000 my-site
```

Sunucu 3000 portunu dinler ve sağlık kontrolü `/api/health` adresindedir. Yeni bir sürüm yayına alınırken süren isteklerin tamamlanabilmesi için konteynere en az 10 saniyelik bir durdurma bekleme süresi (stop grace period) ver.

Docker olmadan doğrudan build alıp başlatmak için:

```bash
pnpm build
HOST=0.0.0.0 pnpm start
```

## Build anında sabitlenen değerler

`RENDER_MODE` ve `PUBLIC_` ile başlayan her değer siteye build sırasında gömülür. Build ve çalışma zamanı ayarlarını ayıran platformlarda bunları **build** değeri olarak ekle. Yalnızca çalışma zamanında ayarlarsan build sessizce varsayılan değerleri kullanır. Bu değerlerden birini değiştirdikten sonra yeniden build al.

## Yayınla ve yeniden build et

Statik bir site, yeni içeriği yeniden build edildikten sonra gösterir. Her yayında yeniden build almak için:

1. Host’unda bir deploy hook oluştur (Cloudflare Pages da Netlify da sunar) ve URL’ini kopyala.
2. [sanity.io/manage](https://www.sanity.io/manage) üzerinde projeni aç → **API** → **Webhooks** ve bir webhook ekle:
  - **URL:** deploy hook adresi
  - **Trigger on:** create, update, delete
  - **Drafts:** kapalı
  - **Projection:** `{_id, _type}`

`hybrid` ve `server` modlarında webhook’u bunun yerine `https://example.com/api/revalidate` adresine yönlendir ve sırrını (secret) `.env` dosyandaki `SANITY_WEBHOOK_SECRET` değeri yap. `hybrid` modunda, bir yayının yeniden build tetiklemesi için sunucuda `DEPLOY_HOOK_URL` değerini de ayarla. `.env.example` içindeki yorumlar her host için gereken değerleri listeler.

## Alan adını bağla

1. Alan adını host’unun ayarlarına ekle ve DNS talimatlarını izle.
2. `PUBLIC_SITE_URL` değerini `https://` ile birlikte alan adına ayarla ve yeniden build al.
3. Sanity’nin bu alan adından gelen istekleri kabul etmesini sağla:

```bash
pnpm sanity:setup --project abc12345 --site-url https://example.com
```

## Statik sitede iletişim formları

Statik bir sitenin kendi sunucu ucu yoktur. Şablonun bir iletişim formu içeriyorsa `README.md` ve `.env.example` dosyaları seçenekleri gösterir: formu harici bir form servisine gönder ya da `RENDER_MODE=hybrid` moduna geç.

---

https://templates.artizanteknoloji.com/dokumanlar/yayina-alma
