# Hosting Sayfaları

Bu sayfalar aynı şekildedir: üst düzeyde çapraz-hesap görünümü (arama + filtre) artı hesap bazlı detay. Dosya Yöneticisi'nde ve Loglar sayfasının **Hesap Logları** görünümünde çapraz-hesap listesi yoktur: önce bir hesap seçilir — ardından Dosya Yöneticisi o hesabın ev dizinini açar, Hesap Logları domain başına erişim ve hata loglarını ve varsa PHP hata logunu gösterir (Sistem Logları ve Admin Logları görünümleri hesap istemez). Mevcut işlemler yönetici kullanıcının tüm yeteneklerine uyar:

| Sayfa | Aksiyonlar |
|---|---|
| Domainler | Subdomain / park edilmiş domain / addon domain / yönlendirme ekle; subdomain ya da yönlendirme düzenle. Özel vhost direktifleri: yalnız API (bkz. aşağıda *Özel vhost yapılandırması*) |
| Veritabanları | DB oluştur (isteğe bağlı ilk kullanıcısıyla), DB kullanıcısı oluştur, mevcut kullanıcıyı başka bir DB'ye ata, kullanıcının tek bir DB'ye erişimini kaldır (onay kutusuyla), DB kullanıcı parolasını sıfırla, uzak sunucular (kaldırma onaylıdır), yeni sekmede phpMyAdmin tek oturum açma, DB sil; sunucu geneli listeden yetim şemalar (sistem ve servis şemaları dışında hiçbir hesap önekinin sahiplenmediği her şema; silme yalnız harf, rakam, `_`, `$` ve `-` karakterlerinden oluşan adı kabul eder) |
| E-posta | Posta kutusu oluştur / sil, parola değiştir, kota ayarla (ya da sınırsız), etkinleştir / pasifleştir, yönlendirici yapılandır, webmail aç; sunucu geneli Posta Kuyruğu ve Gönderim Özeti sekmeleri. DKIM anahtarları hesabın posta DNS'iyle birlikte yönetilir (aşağıda); anti-spam ayarları Spam Filtresi sayfasındadır; otomatik yanıtlayıcı yoktur |
| FTP | FTP kullanıcısı oluştur / sil, chroot dizini ayarla (ev dizininin altında, her seviyesi hesabın sahipliğinde oluşturulur), parola değiştir, kota; sunucu geneli listeden yetim satırlar (tek tek veya toplu) |
| DNS | Zone yönet (A / AAAA / CNAME / MX / TXT / NS / SRV / CAA), eksik zone'u oluştur, DNSSEC aç / kapat (onaylı) ve kopyalanacak DS kayıtları; zone dosyası içe ya da dışa aktarma yoktur |
| SSL | Let's Encrypt sertifikası al (certbot zamanlayıcısı otomatik yeniler), özel sertifika yükle (isteğe bağlı CA paketiyle), sertifika yenile, sertifika sil |
| PHP | Domain bazlı sürüm değiştir (onay kutusuyla), hesap ve domain bazlı php.ini düzenle, worker sayısı, eklentiler ve ionCube yükleyici (sürüm geneli, onaylı), OPcache yapılandır / temizle, sunucu varsayılanları ve sürüm listesi |
| Dosya Yöneticisi | Gözat, yükle, indir, düzenle (Monaco), chmod, yeniden adlandır, arşivle (tar / zip), çıkar |
| Yedekler | Talep üzerine oluştur (dosyalar / veritabanları / posta kutuları, herhangi bir bileşimde; isteğe bağlı uzak hedefe kopya), zamanla (günlük / haftalık / aylık belirli saatte — sunucunun yerel saati; Son Çalışma ve Sonraki Çalışma sütunları damgaları izleyenin saat diliminde gösterir — haftanın günü 0 = Pazar, yalnız o zamanlamanın çalışmalarını budayan, zamanlama başına saklama sayısı), geri yükle (*Yedekler — kapsam ve ayarlar* altında sayılan parçalar — seçici geri yükleme yoktur), arşivi indir (devam ettirilebilir), sil; sunucu geneli Uzak Depolama ve Ayarlar sekmeleri |
| Cron | Cron girişlerini listele / oluştur / düzenle / sil (zamanlama alanları doğrulanır; komut hesap kullanıcısı olarak çalışır); Şimdi Çalıştır komutu `/bin/sh` ile login ortamında çalıştırır ve 85 saniye sonra durdurur (ajanın kendi sınırı 90 saniyedir); askıdaki hesabın crontab'ı askı kalkana kadar park edilir |
| Loglar | Domain başına access / error / PHP logları, satır tail (son N), indir |

Çoklu seçim yalnız Dosya Yöneticisi'nde vardır: seçilen öğeler birlikte silinir, kopyalanır, taşınır ya da arşivlenir; silme, öğe sayısını söyleyen düz bir onay ister — bir şey yazmak gerekmez. Diğer sayfalar satır satır çalışır (Veritabanları, E-posta ve FTP diyaloglarındaki onay kutuları yetkileri ve sınırsız kotayı belirler); SSL sayfasındaki **Tüm Domainleri Güvenle**, posta kuyruğunun **Kuyruğu Gönder** ve **Tümünü Sil** düğmeleri ve FTP sayfasındaki **Yetim kayıtları temizle** gibi listenin tamamına dokunan işlemler, sıradan bir onayın arkasındaki tek düğmelerdir.

**Yedekler — kapsam ve ayarlar.** Bir yedek hesabın ev dizini dosyalarını (setuid ve setgid bitleri korunmaz: böyle bir bit taşıyan dosya ya da klasör yedeğe bit olmadan girer; hesabın `tmp` klasöründeki PHP oturum dosyaları yedeğe alınmaz), veritabanı başına bir SQL dökümünü ve posta kutularını (adresler, parola özetleri, kotalar ve postanın kendisi) içerir. Geri yükleme `public_html`, `tmp`, `ssl`, `mail` dizinlerini ve hesabın `public_html` dışındaki ek alan adı ve alt alan adı klasörlerini yerine koyar (geri yükleme anında hesapta olan siteler; log dosyaları, hesabın `backups` klasörü ve gizli dosyalar geri yüklenmez), her veritabanını düşürüp dökümünden yeniden oluşturur (kullanıcıları sahip oldukları yetkileri aynen korur; hiçbir kullanıcının yetkisi olmayan veritabanında hesabın kullanıcılarına tüm yetkiler verilir) ve posta kutularını postalarıyla yeniden kurar; arşivi diskten silinmiş bir yedek böyle bildirilir (`410`) ve yalnız silinebilir. Geri yüklenen klasörler dizin tanıtıcıları üzerinden hesabın kullanıcısı olarak yazılır: hesabın bu adlardan birine koyduğu bağ kaldırılıp yerine düz klasör konur; geri yükleme sürerken bağa dönen bir ad üzerinden yazılmaz, geri yükleme başarısız olur (`500`, "Failed to restore …"). Her döküm hesabın kendi içe aktarma kullanıcısıyla içe aktarılır (`whost_imp_<hesap>`: girişe kapalı, yalnız hesabın geri yüklenen veritabanlarında yetkili bir veritabanı kullanıcısı; hesabın kullanıcıları arasında listelenmez, hesapla birlikte silinir): dökümde başka bir veritabanını adlandıran ifade başarısız olur ve geri yükleme bunu bildirir (`500`, "Database restore failed for … ERROR 1142 … denied to user 'whost_imp_<hesap>'@'localhost' …"; o ifadeden önce adı geçen veritabanları yeniden oluşturulmuştur, geri yükleme kısmi kalır); dökümün taşıdığı görünümler, tetikleyiciler, yordamlar ve olaylar o kullanıcı altında yeniden oluşturulur, yani hesabın yetkileriyle çalışır. Ayarlar sekmesi yedekleme sistemini açıp kapatır (kapalıyken oluşturma, geri yükleme ve zamanlama `403 BACKUP_DISABLED` ile reddedilir, panel işlemleri kilitler), her yedeği budayan saklama süresini belirler ve hesap başına zamanlama sayısını sınırlar (sınıra ulaşılınca `403 BACKUP_SCHEDULE_LIMIT` — panel nedeni gösterir). Başarısız bir uzak kopya yerel arşivi olduğu gibi bırakır; satırın rozeti nedeni söyler — agent yükleme sırasında durduğu için bitiremediği kopyada da ("The remote copy did not finish: the agent stopped during the upload."). Zamanlanmış yedek, tekrarlanmayabilecek bir hatada (kopan, reddedilen ya da zaman aşımına uğrayan bağlantı, kesilen TLS oturumu, sağlayıcıdan `5xx` / `408` / `429` yanıtı) kopyayı en çok üç kez dener (önce 15, sonra 45 saniye arayla), tekrarlanacak bir hatada (kimlik bilgisi, yetki, kota, değişen sunucu kimliği) hemen durur; **Remote Backup Copy Failed** bildirimi yalnız son denemeden sonra gider. Elle başlatılan yedek bir kez dener. Bir WHost güncellemesi kurulurken yedek oluşturma ve geri yükleme `409 UPDATE_IN_PROGRESS` ile reddedilir (güncelleme, onu kesecek bir agent yeniden başlatmasıyla biter); vakti gelen zamanlanmış yedek güncellemeden hemen sonra koşar; yarıda kalan yedeklerin bıraktığı çalışma klasörleri agent açıldıktan sonra arka planda silinir. Yedek, onu başlatan isteğin içinde koşar; büyük bir hesapta istek dakikalarca açık kalabilir. Hiç yanıt gelmediğinde (geçit zaman aşımı, kopan bağlantı) panel bunu başarısızlık diye bildirmez: yedeğin arka planda sürüyor olabileceğini söyler ve listeyi yenileyip bildirimlere bakmanızı ister — yeniden başlatmak ikinci bir kopya oluşturur. Geri yükleme de aynı biçimde yanıtlar: hiçbir şey dönmediğinde panel bunu başarısızlık diye bildirmez, işin sürüyor olabileceğini söyler. Ajanın adını koyduğu bir ret (kapalı sistem, sınırlayıcı) kendi mesajını korur. Uzun adımlar hesabın büyüklüğü ne olursa olsun iş yaptıkça sürer: ev dizininin kopyası, her veritabanı dökümü, her posta kutusu kopyası (geri yüklemede de), arşiv ve çalışma klasörünün silinmesi. 10 dakika boyunca hiç okuma, yazma ve işlem yapmayan adım durdurulur ve yedek o adımı adlandırarak başarısız olur ("Command did no work for 600s: …"). Hiçbir adım 6 saatten uzun sürmez.

**Uzak yedek kimlik bilgileri.** Bir hedefin kimlik bilgileri diskte şifrelenir ve şifrelenen her alan API'de ve panelde maskelenmiş döner — parolalar, API anahtarları, OAuth istemci sırları ve yenileme jetonları; liste yanıtlarında da kaydetme yanıtlarında da. İstisna, yönetici API'sinin Google Drive için hâlâ kabul ettiği servis hesabı JSON'udur (`credentials_json`; panel bu alanı sunmaz): düz metin olarak `/etc/whost/credentials/gdrive-<id>.json` dosyasına yazılır (root, `0600`), hedef yalnız bu yolu tutar (`credentials_file`, olduğu gibi döner) ve hedef silinince dosya da silinir. Bir hesabın kendi hedefi böyle bir dosyayı adlandıramaz: müşteri uçları `credentials_file` alanına `422` döner. Hedefi düzenlerken maskeli bir alana dokunmamak saklanan değeri korur; üzerine yazmak değeri değiştirir. FTP sağlayıcısı önce TLS dener, sunucuda TLS yoksa düz FTP'ye düşer — yalnız TLS ile hiç oturum açmamış bir hedefte: açmış olan hedefte TLS'i reddeden sunucu parola gönderilmeden reddedilir (sunucu TLS'i gerçekten kaldırdıysa hedefi silip yeniden ekleyin); SFTP aynı zaman aşımıyla çalışır. Ajan, parola gönderilmeden önce sunucuyu denetler. FTP sunucusunun TLS sertifikası, hedefin sunucu adı için sistem CA deposuna göre doğrulanmalıdır; kendinden imzalı ya da başka bir ad için verilmiş bir sertifika (sertifikası kendi sunucu adını taşıyan paylaşımlı barındırma sunucusu gibi) hangisi olduğunu söyleyen bir iletiyle reddedilir — sunucu adı olarak sertifikadaki adı kullanın ya da o hedef için **Doğrulanamayan sertifikayı kabul et** anahtarını açın. Anahtar açıkken ilk başarılı bağlantının sertifikası hatırlanır (SHA-256 özeti düzenleme formunda görünür) ve farklı bir sertifika, denetim ya da veri bağlantısında, reddedilir. SFTP hedefi sunucunun ana makine anahtarını ilk başarılı bağlantıda (kaydetmeden önceki test, kayıtlı test ya da ilk kopya) hatırlar ve farklı bir anahtarı parola gönderilmeden reddeder; düzenleme formu anahtarı `ssh-keygen -l` çıktısındaki biçimde gösterir. Sunucunun anahtarı ya da sertifikası bilerek değiştirildiyse düzenleme formunda **Kaydederken unut** kutusunu işaretleyin; yeni bir sunucu adı ya da port kendiliğinden baştan başlar. Özel, loopback ya da metadata adresindeki bir hedef reddedilir (`422`; reddedilen aralıklar geliştirici webhook kılavuzunda listelidir). Her FTP / SFTP bağlantısı bu denetimin onayladığı adreslere açılır; denetim ile bağlantı arasında ana makine adı yeniden çözülmez. *Doğrulandı* rozetini yalnız sunucunun kendi bağlantı testi verir (kaydetmeden önce Doğrula, ardından 15 dakika içinde kaydet; değişen bir kimlik bilgisi rozeti düşürür). Kapalı bir hedef kopya hedefi olarak reddedilir: onu adlandıran elle yedek reddedilir (`409`), zamanlanmış yedek yerel arşivini tutar ve kopyanın neden yapılmadığını kaydeder. Bir zamanlamanın hâlâ adlandırdığı hedef silinemez (`409`, yanıt zamanlamaları listeler). Google Drive / Yandex Disk / OneDrive oturum açma state'ini sunucu üretir ve yalnız bir kez, ürettiği yüzeyde kabul eder.

**Veritabanı erişim sınırları.** Hesap veritabanı kullanıcıları yalnız kendi şemalarında yetkilidir ve hiçbir global yetki taşımaz; API `FILE` yetkisini reddeder. Doğrudan oluşturulan kullanıcı `localhost`'a ya da tek bir IPv4 adresine bağlanır; joker host (`%` ya da `10.0.0.%` gibi bir desen) yalnız uzak veritabanı erişimiyle (aşağıda) eklenir. MariaDB'nin `secure_file_priv` değeri WHost tuning drop-in'ine yazılır ve sunucu tarafı dosya okuma/yazmasını tek bir dizine kısıtlar (sonraki MariaDB yeniden başlatmasında geçerli olur). Uzak veritabanı erişimi, hesabın yerel kullanıcılarını verilen host'a kopyalar; ancak MariaDB varsayılan olarak yalnız loopback dinler: siz bilinçli olarak ağa açana kadar panel, uzak host'u bağlanamayacağı uyarısıyla birlikte döndürür.

**E-posta.** Posta kutusu adresi, istek hangi yazımla gelirse gelsin küçük harfle saklanır. Var olmayan posta kutusu, yönlendirici ya da kuyruk iletisi `404` (`EMAIL_NOT_FOUND`, `EMAIL_FORWARDER_NOT_FOUND`, `MAIL_QUEUE_MESSAGE_NOT_FOUND`), paketin posta kutusu sınırı `403 EMAIL_LIMIT`, aynı hedefe ikinci yönlendirici `409 EMAIL_FORWARDER_EXISTS` ile yanıtlanır; aynı hesap için aynı anda gelen iki oluşturma isteği art arda işlenir. "Sınırsız depolama" kota 0 olarak saklanır (yalnız yönetici penceresinde: müşteri kutu kotasını 1 MB ile paketin diski arasında seçebilir ve hesabın kutu kotaları toplamı o diski aşamaz — aralık için `422 VALIDATION_ERROR`, toplam için ayrılan / kalan değerlerle `403 EMAIL_LIMIT`; müşterinin olduğu gibi bıraktığı kota ölçülmez). Hiçbir şeyi değiştirmeyen kayıt denetim satırı yazmaz ve servis yeniden yüklemez; bir posta kutusunu pasifleştirmek ya da parolasını değiştirmek açık IMAP/POP3 oturumlarını kapatır, webmail düğmesi pasif kutuyu reddeder (`409 EMAIL_INACTIVE`). Posta kutusu silinince yönlendiricileri de silinir; bir domainin son kutusu silinince domain satırı ve o domainin kalan alias'ları da gider; addon ya da park edilmiş domain kaldırılınca üzerindeki kutular ve yönlendiriciler kaldırılır; hesap sonlandırılınca hepsi silinir. Bunların her biri adresin webmail kaydını da (Roundcube kullanıcısı; kimlikleri, adres defteri, toplanan adresler ve ayarlarıyla) siler; aynı adresle sonradan — başka bir hesapta da — açılan kutu boş başlar. Hesap askıya alınınca kutuları ve yönlendiricileri kapatılır (IMAP/POP3 girişi, SMTP gönderimi ve gelen teslim durur), askıdan çıkarılınca yalnız açık olan satırlar geri açılır. Webmail düğmesi tek kullanımlık bir token üretir; Roundcube oturumu okuma ve gönderme için Dovecot master kullanıcısıyla çalışır; sistem kapsamlı üretim (`POST /system/webmail/sso`) denetim satırı yazar, var olmayan ya da pasif kutuyu reddeder; `/webmail`'i nginx sunduğunda (nginx ve nginx + Apache sunucuları) bu konum Roundcube'un şema, betik, kurulum ve yapılandırma dosyalarını sunmaz; salt Apache sunucusunda ise yalnız Roundcube'un `config`, `temp` ve `logs` klasörlerini reddeder (kurulum klasörü kurulum sırasında diskten silinir). Webmail'de Filtreler ekranı yoktur: posta yığınında ManageSieve sunucusu bulunmadığından kurucu Roundcube'un `managesieve` eklentisini eklemez, ajan da böyle bir sunucu olmayan sunucuda açılışta eklentiyi kapatır (sunucuyu çalıştıran bir sunucuda eklenti kalır). Kuyruğun Tümünü Sil düğmesi zorunlu `confirm=ALL` parametresini gönderir; posta işlemlerinde sınırlayıcı yanıtı olduğu gibi ret olarak gösterilir; okuması başarısız olan liste boş durum yerine Yeniden Dene düğmeli hata görünümü gösterir. Gönderim Özeti yalnız barındırılan domainlerin göndericilerini listeler, iletiyi alıcı sayısından bağımsız bir kez sayar, "(system)" satırından bounce göndericisinin kayıtlarını açar ve log damgalarını gerçek saat dilimiyle gösterir. Posta kutusu parolası HMAC API anahtarıyla değiştirilebilir (entegrasyonlar kutuları yönetir); hosting hesabının kendi parolası değiştirilemez. Kutu kotası Dovecot tarafından uygulanır: IMAP kotayı raporlar, sınırın üzerindeki teslim reddedilir (kota 0 = sınırsız). Yönlendirici kutusuna bağlıdır: kutu pasifken yönlendirici kapalıdır ve yönlendirici dialogu kaynak olarak hesabın mevcut kutularını sunar (kutusu olmayan kaynak `404` ile reddedilir). Kutu ya da yönlendirici değişikliği hiçbir servisi yeniden yüklemez — map'ler canlı veritabanı sorgularıdır. Loopback'ten SMTP kimliği olmadan gönderilen ve barındırılan bir domainin adresini taşıyan posta saatlik sınır politikası tarafından reddedilir (`554 5.7.1`): web uygulamaları bir kutuyla kimlik doğrular ya da etkilenmeyen `sendmail` yolunu (PHP `mail()`) kullanır. Webmail gönderimi kutunun master girişiyle kimlik doğrular ve o kutunun hesabının hakkını harcar. **Kutu başına spam listeleri** (müşteri paneli E-posta → Spam Filtresi; yönetici için `GET/PUT/DELETE /accounts/{username}/spam/{email}`) bir Rspamd kuralıyla (`lua.local.d/whost_per_user.lua`) uygulanır; kural, ajanın her kayıtta ayar dosyalarından yeniden ürettiği, alıcıya göre anahtarlanmış üç haritayı okur: öğeler gönderici adresi ya da alan adıdır (alan adı alt alan adlarını da kapsar), küçük harfe çevrilir, liste başına en çok 100 öğe alınır (aksi hâlde `422 VALIDATION_ERROR`); alıcının kara listesi iletiyi teslimde reddeder (sunucu geneli beyaz listenin önüne geçer), beyaz listesi ya da kapalı filtresi iletiyi puanlamadan kabul eder — sunucu geneli kara liste göndericiyi adlandırmıyorsa; birden fazla kutuya giden ileti listeleri yalnız tüm alıcıların listeleri aynı sonucu veriyorsa izler; kayıt, Rspamd yeniden yüklenmediyse bunu bildirir; bu kural yokken liste saklamış bir sunucu kuralı ve haritaları ajanın bir sonraki açılışında alır; silinen kutu ayarlarını da götürür. Sunucu geneli beyaz ve kara liste (Spam Filtresi sayfası) öğelerini nasıl yazılırsa yazılsın küçük harfle saklar; bir öğeyi silmek büyük/küçük harf ayrımı yapmaz.

**Giden posta sınırları ve DKIM.** Paketin saatlik e-posta sınırı, agent'ın kurup çalışır tuttuğu bir Postfix politika daemon'ı tarafından uygulanır; kontrol hem 25 portunda hem submission/smtps portlarında alıcı kısıt listesinin başındadır, böylece kimlik doğrulamış gönderimler ve webmail gönderimleri sayılır; daemon düşerse posta akmaya devam eder (`default_action=DUNNO`). Kimlik doğrulamış gönderim, zarf göndericisi ne derse desin kimliği doğrulanan kutunun hesabına sayılır; ileti alıcı sayısından bağımsız bir kez sayılır; dışarıdan gelen posta sayılmaz. Hak hesabın tamamına aittir; sahip olduğu tüm posta kutuları, domainler ve subdomainler paylaşır, sınır aşıldığında mesaj reddedilmez ertelenir; bir saatte ertelenen ilk ileti, agent'ın bir sonraki kontrolünde (15 dakikada bir) yöneticinin *Email Limit Exceeded* bildirimini doğurur, hesap başına günde en fazla bir kez. Daemon Servisler sayfasında *WHost Mail Policy* adıyla listelenir. Bir domain için üretilen DKIM anahtarı üretim anında OpenDKIM'e kaydedilir; host'un hâlâ servis ettiği domainlerin mevcut anahtarları da agent açılışında kaydedilir, böylece yayınlanan DKIM kaydı giden postadaki imzayla gerçekten eşleşir. Hesabın posta DNS'i açılınca domainin DKIM anahtarı üretilir ve kaydı posta kümesinin geri kalanıyla yayınlanır; kapatılınca ikisi de kaldırılır. Tek imzalayıcı OpenDKIM'dir: Rspamd'nin kendi DKIM/ARC imzalaması kapalıdır.

**Alan adı uygunluğu.** Bir hostname, herhangi bir hesap onu servis eder etmez kullanımdadır — birincil, addon, park edilmiş ya da subdomain adı olarak — ve hesap oluşturma, addon ve park edilmiş domain uçlarının üçü de onu reddeder; park edilmiş bir takma ad, aynı hesabın zaten servis ettiği bir adı da alamaz. Sunucunun kendi hostname'i (ve `localhost`) rezervedir: panelin kendisinin yanıt verdiği adı hiçbir hesap alamaz. Domain başına doküman kökü her web sunucusunda uygulanır, yani addon ya da subdomain hesabın birincil doküman kökü yerine kendi dizinini servis eder; dizin addon ile birlikte (yer tutucu sayfayla) oluşturulur ve addon silinince korunur. Dizin hesabın ev dizini içinde çözülmelidir: ev dizininin dışına giden bir bağ olan klasör adı `422 VALIDATION_ERROR` ile reddedilir (ev içinde kalan bir bağ — örneğin `www` → `public_html` — çalışmaya devam eder) ve agent'ın yol üzerinde oluşturduğu seviyeler hesaba aittir.

**Addon domainler, subdomainler ve yönlendirmeler.** Addon domain eklemek dizinini, vhost'unu (hesabın PHP sürümüyle) ve (kapatılmadıysa) DNS zone'unu oluşturur; park edilmiş domain işaret ettiği domainin PHP sürümüyle çalışır; silmek, subdomain'lerinin vhost'larını, ona işaret eden park edilmiş domainlerin vhost ve zone'larını ve sertifika dosyalarını da kaldırır. Hesabın henüz kullanmadığı bir PHP sürümünü çalıştıran subdomain o sürümün havuzunu alır. Bir yönlendirme kuralı, aynı domainin başka bir kuralının kullandığı kaynağa taşınamaz; hiçbir şeyi değiştirmeyen bir kayıt ne yeniden üretilir ne de günlüğe yazılır. Subdomain silmek vhost'unu ve DNS kaydını kaldırır, hesap ev dizininin doğrudan altındaki kendi klasörünü `<klasör>-removed-<zaman damgası>` olarak yeniden adlandırır (hiçbir şey silinmez; başka bir sitenin ağacındaki ya da başka bir domainin de servis ettiği klasör olduğu gibi bırakılır). Ad yeniden eklendiğinde özgün adıyla hâlâ duran bir dizin olduğu gibi kullanılır (dosyaları hesabın kalır). Addon dialogunda Otomatik SSL varsayılan olarak kapalıdır — yalnız bu sunucuya zaten çözümlenen bir ad için açın; başarısız bir Let's Encrypt siparişi de kotadan düşer — ve uluslararası alan adları Punycode (`xn--…`) biçiminde girilir; aksanlı ya da Latin dışı harf yazıldığında dialog bunu söyler. Subdomain düzenlemesi yalnız değişen alanları gönderir; "Hesaptan miras al" hesabın kendi PHP sürümünü uygular. Domainler, DNS ve SSL sayfalarında okuması reddedilen bir liste (sınırlayıcı yanıtı dahil) boş liste yerine Yeniden Dene düğmeli başarısız okuma görünümü gösterir; Tümünü Güvenceye Al hesap listesi gelmeden karar vermez.

**Özel vhost yapılandırması.** Panelde bunun için bir denetim yoktur: özel direktifler `GET` / `PUT` / `DELETE /accounts/{username}/domains/{domain}/vhost-config` ile okunur, kaydedilir ve silinir; yalnız hesabın birincil domaini için — başka bir domain `404 DOMAIN_NOT_FOUND` alır. Özel direktiflerin kaydı domaini kayıtlı durumundan yeniden üretir; yönlendirmeleri, domain bazlı PHP sürümü ve SSL dinleyicisi kayıttan sağ çıkar. Web sunucusunun reddettiği bir yapılandırma, hata dönmeden önce geri alınır: önceki vhost dosyası geri yüklenir, böylece bir hesabın hatalı snippet'i host'u diğer tüm hesapların domain işlemlerinin config testinde düştüğü bir duruma sokamaz. Host'taki sağlayıcı olmayan bir web sunucusuna ait alan (örneğin nginx host'unda `apache_config`) sessizce atılmak yerine `422 VALIDATION_ERROR` ile reddedilir; kayıt ve silme denetim günlüğüne yazılır (`vhost_config_updated` / `vhost_config_deleted`).

**Veritabanları.** Bir veritabanı kullanıcısı dialogda listelenen ayrıcalıklarla oluşturulur; hiç ayrıcalık içermeyen istek tümüne genişletilmek yerine reddedilir (`422`). Collation seçilen karakter setine ait olmalıdır. Yönet dialogunda kullanıcının yanındaki X yalnız bu veritabanına erişimi kaldırır (kullanıcı diğer veritabanlarını korur, hiçbiri kalmayınca düşürülür); onay kutusu bunu söyler. Uzak sunucu birebir eşlenir: `10.0.0.5` varken `10.0.0.%` eklenebilir, hiç eklenmemiş bir desenin kaldırılması reddedilir; kaldırma onay ister. Oluşturma dialogu harfle başlamayan ad/kullanıcı adını ve sekiz karakterden kısa parolayı istek gönderilmeden reddeder; veritabanı oluşturulup kullanıcı adımı reddedildiğinde sonuç paneli bunu söyler ve veritabanı korunur. Sunucu geneli listeden sahipli ya da yetim bir şemanın silinmesi, grant'siz kalan kullanıcıları da düşürür; yetim şema adının büyük/küçük harfine bakılmaksızın silinir. phpMyAdmin düğmesi şemaya değil MariaDB root girişine bağlı tek kullanımlık bir token üretir — şema yalnız phpMyAdmin'in hangi şemada açılacağını belirler (var olmayan şema için token üretilmez) — ve girişi yeni sekmede açar. Sistem kapsamlı token (`POST /system/phpmyadmin/sso`) yalnız panelin kendi MariaDB sunucusu için üretilir (`localhost`, `127.0.0.1`, `::1` ya da yapılandırılmış `mysql.host`); başka bir sunucu `422` döner. `/sso/*` altındaki signon uçlarının kendi hız sınırı yoktur: yalnız loopback'te SSO pin'iyle yanıt verirler, token tek kullanımlıktır ve beş dakika yaşar. `roundcubemail` ve `phpmyadmin` şemaları yönetici phpMyAdmin oturumundan gizlenmez; bu oturum root olarak çalışır ve her kiracı şemasını görür, kiracının oturumu ise kendi veritabanı kullanıcısına bağlıdır. Okuması başarısız olan liste "Veritabanı bulunamadı" yerine Yeniden Dene düğmeli hata görünümü gösterir.

**FTP.** FTP hesabının dizini tek yazımla saklanır (`/public_html/site`; asla `/public_html/./site/`) ve agent'ın ev dizininin altında oluşturduğu her seviye hesabın sahipliğindedir; böylece chroot oturumu içeri girebilir. Sahip sütunu boş satır, önekinin adlandırdığı hesaba aittir; tekli ve toplu temizlikte yalnız hesabı artık var olmayan satırlar yetim sayılır. Düzenleme diyaloğu yalnız değişen alanları gönderir, dokunulmamış formu istek göndermeden kapatır; sunucu da karşılaştırır: hiçbir alan ya da yalnız saklı değerleri taşıyan istek satırı olduğu gibi bırakır ve denetim satırı yazmaz, tek başına yeni parola parola değişimi (`ftp_password_changed`) olarak kaydedilir, güncelleme satırı yalnız değişen alanları adlandırır. Oluşturma, düzenleme, parola değişimi ve silmede sınırlayıcı yanıtı (`429`) olduğu gibi ret olarak gösterilir — kimlik kartı ve başarı bildirimi yoktur. Daemon SHA-512 crypt hash'lerini karşılaştırır (`MYSQLCrypt crypt`), TLS zorunludur (`TLS 2`; şifresiz giriş `421` ile yanıtlanır) ve anonim girişi reddeder; hash varsayılanından önce kurulmuş bir sunucunun Pure-FTPd yapılandırması `MYSQLCrypt crypt` taşımıyorsa panelin oluşturduğu her FTP hesabı girişte reddedilir. AlmaLinux, Rocky Linux ve CentOS Stream'de bu değerler `/etc/pure-ftpd/pure-ftpd.conf` içindedir (`TLS 2`, `CertFile /etc/pki/pure-ftpd/pure-ftpd.pem`, `NoAnonymous yes`); daha eski bir kurucuyla kurulmuş RHEL ailesi sunucuda bu üç satır yazılıp `pure-ftpd` yeniden başlatılana kadar TLS kapalı, anonim giriş açıktır. Oluşturma dialogu dizin olarak seçilen domainin belge kökünü önerir (birincil domain için `public_html`); FTP kullanıcısı o dizine hapsedilir, elle yazılan dizin korunur. Hesapla birlikte oluşturulan hesabın kendi FTP kullanıcısı `scope: default` ile bir `ftp_account_created` denetim satırı olarak kaydedilir ve diğerleri gibi webhook köprüsüne ulaşır. Aynı hesap için aynı anda gelen iki oluşturma isteği art arda işlenir; böylece planın FTP sınırı korunur. FTP hesabı oluşturmak, veritabanı, e-posta hesabı ya da DNS zone oluşturmak gibi etkin lisans gerektirir.

**PHP.** Hesabın php.ini değerleri (yükleme ve post boyutu, bellek sınırı, çalışma ve girdi süresi, `max_input_vars`, `display_errors`, `error_reporting`) hesap kaydında tutulur ve hesabın her havuzuna bu tek yerden yazılır: sürüm, worker sayısı ya da plan değişimi bunları birlikte taşır; yeni havuz sunucu varsayılanlarından (Ayarlar › PHP) başlar, ayarlanmamış bellek sınırı yerine planın bellek tavanı geçer. Domain bazlı yapılandırma yalnız hesabınkinden farklı değerleri domainin `.user.ini` dosyasına yazar; böylece hesap düzeyi değişiklik domaine ulaşmaya devam eder; hesap değerlerine eşit bir kayıt hiçbir şey yazmaz ve Sıfırla (onay kutusuyla) dosyayı kaldırır. Satır seçicisinden domain sürümünü değiştirmek önce sorar; hesabın sürüm değişimi (hesap sayfasında da burada da) domain override'larının hâlâ kullandığı havuzları korur, her vhost'u — işaret ettikleri domaini izleyen park edilmiş adlar dahil — yeniden yazar ve hiçbir domainin kullanmadığı havuzları kaldırır — kendi sürümüyle silinen subdomain ya da addon havuzunu da götürür. Hesabınkine eşit bir domain sürümü miras olarak saklanır; hesabın kendisi bir domainin override sürümüne geçince o override mirasa katlanır ve sonraki hesap değişimi domaini de taşır. `upload_max_filesize` ve `post_max_size` "sınırsız" (`-1`) kabul etmez; `memory_limit` eder. ionCube yükleyici PHP sürümü başınadır ve o sürümdeki her hesapça paylaşılır: gösterilen durum sürümün çalıştırdığıdır; başka bir hesabın hâlâ ihtiyaç duyduğu kapatma yükleyiciyi yerinde bırakır. Eklenti anahtarları ve OPcache temizleme o sürümdeki her hesap için PHP-FPM'i yeniden başlatır ve önce sorar; OPcache dialogu yalnız bir değer değiştiğinde kaydeder. Paketleri sunucuda olmayan sürüm "Bu sunucuda kurulu değil" ile kilitli anahtar gösterir. Hesabın sahip olmadığı bir domain için sürüm isteği `404 DOMAIN_NOT_FOUND` döner; genel görünüm, varsayılanlar ve OPcache okumaları başarısız olduğunda Yeniden Dene düğmeli hata görünümü gösterilir. Sürüm ya da worker sayısı değişiminden sonra bir vhost yeniden yazılamazsa (web sunucusu yapılandırma testi düşerse) değişiklik korunur ve yanıt domaini adlandıran bir `warnings` kaydı taşır; web sunucusu yapılandırması onarılana kadar site önceki yapılandırmasıyla çalışmaya devam eder. OPcache `save_comments` değeri her kayıtta `1` yazılır. Sürüm listesinde bir sürümü kapatmak yalnız hesaplara sunulmasını durdurur: FPM servisi onu hâlâ kullanan havuzlar için çalışmaya devam eder. PHP her hesabın oturumlarını hesabın `tmp` klasörüne yazar. Ajan 30 dakikada bir buradaki oturum dosyalarından (`sess_*`) bir gündür yazılmamış olanları siler; sunucudaki bir php.ini daha uzun bir `session.gc_maxlifetime` belirliyorsa o süre geçerlidir. Ajan günlüğü her hesap için kaç dosya silindiğini yazar. Ubuntu ve Debian'da ne PHP (`session.gc_probability = 0`) ne de dağıtımın `phpsessionclean` zamanlayıcısı bu klasörleri temizler; bu yüzden önceki sürümlerde bir sitenin açtığı her oturum diskte kalıyordu.

**DNS zone'ları.** Panelin oluşturduğu zone (hesap oluşturma, addon ya da park edilmiş domain, "DNS Zone Oluştur" çağrısı) yapılandırılmış birincil ad sunucusunu (Ayarlar › Genel) ve `hostmaster.<zone>` adresini taşıyan bir SOA ile yapılandırılmış küme için NS kayıtları taşır; Ayarlar'da ad sunucularını değiştirmek mevcut her zone'un NS kayıtlarını ve SOA birincilini yeniden yazar. Kayıt hedefleri (MX, CNAME, NS, PTR, SRV) sondaki noktayla ya da noktasız kabul edilir ve noktasız gösterilir. DNSSEC DS kayıtları yalnız SHA-256 ve SHA-384 özetleriyle listelenir; hiçbir şeyi değiştirmeyen bir kayıt denetim satırı yazmaz. "DNS Zone Oluştur" çağrısıyla oluşturulan zone, hesapla birlikte oluşturulan zone gibi DNSSEC ile imzalanır (imzalama başarısız olursa uyarı olarak bildirilir ve zone kullanılabilir kalır). Posta kayıtları (MX, `mail` A, SPF, DMARC ve DKIM anahtarı) hesabın *posta DNS'i kur* anahtarını izleyen tek bir kümedir: anahtar kapalıyken açılan bir zone — hesap oluşturmada, addon ya da park edilmiş domain için ya da çağrıdan — yalnız A kayıtlarını taşır; anahtar daha sonra kümenin tamamını birincil zone'a ekler ya da kaldırır. Mevcut bir zone'da çağrı, eksik SOA'yı ya da apex NS kümesini de geri koyar (SOA'sı olmayan zone her ad için REFUSED yanıtlanır); SOA ve zone'un son NS kaydı korunur — SOA düzenlenemez ve silinemez, son NS bir başkası eklenene kadar silinemez (`409 DNS_RECORD_PROTECTED`).

**Sertifikalar.** Let's Encrypt siparişi HTTP üzerinden panelin kendi doğrulama klasöründen (`/var/www/letsencrypt/.well-known/acme-challenge`) doğrulanır — her sitenin yapılandırması (nginx, Apache ve OpenLiteSpeed) `/.well-known/acme-challenge/` yolunu bu klasörden sunar, hesabın site klasörlerine hiçbir şey yazılmaz —, domain adıyla adlandırılır (`--cert-name`) ve vhost'un baktığı sertifika dosyalarını yenileyip web sunucusunu yeniden yükleyen bir yenileme kancası kurar; böylece zamanlayıcının yenilemeleri siteye ulaşır. Bir güncelleme site şablonlarını değiştirdiğinde, ondan sonraki ilk açılışta agent barındırılan her adın site yapılandırmasını güncel şablonlardan bir kez yeniden üretir (önce eski dosyalar `/var/lib/whost/vhost-rerender-<zaman damgası>/` altına kopyalanır; üretimi reddedilen ad eski dosyalarını korur ve bir sonraki açılışta yeniden denenir); çok siteli sunucuda bu ilk açılış daha uzun sürer. Let's Encrypt sertifikasını silmek soyunu certbot'tan da kaldırır. Özel sertifika süresi dolmuşsa ya da henüz geçerli değilse ve CA paketi ayrıştırılamıyorsa reddedilir; servis edilen dosya zinciri taşır. Sertifika dosyaları `/home/<kullanıcı>/ssl` altındadır ve dizin root'a aittir; hesap, web sunucusu yapılandırmasının bağlı olduğu bir dosyayı silemez. Bu klasör düz bir klasör olmalıdır — bağ ise sertifika kurulumu `422 VALIDATION_ERROR` döner — ve her dosya yeni bir dosya olarak yazılır (anahtar `0600`, sertifika ve zincir `0640`); oraya önceden bırakılmış bir girdinin içine yazılmaz, yerine konur. HTTPS vhost'u domainin kendi doküman kökünü ve yönlendirme kurallarını korur; sertifika kaldırılınca HTTP vhost'u onlarla geri gelir. Süresi henüz dolmamış bir sertifika için zorlanan sipariş mevcut sertifikayı korur: yanıt sertifikanın güncel olduğunu söyler, bir uyarı taşır ve yenileme kaydı yazılmaz; `force_renew` hemen yeniler. Agent her 15 dakikada barındırılan her adın servis ettiği sertifikayı okur ve 14, 7, 3 ve 1 gün kaldığında yöneticiyi ve hesap sahibini uyarır (*SSL Expiry Warning*) — o sertifika için her adımda bir kez; yenilenen ya da değiştirilen sertifika baştan başlar, süresi zaten dolmuş sertifika bildirilmez.

**Kullanılan endpoint'ler:** `/accounts/{u}/{resource}/...` ailesi — her biri için API referansına bakın.

---
