# Konteynerler

Kaynak: <https://deckpa.com/docs/containers>

> Podman ile yalıtılmış konteynerlerde on hazır uygulama ya da Docker Hub imajı çalıştırın; alan adına ters proxy ile bağlayın.

## Konteyner sistemi

**Sistem → Konteynerler** sayfası yalnızca yöneticiye açıktır; hiçbir yetki grubuna verilemez. Sayfa, kendi çalışma ortamını getiren uygulamaları (Java, Rust ve benzeri) siteleriniz ve sunucu servislerinizden ayrı, yalıtılmış konteynerlerde çalıştırır. PHP uygulamaları için [Uygulamalar](https://deckpa.com/docs/apps) kurulumcusunu kullanın.

Panel önce Podman'ı, o yoksa Docker'ı kullanır. İkisi de kurulu değilse sayfa **Konteyner sistemi kurulu değil** uyarısını ve **Konteyner sistemini kur** düğmesini gösterir. Düğme `podman` paketini kurar ve sunucu yeniden başladığında konteynerlerin de geri gelmesi için Podman'ın yeniden başlatma servisini etkinleştirir. Kurulum birkaç dakika sürer ve sitelerinizi etkilemez. Sistem kurulu ama yanıt vermiyorsa sayfa **Konteyner sistemi yanıt vermiyor** uyarısı verir; bu durumda servisin durmuş olup olmadığına **Servisler** ve **Loglar** sayfalarından bakın.

## Uygulama vitrini

Vitrin on uygulama sunar. Her birinin imajı belirli bir sürüm etiketine sabitlenmiştir; `latest` kullanılmaz, çünkü konteyner yeniden oluşturulduğunda uygulamanın habersizce büyük bir sürüme atlaması verisiyle uyumsuzluk yaratabilir. Önerilen bellek sınırı sihirbazda hazır gelir.

- **n8n** (Otomasyon) — görsel iş akışı otomasyonu. Önerilen bellek 1 GB. Saat dilimini sorar.
- **Uptime Kuma** (İzleme) — site ve servis erişilebilirlik takibi. 512 MB.
- **Vaultwarden** (Parola yönetimi) — kendi sunucunuzda Bitwarden uyumlu parola kasası. 512 MB. Yönetim paneli parolasını ve yeni hesap açılışının açık mı kapalı mı olacağını sorar; hesap açılışı varsayılan olarak kapalıdır.
- **Gitea** (Geliştirme) — hafif Git deposu. 1 GB.
- **Grafana** (İzleme) — metrik panoları. 512 MB. Yönetici parolasını sorar.
- **NocoDB** (Veri) — tabloları elektronik tablo gibi yönetmek için ekip veri paneli. 1 GB.
- **Ghost** (Yayıncılık) — blog ve bülten yayını. 1 GB. Zorunlu **Site adresi** alanı vardır; Ghost ürettiği her bağlantıyı bu adrese göre kurar. Yanlış girilirse site açılır ama görseller ve yönetim paneli kırık görünür. Alan, erişim adımında seçtiğiniz alan adına göre kendiliğinden dolar.
- **DocuSeal** (Belgeler) — sözleşmeleri e-imzaya açma. 1 GB.
- **Wiki.js** (Belgeler) — iç dokümantasyon ve ekip bilgi tabanı. 1 GB.
- **Stirling PDF** (Belgeler) — PDF birleştirme, bölme, sıkıştırma ve imzalama; veri tutmaz. 2 GB.

Listede olmayan bir uygulama için arama kutusuna yazıp **Docker Hub'da ara** düğmesine basın; Docker Hub'daki herhangi bir imajı aynı sihirbazla kurabilirsiniz. Bu yolda port, bellek ve ayarları siz verirsiniz.

> Vitrindeki uygulamaların verisi adlandırılmış bir veri biriminde tutulur ve sürüm yükseltmede korunur. Docker Hub'dan kurduğunuz bir imaj için veri birimi bağlanmaz, çünkü imajın verisini nereye yazdığı bilinemez; konteyner silindiğinde ya da yeniden oluşturulduğunda içindeki veri kaybolur.

## Kurulum sihirbazı

Sihirbaz dört adımdır: **Uygulama**, **Ayarlar**, **Erişim** ve **Özet**. **Ayarlar** adımında şunlar bulunur:

- **Konteyner adı:** harf ya da rakamla başlamalı; harf, rakam ve `_ . -` karakterlerini içerebilir. Panelde bu adla listelenir ve verisi bu ada bağlı birimde tutulur.
- **Sürüm:** Docker Hub'daki en son güncellenen etiketler listelenir. Bir sürümü sabitlemek, imajın beklenmedik biçimde büyük bir sürüme geçmesini önler.
- **Bellek sınırı:** uygulama bu sınırı aşarsa çekirdek onu durdurur. Panel 16 MB ile 65536 MB arasını kabul eder; sihirbaz 512 MB, 1 GB, 2 GB ve 4 GB seçenekleri sunar.
- **İşlemci çekirdeği payı:** sihirbaz 1 çekirdekle başlar; **sınırsız** da seçilebilir. Sınır, konteynerin kullanabileceği en yüksek değerdir; boştayken çekirdekleri meşgul etmez. Sınırsız bırakılan bir uygulama yoğun zamanlarda aynı sunucudaki sitelerin yanıt süresini uzatabilir.
- **Sunucu portu** ve **Uygulamanın dinlediği port:** vitrindeki uygulamalarda panel boş bir port önerir. Docker Hub imajlarında portu siz yazarsınız; sunucu portunu girdiyseniz uygulamanın portu da gerekir. Panel girdiğiniz portun ayrılmış bir sistem portuyla, **Ağ & Erişim** sayfasında açık bir portla ya da başka bir konteynerle çakışıp çakışmadığını anında denetler.

Kurulum bittikten sonra panel konteynerin ayakta kalıp kalmadığını bir süre izler. Uygulama hemen durursa ya da sürekli yeniden başlıyorsa, bunu hata olarak bildirir; en sık neden bellek sınırının yetersiz kalmasıdır ve daha yüksek bir sınırla yeniden kurmanız gerekir.

## Alan adına bağlama

Konteynerin portu her zaman yalnızca `127.0.0.1` adresine bağlanır; doğrudan internete açılmaz. Uygulamaya bir alan adıyla ulaşmak için ters proxy kullanılır. **Erişim** adımında bir site ya da alt alan adı seçersiniz; sonradan da listedeki **Alan adı bağla** düğmesiyle bağlayabilirsiniz.

Bağlama, seçilen sitenin yapılandırmasına bir yönlendirme bloğu ekler ve web sunucusunu yeniden yükler. Güvenlik duvarında yeni port açılmaz; trafik sunucudan çıkmadan konteynere gider. Dışarıya açık tek port zaten açık olan 443'tür ve alan adının SSL sertifikası kullanılır. Bu yüzden alan adının sertifikasını önceden almış olmanız gerekir (bkz. [SSL sertifikaları](https://deckpa.com/docs/ssl)).

- **Alt alan adı kullanın.** Seçilen alan adı tamamen bu konteynere ayrılır: o adreste artık PHP sitesi yayınlanmaz ve tüm istekler konteynere gider. Ana siteyi seçerseniz üzerindeki yayın erişilemez olur. Önce **Siteler** sayfasından bir alt alan adı ekleyin (örneğin `otomasyon.example.com`).
- **Bir konteyner, bir alan adı:** bir alan adı aynı anda tek konteynere bağlanır ve bir konteynerin tek alan adı olabilir. Başka bir bağlantı varsa panel önce onu kaldırmanızı ister.
- **Özel yönlendirme çakışması:** sitenin özel sunucu ayarlarında zaten kök adresi yönlendiren bir kural varsa bağlama reddedilir; panel hangi dosyada olduğunu yazar. Önce o kuralı kaldırın ya da başka bir alan adı seçin. Özel ayarlar okunamıyorsa da bağlama yapılmaz.
- **Geri alma:** **Alan adı bağlantısını kaldır** simgesi yönlendirmeyi siler; konteyner çalışmaya devam eder ve site yapılandırması birebir eski haline döner.

## Yönetim, yedek ve sürüm yükseltme

Liste her konteyner için ad ve imajı, sağlık durumunu (**Sağlıklı**, **Sağlıksız**, **Başlatılıyor**), yerel erişim portunu ve bağlı alan adını, işlemci ve bellek kullanımını sınırına oranla gösterir. Satırdaki simgelerle **Başlat**, **Durdur**, **Yeniden başlat**, **Yedekler**, **Sürüm yükselt** ve **Sil** işlemleri yapılır. **Ayrıntılar** penceresinde **Genel**, **Kaynaklar**, **Süreçler** ve **Kayıtlar** sekmeleri bulunur; **Kayıtlar** konteynerin son 200 satırlık çıktısıdır ve panel bunları saklamaz, konteyner silinince kayıtlar da gider.

- **Sınırları değiştirme:** **Sınırları uygula ve yeniden başlat** konteyneri yeni bellek ve işlemci sınırlarıyla yeniden oluşturur. Veri birimi yerinde kalır, kesinti birkaç saniyedir. Yeni sınırlar uygulanamazsa panel konteyneri eski ayarlarıyla geri getirir.
- **Yedek:** **Şimdi yedek al** konteynerin kurulum tarifini (imaj, port, bellek, ayarlar) ve veri birimini tek arşivde toplar. Tutarlılık için konteyner yedek sırasında kısa süre durdurulur, sonra yeniden başlatılır. Arşivler sunucuda `/var/lib/deckpa/container-backups` altında durur; sunucuyu kaybetmeye karşı kopyasını **Dışa aktar** ile indirin (**Yalnız veri** ya da imaj dahil).
- **Geri yükleme:** yedeğin yanındaki **Geri yükle**, konteyneri yeniden kurar ve mevcut veriyi siler; geri alınamaz.
- **Sürüm yükseltme:** seçtiğiniz sürümün imajıyla konteyner yeniden kurulur; veri birimi, port, bellek sınırı ve alan adı bağlantısı korunur. **Yükseltmeden önce yedek al** seçeneğini açık tutmanız önerilir. Yeni imaj indirilemezse hiçbir şeye dokunulmaz; kurulum başarısız olursa panel eski sürüme kendiliğinden döner.
- **Silme:** **Sil** konteyneri ve veri birimini kalıcı olarak siler. Yedekler silinmez; yedek varsa konteyneri oradan geri kurabilirsiniz.
- **İmajlar:** **Yerel imajlar** listesinde imajları tek tek silebilir ya da **Kullanılmayanları temizle** ile hiçbir konteynerin kullanmadığı imajları kaldırabilirsiniz. Silinen imaj gerektiğinde yeniden indirilir.

Sunucuda aynı konteynerlere komut satırından da bakabilirsiniz (root olarak; `n8n` yerine kendi konteyner adınızı yazın):

```bash
podman ps
podman logs --tail 50 n8n
```

> Uygulamalar sürüm yükseltmede kendi veritabanı şemasını geri alınamaz biçimde değiştirebilir. Panel kurulum başarısız olursa eski sürüme döner, ama şema zaten değiştiyse tek dönüş yolu yedektir. Bu yüzden yükseltmeden önce yedek alın.

## Yalıtım ve sınırlar

Panel konteynerleri serbest komutla değil, kendi kurduğu sabit parametrelerle başlatır. Girdi olarak yalnızca ad, imaj, port, bellek ve ortam değişkenleri alınır ve hepsi doğrulanır. Sonuç olarak her konteyner şu kurallarla çalışır:

- **Sunucu dizini bağlanmaz.** Yalnızca adlandırılmış bir veri birimi bağlanır; sunucudaki bir klasör konteynerin içine açılmaz.
- **Ek yetki verilmez.** Ayrıcalıklı çalışma, ek yetenek ya da cihaz erişimi için panelden bir seçenek yoktur; yetki yükseltme kapalıdır.
- **Port yalnızca `127.0.0.1`.** Dışarıya açılma tek yoldan, ters proxy ile olur.
- **Bellek ve süreç sınırı.** Bellek sınırını siz belirlersiniz; süreç sayısı konteyner başına 512 ile sınırlıdır.
- **Gizli değerler komut satırında görünmez.** Parola gibi ortam değişkenleri yalnızca root'un okuyabildiği geçici bir dosyadan aktarılır; sunucudaki diğer kullanıcılar bunları süreç listesinde göremez.

Konteyner sistemi sunucuda root olarak çalışır. Bu yüzden yalıtım yukarıdaki sınırlara dayanır; güvenmediğiniz bir imajı kurmayın.
