# Ortamlar ve dağıtımlar

> dev, stage ve prod ortamları; otomatik yayın, ortam boyu, değişkenler, yayından önce çalışan komut, geri alma ve ortamı durdurmak.

Bir projenin her ortamı ayrı çalışan bir kopyasıdır. Ortam adları dev, stage ve prod'dur; genellikle dev geliştirme, stage deneme, prod canlı içindir. Her ortam bir dalı izler, kendi değişkenleri, adresi ve boyu vardır.

Ortamlar Projeler sayfasında, projenin altında listelenir. Bir ortamı seçince sekmeleri açılır: **Genel bakış**, **Dağıtımlar**, **Günlükler**, **Değişkenler**, **Veritabanı** ve **Ayarlar**.

## Ortam açmak

«Yeni ortam» düğmesine basın ve seçin:

- «Ortam»: dev, stage ya da prod.
- Boy (aşağıdaki tablo) ve «Uygulama portu».
- İsteğe bağlı olarak ortam değişkenleri ve **Uygulama klasörü ve komutlar** (projeniz depo kökünde değilse uygulama klasörü, gerekirse derleme ve başlatma komutu; Dockerfile yeni ortamda seçilebiliyorsa «Derleme yöntemi» de buradadır, dev ortamının ilk yayını kendiliğinden başladığı için Dockerfile'ı burada seçin; bkz. [Kendi Dockerfile'ınızla derlemek](/docs/tr/proje-yayinlama#kendi-dockerfile-inizla-derlemek)).

Sonra «Ortam oluştur». İzlenen dal ortamın **Ayarlar** sekmesinde, **Genel** bölümündeki «Dal» alanındadır.

## Otomatik yayın

Ortam, izlediği dala yapılan her gönderimde (push) kendiliğinden derlenip yayına çıkabilir. Bu dev ortamında açık başlar; stage ve prod ortamında **Ayarlar** › **Genel** › «Push'ta otomatik yayın» ile açarsınız. Açarken ne olacağı sorulur: o dala gönderdiğiniz her değişiklik, kimse onaylamadan doğrudan yayına çıkar. Kapalıyken ortam yalnız «Dağıt» ile güncellenir.

## Elle dağıtmak

Ortamın başlığındaki «Dağıt» düğmesi **Yeni dağıtım** penceresini açar. Commit alanını boş bırakırsanız dalın son commit'i dağıtılır. Daha önce derlenmiş bir sürümü seçerseniz yeniden derlenmeden dağıtılır.

Dosya yükleyerek açılmış projelerde düğme «Arşiv yükle» olur. Yeni arşivi seçip «Yükle ve dağıt» düğmesine basın. Aynı dosyayı yeniden yüklemek yeni bir derleme başlatmaz.

## Dağıtımlar ve günlükler

**Dağıtımlar** sekmesi her dağıtımı durumuyla listeler: «Kuyrukta», «Yapılıyor», «Başarılı», «Hata» ya da «İptal edildi». Süren bir dağıtım sırasıyla derleme, yayın öncesi komut ve dağıtım adımlarından geçer; «İptal et» süren dağıtımı durdurur.

**Günlükler** sekmesinde uygulamanın çıktısını («Canlı günlük») ve derleme çıktısını («Derleme günlüğü») canlı izlersiniz. Gizli değerler günlükte görünmez.

Yeni sürüm yayına çıkarken eski sürüm önce kapanır; yenisi açılana kadar site kısa bir süre yanıt vermez (ziyaretçinin o sırada gördüğü: [Site açılırken ve kapalıyken](/docs/tr/proje-yayinlama#site-acilirken-ve-kapaliyken)). Platform yöneticinizin kesintisiz yayına aldığı ortamlarda eski sürüm, yenisi hazır olana kadar yayında kalır. Derleme ya da yayından önce çalışan komut düşerse yayındaki sürüme dokunulmaz.

Başarısız bir dağıtım, nedenini ve ne yapacağınızı söyleyen kısa bir özetle gelir. Çoğu zaman yanında sizi doğru yere götüren bir düğme vardır: «Yeniden derle», «Veritabanı ayarlarına git» ya da «Ortam değişkenlerine git».

## Geri almak

Yayındaki sürüm beğenilmezse **Dağıtımlar** sekmesinde eski bir sürümün yanındaki «Geri al» ile o sürüme dönersiniz; panel iki kez onay ister. Geri alma uygulamanın sürümünü geri getirir, veritabanında yapılan değişiklikleri geri almaz.

**Ayarlar** › **Genel** › «Otomatik geri dönüş» açıksa, yeni sürüm açılamadığında ortam önceki sürüme kendiliğinden döner ve bunu dağıtım listesinde yazar.

## Ortam boyu

Ortam boyu uygulamanın kullanabileceği bellek ve işlemcidir; kotanızdan düşer.

| Boy | Bellek | İşlemci |
| --- | ---: | ---: |
| Küçük | 512 MB | 1 vCPU |
| Orta | 1 GB | 1 vCPU |
| Büyük | 2 GB | 2 vCPU |
| Çok büyük | 4 GB | 2 vCPU |

Varsayılan boy Küçük. «Özel» boyda bellek 256 MB ile 64 GB arası, işlemci 1 ile 32 vCPU arası olabilir.

Her ortamın ayrıca bir geçici diski vardır: uygulamanın çalışırken yazdığı alan. Varsayılanı 5 GB, sınırı 1 ile 20 GB arası; kotanızdan düşer ve her yeni sürümde sıfırlanır.

Yayınlar arasında kalması gereken veri için uygulamaya kalıcı disk eklenebilir (kiracınızda açıksa). Kalıcı disk en çok 2 TB olabilir; uygulamanın diskine eklenir ve kotanızdan düşer. Büyütülebilir ama küçültülemez: daha küçük bir disk gerekirse yenisini açıp verinizi taşıyın. Kalıcı diskin her gün bir görüntüsü alınır. Görüntüler varsayılan olarak son 3 gün için tutulur; proje yöneticisi 3, 7 ve 14 gün arasından seçebilir ya da görüntü tutmayı kapatabilir. Görüntüler kotanızdan yalnız diskin boyunu aştıkları kadar düşer. Kotanız görüntüler yüzünden aşılırsa uyarılırsınız; 3 gün içinde kota yükseltilmez ya da yer açılmazsa en eski görüntüler silinir, her diskin en yeni görüntüsü kalır. Görüntü tutmayı kapatırsanız son görüntü, disk silinene kadar yer tutmaya ve kotanızdan düşmeye devam eder. Diski bir görüntünün gününe «Bu güne dön» ile döndürebilirsiniz: o andan sonra yazılanlar bu diskte kaybolur ve uygulama dönüş boyunca kısa süre durur. Önce şimdiki hâlin görüntüsü alınır ve en az 7 gün saklanır; ona dönerek işlemi geri alabilirsiniz.

Boyu ortamın **Ayarlar** sekmesindeki «Boy» satırından değiştirirsiniz.

## Değişkenler

**Değişkenler** sekmesinde ortam değişkenlerini yönetirsiniz: «+ Değişken ekle» ile tek tek ya da `.env` metnini yapıştırarak toplu ekleyebilir, başka bir ortamdan kopyalayabilirsiniz. Bir ortamda en çok 500 değişken olabilir; bir değerin boyu en çok 64 KB.

- Gizli işaretlenen değer panelde bir daha gösterilmez; görmek için «Göster» düğmesine basarsınız ve bu kayda geçer.
- Çatınızın istediği gizli anahtarı (örneğin `AUTH_SECRET`) «Üret» düğmesi rastgele üretir.
- Adı `NEXT_PUBLIC_`, `VITE_`, `REACT_APP_`, `NUXT_PUBLIC_`, `PUBLIC_`, `EXPO_PUBLIC_`, `GATSBY_` ve `VUE_APP_` ile başlayan değişkenler derleme sırasında koda yazılır ve tarayıcıda görünür. Bunlara sır koymayın. Değerleri değişince sürüm yeniden derlenir.
- Bağlı veritabanının değişkenleri Turguz tarafından verilir; aynı adla kendi değerinizi yazarsanız sizinki geçerli olur.

## Yayından önce çalışan komut

Tablo değişikliklerini (migration) yeni sürüm yayına çıkmadan önce bir kez çalıştırın. Komutu ortamın **Ayarlar** sekmesinde, **Yayından önce** bölümündeki «Yayından önce çalışacak komut» alanına yazın. Alan boşsa deponuzdaki `Procfile` dosyasının `release:` satırı kullanılır. Birden çok uygulamalı ortamda her uygulamanın komutu ayrıdır (bkz. [Birden çok uygulama](#birden-cok-uygulama)).

Komut başarısız olursa yeni sürüm yayına çıkmaz, eski sürüm çalışmaya devam eder. «Derlemede veritabanı» açık bir ortamda komut derlemeden önce çalışır (derleme güncel tabloları okusun diye); başarısız olursa derleme başlamaz. Örnek komutlar:

```text
npx prisma migrate deploy
npx drizzle-kit migrate
npx payload migrate
python manage.py migrate --noinput
alembic upgrade head
bin/rails db:migrate
php artisan migrate --force
goose -dir migrations postgres "$DATABASE_URL" up
```

Tablo değişikliğini uygulamanın başlatma betiğine koymayın: her yeniden başlatmada tekrar koşar.

## Tek seferlik komut

Başlıktaki **Diğer işlemler** menüsünden «Komut çalıştır», yayındaki sürümün içinde bir komutu bir kez çalıştırır (örneğin `npm run seed`). Komut ortamın değişkenlerini ve veritabanı bağlantısını görür. Etkileşimli komutlar çalışmaz; veritabanında yapılan değişiklik geri alınmaz.

## Yeniden derlemek, yeniden başlatmak

- «Yeniden derle»: son commit'i (dosyayla açılmış projede son arşivi) değişmemiş olsa da yeniden derler ve dağıtır. Bir derleme sorununu çözerken bağımlılıkları sıfırdan kurdurabilirsiniz.
- «Yeniden başlat»: aynı sürümü derlemeden, güncel değişkenler ve veritabanı bağlantısıyla yeniden başlatır. Uygulama açılana kadar site kısa bir süre yanıt vermez.

İkisi de başlıktaki **Diğer işlemler** menüsündedir.

## Ortamı durdurmak ve başlatmak

**Diğer işlemler** menüsündeki «Durdur» ortamı durdurur: site yanıt vermez, veri ve ayarlar yerinde kalır. Durdurulmuşken dala gönderilen kod yayına çıkmaz. Ortamın başlığındaki «Başlat» yayındaki sürümü güncel ayarlarla yeniden açar.

Durdurulmuş sitenin ziyaretçisinin ne gördüğü: [Site açılırken ve kapalıyken](/docs/tr/proje-yayinlama#site-acilirken-ve-kapaliyken).

## Birden çok uygulama

Tek depoda birden çok uygulamanız varsa (örneğin ayrı bir ön yüz ve arka uç), bir ortamda en çok 3 uygulama çalıştırabilirsiniz. Her uygulama bir web uygulaması, arka plan işi ya da iç servis olabilir (bkz. [Web sitesi olmayan süreçler](#web-sitesi-olmayan-surecler)). Böyle bir ortam, kurulumda «Projenizde birden çok uygulama var» seçeneğiyle açılır; tek uygulamalı bir ortama ikinci süreci sonradan «Uygulama ekle» ile eklersiniz. Her uygulamanın klasörü, adresteki yolu ve kapısı ayrıdır; bunları sonra ortamın **Ayarlar** sekmesindeki **Uygulamalar** bölümünde «Uygulamaları düzenle» ile değiştirirsiniz. Her uygulamanın boyu ayrı seçilir, kotanızdan toplamı düşer.

Böyle bir ortamda her uygulamanın yayından önce çalışan komutu ayrıdır. Komutu uygulamanın satırındaki «Yayından önce» düğmesiyle yazarsınız; komut o uygulamanın içinde, kendi değişkenleriyle çalışır. Boşsa uygulamanın klasöründeki `Procfile` dosyasının `release:` satırı kullanılır. Bir yayında yeni sürümü çıkan her uygulamanın komutu yayından önce çalışır; biri başarısız olursa hiçbir uygulama yeni sürüme geçmez, eski sürümler çalışmaya devam eder.

### Uygulamalar birbirine nasıl bağlanır

Birden çok uygulamalı ortamda Turguz her uygulamaya ortamdaki uygulamaların iç adresini değişkenle verir. Adresi elle yazmayın, kodunuzda bu değişkenlerden okuyun:

- `TURGUZ_UYGULAMA_<AD>_URL`: `http://` ile başlayan adres. Web uygulamalarında ve iç servislerde vardır.
- `TURGUZ_UYGULAMA_<AD>_ADRES`: şemasız `host:port` adresi; gRPC ve TCP istemcileri için. Yalnız iç servislerde vardır.

`<AD>` uygulamanın büyük harfle yazılmış adıdır, tire alt çizgi olur: `odeme-api` adlı iç servisin adresi `TURGUZ_UYGULAMA_ODEME_API_ADRES` değişkenindedir. Arka plan işinin adresi yoktur.

Değişkenler uygulama çalışırken ve yayından önce çalışan komutta vardır, derlemede yoktur. Bu adreslere yalnız ortamın içinden ulaşılır: tarayıcıda çalışan kod ulaşamaz, çağrıyı uygulamanızın sunucu tarafı yapmalıdır.

## Web sitesi olmayan süreçler

Kuyruk işçisi, bot ya da uygulama içi zamanlayıcı gibi port açmayan bir süreci «Arka plan işi» türünde çalıştırırsınız. Yalnız ortamın içindeki uygulamaların çağırdığı bir hizmeti (örneğin gRPC) «İç servis» türünde çalıştırırsınız. Türü uygulama listesinde seçersiniz. Tek uygulamalı ortamda tür ortamın **Ayarlar** sekmesindeki **Derleme ve çalıştırma** bölümündedir.

- **Arka plan işi** port beklemez, sitede adresi olmaz. Yeni sürüm açılmadan önce eskisi durur, böylece iki kopya aynı anda çalışmaz. Yeni sürüm birkaç saniye kesintisiz çalışamazsa önceki sürüm yeniden açılır.
- **İç servis** dışarıdan erişilemez, sitede adresi olmaz. Ortamdaki öteki uygulamalar ona ortamın içindeki adresiyle bağlanır (bkz. [Uygulamalar birbirine nasıl bağlanır](#kardes-uygulama-adresleri)); hazırlık raporu bu adresi, onu bekleyen değişkene öneri olarak verir. İç servis sitenin kökü ve ortamın tek uygulaması olamaz: yanında onu çağıracak bir uygulama gerekir.
- Bir ortamın tek uygulaması arka plan işiyse ortamın sitesi olmaz; alan adı bağlanamaz.

Aynı klasördeki ikinci bir süreç için uygulama eklerken «Derleme kaynağı»nda öteki uygulamayı seçin ve başlatma komutunu yazın. Bu uygulama ayrıca derlenmez, öteki uygulamanın her yeni sürümüyle yeniden başlar. Hazırlık raporu projedeki işçi süreçlerini (örneğin `Procfile`'daki `worker:` satırı) ve kardeş uygulamaların adreslerini söyler.

Projeyi «Kur ve dağıt» ile kurarken bu süreçler «Arka plan işleri» başlığında önerilir. İşaretlediğiniz iş sitenin derlemesiyle ve kendi komutuyla sitenin yanında kurulur. Kalıcı disk seçiliyken iş birlikte kurulmaz; kurulumdan sonra eklenir. Uygulamanın kendisi port açmayan bir işçiyse kurulum ekranında «Arka plan işi olarak kur» seçeneği çıkar.
