Kendi Nextcloud'unu Barındırmak: Varsayılanlardan Farklı Olarak Neleri Ayarlıyorum
Reklam
Dropbox veya Google Drive'a acilen kendilerinin barındırdığı (self-hosted) bir alternatif arayan müşterilerde Nextcloud konusu düzenli olarak gündeme gelir. Buradaki motivasyon genellikle maliyetin (ekip büyüdükçe kullanıcı başına lisans ücretlerinin agresif bir şekilde katlanması) ve katı veri yerleşimi kurallarının (şirket dosyalarının sadece kendi kontrol ettikleri bir altyapıda kilitli kalması) birleşimidir.
Kurulumun kendisi son derece basittir; çoğu işi halleden web tabanlı bir kurulum sihirbazı vardır. Ancak, "sadece çalışan" bir Nextcloud kurulumu ile, insanların alışkanlıklarına sessizce geri dönmek yerine gerçekten "kullanmaya devam ettiği" bir Nextcloud kurulumu arasındaki fark, bir avuç özel ayarda gizlidir. Bunlar varsayılan olarak kesinlikle "yanlış" değildir, ancak gerçek dünyadaki bir kullanım için kesinlikle ince ayarları (tuning) yapılmamıştır.
AJAX Değil, Cron
Eğer hiçbir şeye dokunmazsanız (by default), Nextcloud'un arka plan görevleri (dosya tarama, bildirimler ve temizlik görevleri gibi) AJAX üzerinden çalışır. Yani tarayıcıda bir sayfa yüklendiğinde pasif olarak tetiklenirler.
Bu durum teknik olarak işe yarar, ancak arka plan görevlerinin sadece birisinin web arayüzünü açık tuttuğu o rastgele zamanlarda çalışması anlamına gelir. Ayrıca tarayıcı, sunucu adına fazladan arka plan işleri yapmaya zorlandığı için sayfa yüklemelerinin inanılmaz hantal hissettirmesine de neden olabilir.
Bunu, tam olarak her beş dakikada bir çalışan özel bir sistem cron görevine (veya çok daha iyisi bir systemd zamanlayıcısına) geçirmek, yönetici ayarlarından yapılacak hızlı bir değişikliğe ve terminalde girilecek tam olarak tek bir satıra bakar:
# web sunucusu kullanıcısı için crontab
*/5 * * * * php -f /var/www/nextcloud/cron.php
Bu küçücük değişiklikten sonra, o an kimsenin web arayüzünü kullanıp kullanmadığına bakılmaksızın arka plan işleri planlandığı gibi son derece güvenilir bir şekilde çalışır. Artık sayfa yüklemeleri o ağır ve gereksiz yükü taşımaz.
Bellek önbellekleme (Memory caching): APCu ve Redis
Nextcloud'un temel performansı—özellikle web arayüzü ve binlerce küçük dosyayı senkronize eden masaüstü istemcileri için—önbelleklemenin (caching) düzgün yapılandırılmış olmasına inanılmaz derecede bağımlıdır.
Bu ayar olmadan, gelen her bir istek (request) yapılandırma ve dosya kilitleme durumlarını agresif bir şekilde doğrudan veritabanından tekrar tekrar okur. Kesinlikle tavsiye edilen kurulum her ikisini birden kullanır: acımasızca hızlı yerel bellek önbelleklemesi için APCu ve dağıtık dosya kilitleme (ki bunun istekler arasında ve eğer ölçeklendiriyorsanız birden fazla uygulama sunucusu arasında kesinlikle paylaşılması gerekir) için Redis.
// config/config.php
'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
'host' => '127.0.0.1',
'port' => 6379,
],
Bunun yarattığı fark, web arayüzünde saniyesinde fark edilir. Klasörlerde gezinme ve dosya listeleme hızı "fark edilebilir bir bekleme süresinden" neredeyse anında yüklenmeye geçer. Nextcloud'un o umutsuzca ihtiyaç duyduğu meta veriler, her bir istekte veritabanına ve fiziksel dosya sistemine gidip dönmek (round-trip) yerine artık nihayet doğrudan bellekten gelir.
Yükleme limitleri üç farklı yerde yaşar
"X boyutundan daha büyük dosyaları yükleyemiyorum", açık ara en yaygın Nextcloud şikayetlerinden biridir. Bunun nedeni, yükleme boyutu sınırının PHP, web sunucusu ve Nextcloud'un kendi iç ayarları arasında açıkça bir uyum içinde olması gerekmesidir. Hangisinin sınırı en düşükse, kuralı o koyar.
; php.ini
upload_max_filesize = 16G
post_max_size = 16G
# nginx
client_max_body_size 16G;
// config/config.php
'upload_max_filesize' => '16G',
Bunlardan herhangi birini kaçırmak, yüklemelerin en düşük sınır her neyse ona çarptığı an şiddetli bir şekilde başarısız olacağı anlamına gelir. Genellikle bu durum, üç katmandan hangisinin asıl suçlu olduğunu zerre kadar belli etmeyen son derece belirsiz bir hata mesajı fırlatır. Üçünü de tutarlı bir şekilde, hatta cömertçe ayarlamak, birisi devasa bir video dosyası yüklemeye çalıştığı o ilk seferde yaşanacak aşırı kafa karıştırıcı bir hata ayıklama (troubleshooting) seansını agresif bir şekilde önler.
Kimse duvara çarpmadan önce, güvenilir alan adları (trusted domains)
Eğer Nextcloud'a trusted_domains listesinde açıkça bulunmayan bir hostname üzerinden erişilmeye çalışılırsa, Nextcloud yüklenmeyi kesin bir dille reddeder. Bu çok zekice bir güvenlik önlemidir, ancak yanlışlıkla "yanlış" URL'yi deneyen (dahili bir hostname, doğrudan bir IP adresi veya sunucu taşıması sonrası yeni bir domain gibi) o ilk kişi için son derece kafa karıştırıcı bir hata üretir.
// config/config.php
'trusted_domains' => [
'cloud.example.com',
'10.0.0.5',
],
Uygulamaya ulaşmasına mantıklı olarak izin verilmesi gereken her bir hostname veya IP adresini—durum kontrolleri (health checks) veya yönetici erişimi için kullanılan dahili IP'ler de dahil olmak üzere—en baştan listeye eklemek, birilerinin ayıklamak (debug) zorunda kalacağı ilk hatanın bu olmasını temiz bir şekilde önler.
Boyutlandırma beklentileri ve yedeklemeler
Küçük bir ekip (bir avuç ile birkaç düzine aktif kullanıcı arası) için Nextcloud, standart bir WordPress sitesini çalıştıran tamamen aynı türde bir VPS üzerinde çok rahat çalışır. İnsanlar aynı anda çok sayıda devasa dosya işlemi yapmadığı sürece, kullanıcı başına düşen yük genel olarak makuldür.
Agresif bir şekilde büyüyen şey ise açıkçası depolamadır (storage). Ve asıl planlanması gereken kısım da budur. Tıpkı bir veritabanı gibi data dizininin de sağlam bir yedekleme stratejisine çaresizce ihtiyacı vardır. Tüm varoluş amacı "şirket dosyalarının yaşadığı yegane yer" olan bir hizmet için, onu doğru şekilde geri yüklemeyi (dosya izinleri, veri dizini yapısı, veritabanı ve yapılandırmanın tamamen birbirine kusursuz uyması gerekir) en az bir kez test etmek kesinlikle zahmete değer. Tıpkı bir veritabanı yedeğini geri yüklemek gibi, bunu gerçek bir kriz gününden önce sakin bir öğleden sonra test etmek kesinlikle ve kesinlikle çok daha iyidir.
Bu spesifik değişikliklerin hiçbiri zor değildir ve hiçbiri varsayılan kurulum sihirbazının "yanlış" yaptığı şeyler değildir. Bunlar sadece, ilk gün teknik olarak sadece çalışan bir Nextcloud ile; bir yılın ardından, gerçek kullanım ve devasa dosya hacimleri onlara uygun ayarlanmamış o varsayılanları ortaya çıkarma fırsatı bulduktan sonra bile hala hızlı, güvenilir ve varlığını unutturacak kadar pürüzsüz hissettiren bir Nextcloud arasındaki asıl farktır.
Reklam