# Hosting Sayfaları

Aşağıdaki her sidebar bölümü yalnızca kendi hesabınızla sınırlıdır — diğer tenant'ları göremez veya etkileyemezsiniz.

Hosting yöneticiniz bir özelliği müşteri hesapları için kapatabilir (sunucu yapılandırmasındaki `client_features`). Kapalı bir özellik sidebar'da ve panodaki kutucuklar arasında listelenmez; sayfa adresi yazılarak açılırsa rotaları `409 FEATURE_DISABLED` döndürür.

### Domains

Subdomain (`blog.example.com`), park edilmiş domain (aynı dosyaları gösteren mevcut bir domain'in takma adı) veya addon domain (ayrı bir klasörü servis eden bağımsız domain) ekleyin.

- **Subdomain limiti:** paket tanımlı, tipik olarak ~50'ye kadar
- **Birincil domain doküman kökü:** `/home/{user}/public_html/`
- **Addon domain doküman kökü:** varsayılan olarak `/home/{user}/{addon}/` (örneğin `/home/{user}/shop.example.com/`); ekleme diyaloğundaki **Özel belge kökü** seçeneği ev dizininizin içinde başka bir klasör seçer (ev dizininizin dışındaki bir klasöre giden bağ olan bir ad reddedilir)
- **Subdomain silme:** DNS kaydı ve vhost kaldırılır; subdomain'in ev dizininizin doğrudan altındaki kendi klasörü silinmek yerine `<klasör>-removed-<zaman damgası>` olarak yeniden adlandırılır (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). Dosyalarına artık ihtiyacınız kalmadığında yeniden adlandırılan klasörü dosya yöneticisinden kaldırın.
- **Park edilmiş vs Addon:** park edilmiş domain sadece bir takma addır — birincil ile aynı dosyaları servis eder. Addon domain'in kendi ayrı klasörü vardır ve tamamen ayrı bir site gibi davranır. Yeni addon domain hesabınızın PHP sürümüyle çalışır; park edilmiş domain işaret ettiği domainin sürümüyle çalışır.

**DNS:** panel bir domain'i, DNS'inin nereyi gösterdiğine bakmadan ekler. Site ziyaretçilere ancak domain'in A kaydı sunucunun IP adresini (dashboard'daki **Sunucu IP**) gösterdiğinde yanıt verir; Let's Encrypt sertifikası da ancak o zaman çıkarılabilir.

**Zaten kullanımda olan adlar:** sunucudaki başka bir hesabın hâlihazırda servis ettiği bir alan adı `DOMAIN_EXISTS` ile reddedilir — o hesap onu birincil, addon, park edilmiş ya da **subdomain** adı olarak tutuyor olabilir. Ret mesajı adın başka bir hesapta kullanımda olduğunu söyler ama o hesabı adlandırmaz; hangi hesabın tuttuğunu yalnız operatör görür. Sunucunun kendi hostname'i rezervedir ve hiçbir hesaba eklenemez.

**Yönlendirme hedefleri:** hedef mutlak bir `http://` veya `https://` adresi olmalıdır. Web sunucusunun rewrite dilbilgisinin işaret olarak okuduğu karakterler — `$`, `{`, `}`, `;`, tırnaklar, ters tırnak, açı parantezleri ve boşluk — doğrulama hatasıyla reddedilir.

**Özel web sunucusu direktifleri:** panelinizde **Custom config** düğmesi yoktur — hosting yöneticiniz birincil domain'inize sizin için Nginx ya da Apache direktifleri ekleyebilir. (`memory_limit` ya da `upload_max_filesize` gibi domain başına PHP ayarları **PHP** sayfasından değiştirilir.)

- Nginx için snippet `server { ... }` bloğu içine yerleştirilir.
- Apache için snippet `<VirtualHost>` bloğu içine yerleştirilir.
- Kaydetmeden önce `nginx -t` / `apachectl configtest` çalışır. Geçersiz config reddedilir, önceki çalışan config geri yüklenir ve canlı site hiçbir zaman reddedilen sürümden servis edilmez.
- Custom config kaydı domainin yönlendirmelerini, PHP sürümünü ve SSL dinleyicisini olduğu gibi korur.

### Databases

MariaDB veritabanı oluşturun. İsimler hesap kullanıcı adınızla otomatik prefix'lenir (`{user}_{db}`), böylece tenant'lar arasında çakışma imkânsızdır.

- **Bağlantı detayları:**
  - Host: `localhost` (bu sunucudaki siteleriniz ve script'leriniz için); başka bir makine ancak hosting yöneticiniz veritabanı sunucusunu ağa açtıysa ve o makine **Uzak Bağlantı** altında eklendiyse bağlanabilir
  - Port: `3306`
  - Kullanıcı: `{user}_{dbuser}` (otomatik prefix'li)
  - Parola: kullanıcıyı oluştururken belirleyin; daha sonra sıfırlanabilir
- **Karakter seti:** varsayılan olarak `utf8mb4_unicode_ci` collation ile `utf8mb4` (emoji dahil tam Unicode)
- **Veritabanı boyutu:** panel tarafından sınırlanmaz ve disk kotanıza sayılmaz (disk rakamı yalnız ev dizininizi kapsar); paketiniz veritabanı sayısını sınırlar
- **Veritabanı kullanıcıları:** her veritabanı, üzerinde yetkisi olan kullanıcıları yetkileriyle listeler. Bir veritabanını silmek, yalnız onun üzerinde yetkisi olan kullanıcıları da kaldırır.
- **Uzak erişim:** bir uzak host eklemek yerel veritabanı kullanıcılarınızı o host'a kopyalar. Hosting yöneticiniz veritabanı sunucusunu ağa açmadıysa sunucu yalnız kendi üzerinden bağlantı kabul eder — panel bu durumu size söyler.
- **phpMyAdmin:** bir veritabanı satırındaki phpMyAdmin simgesi ya da dashboard'daki phpMyAdmin kısayolları bir SSO oturumu açar — veritabanı root parolasını asla yazmazsınız
- **SQL dökümü içeri aktarma:** panelin kendi içeri aktarma özelliği yoktur — phpMyAdmin'in **Import** sekmesini kullanın (kabul ettiği en büyük dosya boyutunu orada gösterir); daha büyük bir döküm için hosting yöneticinize başvurun

Bir DB kullanıcısı eklerken kullanılabilen yetkiler (her biri yalnız o veritabanında geçerli): **ALL PRIVILEGES** (varsayılan olarak seçili) ya da şunlardan herhangi biri: `SELECT`, `INSERT`, `UPDATE`, `DELETE`, `CREATE`, `DROP`, `ALTER`, `INDEX`, `REFERENCES`, `CREATE TEMPORARY TABLES`, `LOCK TABLES`, `EXECUTE`, `CREATE VIEW`, `SHOW VIEW`, `CREATE ROUTINE`, `ALTER ROUTINE`, `EVENT`, `TRIGGER`. Kasıtlı olarak sunulmayan yetkiler: `SUPER`, `FILE`, `GRANT`, `CREATE USER` (bunlar sunucu genelidir).

### Email

Posta kutuları (`info@your-domain.com`) oluşturun, depolama sınırlarını belirleyin, kutuyu etkinleştirin ya da pasifleştirin, parolasını değiştirin ve yönlendiriciler yapılandırın. Pasif kutu ne giriş yapar ne posta alır; yönlendiricileri de onunla birlikte durur. Yönlendirici her zaman mevcut kutularınızdan birinden başlar. Bir kutunun depolama sınırı 1 MB ile paketinizin diski arasındadır ve tüm kutularınızın sınırları toplamı paketin diskini aşamaz — pencere ne kadar yer kaldığını gösterir; bu aralığın dışındaki bir sınır reddedilir (sınırsız kutuyu yalnız sağlayıcınız kurabilir; siz bir sınır verene kadar öyle kalır). Kota mail sunucusu tarafından uygulanır: sınır aşıldığında yer açılana kadar gelen posta reddedilir.

**Posta kutusu depolama:** Maildir formatı; mail sunucusu home dizininizin dışında tutar.

**Mail istemcilerine (Outlook, Thunderbird, Apple Mail, Mailspring, K-9) verilecek bağlantı ayarları:**

| Protokol | Host | Port | Şifreleme |
|---|---|---|---|
| IMAP (alma için önerilir) | `mail.your-domain.com` | `993` | SSL/TLS |
| SMTP (gönderme) | `mail.your-domain.com` | `587` | STARTTLS |
| SMTP (alternatif) | `mail.your-domain.com` | `465` | SSL |
| POP3 (legacy) | `mail.your-domain.com` | `995` | SSL/TLS |

> `mail.your-domain.com` çözümlenmiyorsa, hosting yöneticinizden doğru mail sunucusu hostname'ini isteyin (genellikle sunucunun kendi hostname'idir).

**Webmail:**

- URL: `https://your-server.example.com/webmail/`
- Motor: Roundcube
- E-posta sayfasında her kutunun yanındaki **Webmail** düğmesi sizi tek seferde içeri alır (ekstra parola yok); dashboard'daki Webmail kısayolu ilk kutunuzu açar
- Bir kutuyu silmek, onun webmail adres defterini, kimliklerini ve ayarlarını da siler

**DKIM:** hesabınızın posta DNS'i açıkken panel domaininiz için bir DKIM anahtarı üretir, imzalayıcıya kaydeder, giden postanızı bu anahtarla imzalar ve kaydı DNS zone'unuza yayınlar. DNS'iniz başka yerde barınıyorsa, alıcıların imzayı doğrulayabilmesi için public kısmını orada TXT kaydı olarak yayınlayın:

```
default._domainkey.your-domain.com  TXT  "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."
```

**Saatlik gönderim sınırı:** paketiniz hesabınızın saatte kaç mesaj gönderebileceğini belirler. Hak hesabın tamamına aittir; üzerindeki tüm posta kutuları, domainler ve subdomainler bu hakkı paylaşır. Sınır aşıldığında sunucu sonraki mesajları gönderildikleri anda geçici bir hatayla (`4xx`) geri çevirir — mesajlar sunucuda kuyruğa alınmaz, bu yüzden mail programınızın ya da betiğinizin onları daha sonra yeniden göndermesi gerekir; sayaç her saat başında (UTC) sıfırlanır. Sunucudaki betikler `127.0.0.1` üzerinden SMTP ile domaininizin bir adresi adına gönderirken kutularınızdan biriyle kimlik doğrulamalıdır; barındırılan bir adresi taşıyan kimliksiz gönderim reddedilir. PHP `mail()` (`sendmail` yolu) etkilenmez.

**SPF** (domain'iniz için mail gönderebilecekleri bildirir) — hesabınızın posta DNS'i açıkken sunucu bu kaydı DNS zone'unuza kendisi yazar:

```
your-domain.com  TXT  "v=spf1 a mx ip4:<sunucu IP'si> ~all"
```

**DMARC** (alıcılara hatalarda ne yapacaklarını söyler) — aynı şekilde, hosting yöneticinizin seçtiği politikayla yazılır (değiştirmediyse `p=none`):

```
_dmarc.your-domain.com  TXT  "v=DMARC1; p=none; rua=mailto:postmaster@your-domain.com"
```

Bir domain yalnız **bir** SPF kaydı ve bir DMARC kaydı taşıyabilir — ikinci bir SPF kaydı olduğunda alıcılar SPF'yi bozuk sayar (`permerror`). Bu kayıtları yeniden eklemeyin: birini değiştirmek için (örneğin başka bir gönderim servisine izin vermek için) DNS sayfasında mevcut kaydı düzenleyin. DNS sayfasında SPF ya da DMARC kaydı yoksa (hosting yöneticiniz otomatik kayıtları kapatabilir) tek bir kayıt ekleyin. DNS'iniz başka yerde barınıyorsa kayıtları DNS sayfasından o sağlayıcıya kopyalayın.

**Yönlendiriciler:** bir adres için gelen tüm postaları başka bir adrese, yerel veya harici olarak iletir.

```
info@your-domain.com  →  external@gmail.com
```

**Otomatik yanıtlayıcılar ve sunucu tarafı filtreler:** panelde ve webmail'de sunulmaz (webmail'de Filtreler ekranı yoktur); tatil yanıtı ve sınıflandırma için mail istemcinizin kurallarını kullanın.

**Spam Filtresi sayfası** (E-posta → Spam Filtresi): göndericileri izin listesine alın, göndericileri engel listesine alın, filtrelemeyi posta kutusu başına açıp kapatın. Bir öğe gönderici adresi (`someone@example.com`) ya da alan adıdır (`example.com`; alt alan adlarını da kapsar); liste başına en çok 100 öğe, başka metin reddedilir. Listeler, ileti yalnız sizin kutunuza adreslendiğinde ya da iletinin tüm alıcılarının listeleri aynı sonucu verdiğinde posta süzgecince uygulanır: engel listesindeki göndericinin iletisi teslimatta reddedilir (gönderici geri dönüş alır), izin listesindeki göndericinin iletisi spam puanlaması yapılmadan teslim edilir ve filtrelemesi kapalı kutu postasını puanlama olmadan alır — sağlayıcınızın tuttuğu sunucu geneli engel listesi göndericiyi adlandırıyorsa ileti her durumda reddedilir. Kutu silinince listeleri de silinir. Bir kutunun listeleri okunamazsa ayar dialogu **Yeniden dene** düğmeli bir hata görünümü gösterir ve Kaydet kapalı kalır; saklı listeler hiçbir zaman boş listelerle değiştirilmez.

### FTP

FTP kullanıcıları oluşturun, her kullanıcıyı home dizininiz altındaki bir alt dizine kilitleyin (chroot), parolaları sıfırlayın.

- **Sunucu:** FTP sayfasında gösterilmez — hosting yöneticinizin verdiği sunucu hostname'ini (tipik olarak `your-server.example.com`) ya da dashboard'daki **Hesap Bilgileri** kartında yer alan **Sunucu IP**'yi kullanın
- **Port:** açık TLS ile `21` (FTPS — FileZilla'da "Require explicit FTP over TLS"). Sunucu şifresiz girişi reddeder; `990` portunda örtük (implicit) FTPS yoktur.
- **Sertifika:** hosting yöneticiniz kendi sertifikasını kurmadıysa sunucunun FTPS sertifikası kendinden imzalıdır; bu yüzden FTP istemciniz ilk bağlantıda bir sertifika uyarısı gösterir — bunu kabul etmek (sertifikaya güvenmek) beklenen bir adımdır.
- **Kullanıcı adı formatı:** `{user}_{ad}` — yazdığınız adın önüne hesap kullanıcı adınız eklenir (oluşturma diyaloğu tam adı önizler). Hesabınızla birlikte oluşturulan FTP kullanıcısı `{user}_{user}`'dır ve ev dizininizi açar.
- **Pasif mod portları:** varsayılan olarak `30000–30100` (hosting yöneticiniz değiştirebilir). Çoğu istemci bunu otomatik olarak müzakere eder.
- **Chroot yolu:** `/home/{user}/{ftpuser_dir}/` — kullanıcı bu dizinin üstüne çıkamaz

**Önerilen FTP istemcileri:**

- **FileZilla** — ücretsiz, çoklu platform (Windows / macOS / Linux). Yeni başlayanlar için uygundur.
- **WinSCP** — ücretsiz, yalnızca Windows. Güçlü senkronizasyon özellikleri.
- **Cyberduck** — ücretsiz, macOS / Windows. Temiz UI.

**SFTP notu:** Hosting hesaplarında SSH erişimi, yöneticiniz sizin hesabınız için açmadıkça kapalıdır; SSH olmadan SFTP (SSH tabanlı) kullanılamaz. FTPS (21 portunda FTP-over-TLS) kullanın — aynı şifreleme korumalarını sağlar.

### DNS

DNS bölgenizi yönetin — A, AAAA, CNAME, MX, TXT, NS, SRV, CAA kayıtları. PowerDNS tarafından desteklenir, DNSSEC kullanılabilir.

- **Varsayılan TTL:** `3600` (1 saat). Planlanan değişikliklerden önce yayılımı hızlandırmak için düşürün (örn. `300`); sonrasında tekrar yükseltin.
- **SOA kaydı:** bölgenin SOA kaydını sunucu yönetir — tabloda satır salt okunurdur, API de düzenleme ve silmeyi reddeder (`409 DNS_RECORD_PROTECTED`). Bölgenin son NS kaydı da silinemez (önce başka bir NS kaydı ekleyin); düzenlenmesi serbesttir.
- **Kayıt kimlikleri:** bir kaydın kimliği adından, türünden ve içeriğinden türetilir; okumalar arasında aynı kalır, komşu bir kaydın silinmesi diğerlerini yeniden numaralandırmaz.

Kayıt örnekleri:

```
your-domain.com           A      1.2.3.4
your-domain.com           AAAA   2001:db8::1
www                       A      1.2.3.4
@                         MX     10 mail.your-domain.com.
@                         TXT    "v=spf1 a mx ip4:1.2.3.4 ~all"
@                         CAA    0 issue "letsencrypt.org"
_sip._tcp                 SRV    10 60 5060 sip.your-domain.com.
```

İlk A kaydı, `www` A kaydı, MX kaydı ve SPF satırı, sunucunun bölgenize kendisinin yazdığı biçimdedir (MX ve SPF, hesabınızın posta DNS'i açıkken — Email altındaki **SPF**'ye bakın). Bunlardan birini değiştirmek için aynı ada ikinci bir kayıt eklemek yerine mevcut kaydı düzenleyin: bir domain yalnız bir SPF kaydı taşır, bir CNAME de aynı addaki başka hiçbir kayıtla birlikte duramaz — bu yüzden `www`'nin A kaydı dururken `www` CNAME'e çevrilemez.

Bir bölge oluşturduktan sonra, panel domain registrar'ınızla ayarlamanız gereken **NS değerlerini** gösterir (tipik olarak `ns1.your-server`, `ns2.your-server` — hosting yöneticinizle doğrulayın).

**Toplu işlemler:** panelde bölge dosyası içeri veya dışarı aktarma yoktur; kayıtlar tek tek eklenir ve düzenlenir.

**Yayılım:** tipik olarak yerelde 5–15 dakika, küresel olarak 24–48 saate kadar. Kontrol etmek için `dig` veya `whatsmydns.net` gibi online araçları kullanın.

### SSL

Domain başına Let's Encrypt sertifikaları çıkarın, özel sertifikalar yükleyin, son kullanma tarihlerini görüntüleyin.

- **Let's Encrypt doğrulaması:** HTTP-01 kullanılır (sunucu, her sitenin `/.well-known/acme-challenge/` yolunda sunduğu kendi doğrulama klasörüne bir dosya yerleştirir ve Let's Encrypt onu çeker; site klasörlerinize hiçbir şey yazılmaz, oradaki kendi `.well-known` klasörünüz bunun için kullanılmaz).
- **Otomatik yenileme:** certbot 30 gün ya da daha az kalan her sertifikayı yeniler — Debian ve Ubuntu sunucularda sistem zamanlayıcısıyla günde iki kez, RHEL ailesinde her gün sunucu saatiyle 03:00'te. Yenileme için bildirim gelmez; yenilenmeyen sertifika için 14, 7, 3 ve 1 gün kala süre uyarısı alırsınız.
- **Süre uyarısı:** sitelerinizden birinin servis ettiği sertifikanın 14, 7, 3 ya da 1 günü kaldığında (başarısız olmayı sürdüren bir yenileme ya da yüklenmiş bir sertifika) bu adımların her birinde bir kez *SSL Expiry Warning* alırsınız.
- **Joker sertifikalar** (`*.your-domain.com`): panel çıkarmaz — Let's Encrypt sertifikası adı ve `www.` biçimini kapsar (`your-domain.com` ve `www.your-domain.com`). Başka bir yerden alınmış joker sertifika, özel sertifika yükleme ile kurulabilir.
- **Özel sertifika yükleme:** PEM sertifika zincirini ve özel anahtarı yapıştırın. Format düz metin PEM olmalıdır (`-----BEGIN CERTIFICATE-----` ile başlar). Kurulum diyaloğunun alan adı seçicisi hesabın sunduğu her adı sunar: ana alan adı, addon alan adları ve alt alan adları.
- **HSTS:** bir anahtar değildir — site bir sertifikaya kavuştuğunda HTTPS yanıtları `Strict-Transport-Security: max-age=31536000; includeSubDomains` başlığını taşır (Nginx ve Apache sunucularında); bu, tarayıcılara domain'iniz ve tüm subdomain'leri için her zaman HTTPS kullanmalarını söyler (bu yüzden subdomain'lerinizin de sertifikası olmalıdır).
- **HTTP → HTTPS:** bu da bir anahtar değildir. Sitelerinizi Nginx servis ediyorsa (dashboard'daki **Web Sunucu** Nginx ya da Nginx + Apache gösterir — varsayılan kurulum), sertifikası olan bir site her `http://...` isteğine `https://...` adresine 301 yönlendirmesiyle yanıt verir; diğer kurulumlar kendiliğinden yönlendirmez. `X-Forwarded-Proto` başlığı gönderen bir proxy ya da CDN üzerinden gelen istek (Cloudflare bunu yapar) yönlendirilmez — yönlendirmeyi proxy tarafında açın.
- **PHP'nin gördüğü HTTPS (Nginx + Apache):** HTTPS bağlantısını Nginx sonlandırır ve isteği Apache'ye iletir. PHP bu isteklerde `$_SERVER['HTTPS']` değerini `on` okur; `REQUEST_SCHEME` ve `SERVER_PORT` ise bu iç adımı (`http`, `80`) anlatır — kodunuz ziyaretçinin şemasına bakacaksa `HTTPS`'i kontrol edin.

### PHP

Her domain'inizin (birincil, addon, subdomain) PHP sürüm seçicisi olan kendi satırı vardır; seçenekler sunucuda kurulu sürümlerle sınırlıdır. Satırın **PHP Yapılandırması** işlemi o domain'in `php.ini` değerlerini (`memory_limit` ya da `upload_max_filesize` gibi) düzenler: yalnız hesabınızın varsayılanlarından farklı olan değerler, domain'in doküman kökündeki bir `.user.ini` dosyasına yazılır. Kendi değerleri olan domain **Özel** olarak işaretlenir; **Varsayılanlara Sıfırla** dosyayı kaldırır.

- **Kullanılabilir sürümler:** sunucunuza bağlıdır. Tipik: `5.6` (legacy), `7.4`, `8.0`, `8.1`, `8.2`, `8.3`, `8.4`
- **Varsayılan sürüm:** en yeni kararlı, genellikle `8.4`
- **Yaygın `php.ini` ayarları:**
  - `memory_limit = 256M`
  - `upload_max_filesize = 64M`
  - `post_max_size = 64M`
  - `max_execution_time = 300`
  - `display_errors = Off` (production — asla `On` değil)
  - `error_log = /home/{user}/logs/php-error.log`
- **PHP hata logu:** `/home/{user}/logs/php-error.log`
- **Değişikliklerin uygulanması:** bir domain'in PHP sürümünü değiştirmek eski ve yeni sürümün PHP-FPM servisini yeniden yükler (reload). `php.ini` değerlerini kaydetmek reload gerektirmez — PHP domain'in `.user.ini` dosyasını kendisi okur ve bir değişikliğin görünmesi 5 dakikayı bulabilir (PHP'nin varsayılan `user_ini.cache_ttl` süresi).

### Files

Hesabınızın home dizinine göz atın. Yükleyin, indirin, düzenleyin (Monaco editor), chmod, yeniden adlandırın, kopyalayın, taşıyın, arşivleyin (`.tar.gz` veya `.zip`), çıkarın.

- **Hesap home:** `/home/{user}/`
- **Web kökü:** `/home/{user}/public_html/`
- **Log dizini:** `/home/{user}/logs/` — sunucu yazar, siz okursunuz; dizinin kendisi yazılabilir değildir, yani içine log dosyası eklenemez, adı değiştirilemez, silinemez
- **Yükleme limiti:** panel UI üzerinden dosya başına 256 MB (dakikada beş yükleme); daha büyük dosyalar için FTP/FTPS kullanın
- **chmod önerileri:**
  - Dosyalar: `644` (`rw-r--r--`)
  - Dizinler: `755` (`rwxr-xr-x`)
  - Hassas (config, kimlik bilgileri): `600` (`rw-------`)
  - Script'ler: PHP, PHP-FPM üzerinden hesap kullanıcınızla çalışır; bu yüzden PHP dosyaları çalıştırma biti istemez (`644`); sunucu siteleriniz için CGI yürütmesi kurmaz
- **Gizli dosyalar:** varsayılan olarak gösterilir (`.htaccess`, `.env` gibi `.` ile başlayan dosyalar); araç çubuğundaki **Gizli dosyaları gizle** düğmesi bunları gizler
- **Monaco editor desteği:** PHP, HTML, CSS, JS, JSON, YAML, Markdown, Python, shell, SQL için syntax highlight — Visual Studio Code ile aynı motor
- **Oluşturmada arşiv formatları:** `.tar.gz`, `.zip`
- **Çıkarmada arşiv formatları:** `.tar.gz`, `.tar.bz2`, `.tar.xz`, `.tar`, `.zip`
- **Çıkarma sınırları:** her giriş hedef klasörün içinde kalmalıdır (`..` ya da mutlak yol taşıyan girişler, dışarıyı gösteren bağlantılar, aygıt ve fifo girişleri `422 VALIDATION_ERROR` ile reddedilir); en çok 100.000 giriş, dosya başına 512 MiB ve toplam 2 GiB; bir zip girişi 200 kattan fazla genişleyemez. setuid/setgid bitleri düşürülür.
- **Toplu işlemler:** birden fazla öğeyi silme, kopyalama ya da taşıma öğe bazında raporlanır. Bazı öğeler reddedildiğinde (örneğin home dizininizin dışını gösteren bir bağlantı) panel temiz bir başarı yerine kaç öğenin başarılı olduğunu gösterir ve başarısız olanları listeler.

Path traversal API katmanında engellenir — her yol `os.path.realpath` üzerinden çözümlenir ve `/home/{your_user}/` içinde olduğu doğrulanır.

### Backups

Dosyalarınızın, veritabanlarınızın ve posta kutularınızın (herhangi bir bileşimde) istek üzerine bir yedeğini oluşturun ya da yinelenen bir yedek planlayın. Yedek, uzak hedeflerinizden birine de kopyalanabilir (FTP / SFTP / Google Drive / Bunny Storage / Yandex Disk / OneDrive — Uzak Depolama sekmesinden yönetilir).

- **Sunucuda saklama:** `/var/whost/backups/{user}/` — `{user}_YYYYMMDD_HHMMSS_{id}.tar.gz` adlı bir `.tar.gz` arşivi (planlı olanlar `sched_` önekini taşır)
- **İçerik:** ev dizininizdeki dosyalar (setuid ve setgid bitleri korunmaz: böyle bir bit taşıyan dosya ya da klasör yedeğe bit olmadan girer; `tmp` klasörünüzdeki PHP oturum dosyaları yedeğe alınmaz, sunucu bunları son kullanımlarından bir gün sonra siler), veritabanı başına bir SQL dökümü ve posta kutularınız (adresler, parola özetleri, kotalar ve postanın kendisi)
- **Saklama:** operatörün saklama süresi her yedeğe uygulanır (varsayılan 7 gün); bir zamanlama ayrıca yalnız kendi son N çalışmasını tutar (saklama sayısı); başka bir zamanlamanın yedeklerini silmez
- **Uzak kopya başarısız:** yedek sunucuda kalır, satırın rozeti nedeni söyler — sunucu kopya bitmeden durduğunda da ("The remote copy did not finish: the agent stopped during the upload.")
- **FTP / SFTP hedefleri:** parolanız gönderilmeden önce sunucu denetlenir. FTP sunucusunun sertifikası girdiğiniz sunucu adı için geçerli olmalıdır; kendinden imzalı ya da başka bir ad için verilmiş sertifika kullanan bir sunucuda ya sunucu adı olarak sertifikadaki adı girin ya da **Doğrulanamayan sertifikayı kabul et** anahtarını açın — ilk başarılı bağlantının sertifikası hatırlanır ve farklı bir sertifika reddedilir. SFTP hedefi sunucunun ana makine anahtarını ilk başarılı bağlantıda hatırlar ve farklı bir anahtarı reddeder. Yedek sunucunuzun anahtarı ya da sertifikası değiştiyse hedefi düzenleyin, **Kaydederken unut** kutusunu işaretleyip kaydedin; bir sonraki başarılı bağlantı yenisini hatırlar. Bir kez TLS ile bağlanmış FTP hedefi sonradan düz FTP'ye düşmez: sunucusu TLS'i reddederse, hedefi silip yeniden ekleyene kadar testler ve kopyalar başarısız olur
- **Sunucu güncelleniyor:** sunucu bir WHost güncellemesi kurarken yedek ya da geri yükleme başlatmak bunu söyleyen bir iletiyle reddedilir — birkaç dakika sonra yeniden deneyin; güncelleme sırasında vakti gelen zamanlanmış yedek hemen ardından koşar
- **Büyük hesaplar:** yedeğin her adımı (dosyalarınızın kopyası, her veritabanı, her posta kutusu, arşiv) iş yaptıkça sürer; 10 dakika boyunca hiçbir şey yapmayan adım durdurulur ve yedek o adımı adlandırarak başarısız olur, hiçbir adım 6 saatten uzun sürmez
- **Hiç yanıt gelmemesi:** yedek, onu başlatan isteğin içinde koşar; büyük bir hesapta istek dakikalarca açık kalabilir. Hiçbir şey dönmediğinde (geçit zaman aşımı, kopan bağlantı) panel yedeğin arka planda sürüyor olabileceğini söyler ve listeyi yenileyip bildirimlerinize bakmanızı ister — yeniden başlatmak ikinci bir kopya oluşturur. Geri yükleme de aynı biçimde yanıtlar. Sunucunun adını koyduğu bir ret kendi mesajını korur

**Zamanlamalar:** günlük, haftalık (haftanın gününü seçin — liste Pazar ile başlar) ya da aylık (günü seçin, 1–28), belirtilen saatte (sunucunun yerel saati; Son Çalışma ve Sonraki Çalışma sütunları damgaları sizin saat diliminizde gösterir), saklama sayısı ve dahil edilecek içerikle. Operatör hesap başına zamanlama sayısını sınırlar; sınıra ulaşıldığında panel sunucunun ret gerekçesini gösterir.

**Geri yükleme:** satırın Geri Yükle işlemi bir onay ister ve ardından yedekteki sitelerinizi, veritabanlarınızı ve posta kutularınızı yerine koyar — seçici geri yükleme yoktur. Dosyalar `public_html`, `tmp`, `ssl`, `mail` dizinlerine ve ek alan adı ile alt alan adı klasörlerinize döner (ev dizininizdeki diğer klasörlere, log dosyalarına ve gizli dosyalara dokunulmaz); yedekteki her veritabanı düşürülüp dökümünden yeniden oluşturulur, kullanıcıları sahip oldukları yetkileri aynen korur — döküm hesabınızın kendi içe aktarma kullanıcısıyla içe aktarılır; bu kullanıcı yalnız sizin veritabanlarınıza yazabilir, bu yüzden başka bir veritabanını adlandıran bir döküm geri yüklemeyi başarısız kılar; görünümler, tetikleyiciler ve yordamlar o kullanıcı altında geri gelir; posta kutuları postalarıyla yeniden kurulur. Sunucu yanıt verene kadar satır *Geri yükleniyor* gösterir ve işlemleri kilitlidir.

**İndirme:** satırın İndir işlemi arşivi yeni sekmede açar; indirme devam ettirilebilir (tarayıcı duraklatıp sürdürebilir).

### Cron Jobs

Tam dakika / saat / gün / ay / haftanın günü sözdizimiyle cron girdileri ekleyin.

**Cron sözdizimi kısa rehberi:**

| İfade | Anlam |
|---|---|
| `* * * * *` | Her dakika |
| `*/5 * * * *` | Her 5 dakikada bir |
| `0 * * * *` | Her saat, dakika 0'da |
| `0 3 * * *` | Her gün 03:00'te |
| `0 3 * * 0` | Her Pazar 03:00'te |
| `0 0 1 * *` | Her ayın ilk günü, gece yarısı |
| `30 2 * * 1-5` | Hafta içi 02:30'da |

**Komut bağlamı:**

- Hesap kullanıcınız olarak çalışır (root olarak değil), yorumlayıcı `/bin/sh`'tir
- `$HOME = /home/{user}`
- `$PATH` standart non-interactive yoldur; emin olmadığınız komutlar için mutlak yollar kullanın (`/usr/bin/php`, `/usr/local/bin/composer`)
- **Şimdi Çalıştır** komutu aynı yorumlayıcı ve login ortamıyla hemen çalıştırır, 85 saniye sonra durdurur (agent’ın kendi sınırı 90 saniyedir); zamanlanmış çalışmalar etkilenmez. **Son Manuel Çalıştırma** sütunu işin en son ne zaman **Şimdi Çalıştır** ile başlatıldığını gösterir; zamanlanmış çalışmalar orada kaydedilmez.

**Çıktı işleme:** işin yazdırdığı her şey sunucudaki hesap posta kutunuza teslim edilir; panel bunu göstermez — çıktıyı komutta yönlendirin (`logs/` dizinine sunucu yazar, işleriniz oraya yazamaz):

```bash
# Sessiz — tüm çıktıyı at
/usr/bin/php /home/{user}/public_html/cron.php > /dev/null 2>&1

# Bir log dosyasına ekle
/usr/bin/php /home/{user}/public_html/cron.php >> /home/{user}/cron.log 2>&1
```

**Panelin denetlediği:** her zamanlama alanı sayı, aralık, adım ya da liste olmalıdır (`*`, `5`, `1-5`, `*/10`, `1,15`); adlı ay/gün (`JAN`, `MON`) ve `@daily` gibi kısayollar kabul edilmez. Komut satır sonu içeremez. Panel komutun ne yaptığına karışmaz — komut kendi hesabınızın izinleriyle çalışır. Crontab'a başka yoldan eklediğiniz satırlar (`MAILTO=`, `@reboot`, panel işareti taşımayan girişler) korunur ama listelenmez.

### Logs

Domain başına access ve error logları.

| Log | Yol |
|---|---|
| Nginx access | `/home/{user}/logs/{domain}-access.log` |
| Nginx error | `/home/{user}/logs/{domain}-error.log` |
| Apache access (backend, dual-stack ise) | `/home/{user}/logs/{domain}-apache-access.log` |
| PHP error | `/home/{user}/logs/php-error.log` |
| Cron çıktısı (yönlendirdiyseniz) | Komutunuzun yazdığı dosya — örneğin `/home/{user}/cron.log` (işler `logs/` altına yazamaz); Dosya Yöneticisi'nden açın, Logs sayfası bunu göstermez |

- **Rotasyon:** `logrotate` ile günlük, 14 gün saklama
- **Format:** Nginx combined log formatı (IP, timestamp, request, status, byte boyutu, referer, user-agent)
- **Gerçek zamanlı tail:** Logs sayfası en son satırları canlı stream eder (SSE — `tail -f` eşdeğeri), böylece bir deploy veya istek geldiğinde izleyebilirsiniz
- **Kapsam:** yalnız hesabınıza ait alan adlarının günlükleri okunabilir; başka bir hesabın alan adı `403 DOMAIN_NOT_OWNED` döndürür

---
