Nextcloud, bulut tabanlı dosya depolama ve işbirliği platformudur. Açık kaynaklı bir yazılımdır. Kurumsal müşteriler için Enterprise versiyonu da bulunmaktadır. Nextcloud sayesinde kullanıcılar dosyalarını saklayabilir, paylaşabilir, senkronize edebilir ve çeşitli cihazlardan erişebilirler.
Nextcloud kullanıcılarının depolanan dosyaları arttıkça zamanla performans sorunları ortaya çıkmaya başlayabilir. Bu makalede, performansa ciddi oranda katkısı olan Memory Caching mekanizmasından ve nasıl devreye alınabileceğinden bahsedeceğim. Bu makaleyi yazarken Nextcloud uygulamanızın kurulu olduğu varsayılmıştır.
Makale Hazırlanırken Kullanılan Sistemin Özellikleri
- Ubuntu Server 20.04.2 LTS
- Apache Server
- PHP 8.1
- Nextcloud Hub 5 (27.0.0)
- Yapı tek makine olarak kurgulanmıştır.
Memory Caching Nedir?
Nextcloud gibi web tabanlı uygulamalarda Memory caching, performansı artırmak ve veri tabanı yükünü azaltmak için kullanılır. Memory caching RAM üzerinde çalışır ve verilerin hızlı bir şekilde erişilebilir olmasını sağlar. Nextcloud’da Memory caching kullanmanın bazı avantajları şunlardır:
- Performans Artışı: Memory caching, sık kullanılan verileri ve sonuçları bellekte tutarak, tekrarlanan talepleri hızlı bir şekilde karşılar. Bu durum uygulamanın çalışma hızını önemli ölçüde arttır.
- Daha Düşük Tepki Süresi: Bellek, verilere çok hızlı erişebilen bir hafıza türüdür. Bunun bir sonucu olarak kullanıcı taleplerine daha hızlı cevap verebilir ve daha düşük tepki süreleri elde edebilir.
- Veritabanı Yükünün Azaltılması: Memory caching, sık kullanılan verileri bellekte tutarak veritabanı yükünü azaltır. Bu, veri tabanının işlemci ve disk kullanımını optimize ederek, veri tabanı sunucusunun aşırı yüklenmesini önler.
- Daha Az Veritabanı İşlemi: Veritabanı işlemleri, disk tabanlı işlemlerdir ve bellek işlemlerine göre daha yavaş olabilir. Memory caching, sık kullanılan verileri bellekte sakladığından, veritabanı işlem sayısını azaltır ve sistem performansını artırır.
Memory caching’in dezavantajı, bellek kullanımının artmasıdır. Önbellekte saklanan veriler bellekte yer kadığı için daha fazla bellek kullanımına neden olabilir. Çoğu durumda Memory caching’in avantajları, dezavantajlarından çok daha ağır bastığı ve performans artışı gösterdiği için tercih sebebidir.
Nextcloud Memory Caching Yapılandırma
1) Gerekli Paketlerin Kurulması
sudo apt install php-apcu redis-server php-redis
sudo service apache2 restart
php-apcu nextcloud için önbellek mekanizması olan APCu’yu yükler. redis-server ve php-redis ise Redis desteği için gerekli paketlerdir. Son satırda Apache servisimizi yeniden başlatıyoruz.
2) Redis Yapılandırma Dosyasının Düzenlenmesi
sudo nano /etc/redis/redis.conf
Bu komut, Redis yapılandırma dosyasını açar. İlgili ayarları bulup aşağıdaki gibi düzenliyoruz. Eğer bu ayarlardan olmayan varsa da ekliyoruz. redis.conf dosyasındaki en başta bulunan # karakteri ilgili satırın pasif olduğu anlamına gelir. # sembolünü kaldırdığınız satırlar aktif hale gelir.
port 6379
unixsocket /var/run/redis/redis.sock
unixsocketperm 770
requirepass RedisParolanız
supervised systemd
bind 127.0.0.1 ::1
port 6379: Bu satır, Redis sunucusunun çalışacağı port numarasını belirtir. Varsayılan olarak Redis, 6379 numaralı portu kullanır. Farklı bir port numarası kullanmak isterseniz, bu satırı düzenleyerek istediğiniz portu belirtebilirsiniz.
unixsocket /var/run/redis/redis.sock: Redis sunucusunun Unix soketini iletişim için belirtilen dosya yolunu belirtir. Redis’in çalıştığı dizinde redis.sock adlı bir soket dosyası oluşturacak ve bu soket üzerinden iletişim sağlanacaktır.
unixsocketperm 770: Bu satır, Redis Unix soketinin izinlerini belirtir.
requirepass RedisParolanız: Bu satır, Redis sunucusuna erişmek için gereken parolayı belirtir. Redis sunucusu, varsayılan olarak parolasız çalışır. Güvenlik açısından önemli gördüğümüz için parola belirliyoruz. Buradaki “RedisParolanız” kısmını kendi istediğiniz bir parolayla değiştirerek Redis sunucusu parolasını belirlemiş oluyoruz.
bind 127.0.0.1 ::1: Bu satır, Redis sunucusunun hangi IP adreslerine bağlanacağını belirtir. Burada 127.0.0.1 ve ::1
, Redis’in sadece yerel makineden (localhost) gelen bağlantılara izin vermesi anlamına gelir. Bu, Redis sunucusunun sadece yerel makineden erişilebilir olduğu anlamına gelir ve dış ağlardan erişimi engeller.
3) Redis Yetkilendirme ve Başlatma
sudo usermod -aG redis www-data
sudo systemctl start redis-server
sudo systemctl enable redis-server
İlk satırda Redis ile iletişim için gerekli olan izni veriyoruz. İkinci satırda Redis sunucusunu başlatıyoruz. Son satırda ise Redis sunucusunun sistem başlangıcında otomatik olarak başlamasını sağlıyoruz
Buraya kadar olan kısımla birlikte cache mekanizması ile ilgili olan gerekli kurulumları tamamlamış olduk.
4) Nextcloud Yapılandırma Dosyasını Düzenlemek
sudo nano /var/www/nextcloud/config/config.php
Bu komut, Nextcloud yapılandırma dosyasını açar. Aşağıdaki satırları dosyamıza ekliyoruz.
'filelocking.enabled' => true,
'memcache.local' => '\\OC\\Memcache\\APCu',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' => array(
'host' => 'localhost',
'port' => 6379,
'timeout' => 0.0,
'password' => 'RedisParolanız',
'dbindex' => 0,
),
‘filelocking.enabled’ => true: Bu ayar, dosya kilitleme mekanizmasını etkinleştirir. Nextcloud, dosya işlemleri sırasında paralel işlemleri engellemek ve veri bütünlüğünü sağlamak için dosya kilitleme kullanır. Redis bu süreci daha verimli hale getirilir.
‘memcache.local’ => ‘\\OC\\Memcache\\APCu’: Bu ayar, APCu önbellek kullanımını etkinleştirir.
‘memcache.distributed’ => ‘\\OC\\Memcache\\Redis’:Bu ayar, dağıtılmış önbellek kullanımını etkinleştirir. Bu ayar yalnızca Nextcloud Enterprise sürümünde kullanılabilir.
‘memcache.locking’ => ‘\\OC\\Memcache\\Redis’: Bu ayar, Redis’i kilitleme mekanizması olarak kullanmayı etkinleştirir.
‘redis’ => array(…): Bu bölüm, Redis yapılandırma bilgilerini içerir. Redis sunucusuna erişim için gerekli bağlantı ayarları burada belirtilir.
‘host’ => ‘localhost’: Redis sunucusunun bulunduğu adrestir.
‘port’ => 6379‘: Redis sunucusunun çalıştığı port numarasıdır.
‘timeout’ => 0.0: Redis ile bağlantı zaman aşımı süresidir. Sıfır, bağlantının zaman aşımı olmadığı anlamına gelir. ‘password’ => ‘RedisParolanız’: Redis sunucusuna bağlanırken kullanılacak paroladır. “RedisParolanız” yazan yere Redis sunucusu yapılandırma dosyasında belirlediğiniz parolayı yazmalısınız.
Dosyamızın son hali aşağıdaki görseldeki gibi olacaktır.
5) APCu için Background jobs Oluşturmak
Cron, zamanlanmış işleri çalıştırmak için kullanılan bir zamanlama aracıdır. www-data kullanıcısı için otomatik bir görev oluşturacağız.
crontab -u www-data -e
crontab -u www-data -e komutu ile www-data kullanıcısı için tanımlama yapacağımız ekran açılmış oluyor.
*/5 * * * * php --define apc.enable_cli=1 -f /var/www/nextcloud/cron.php
Açılan ekrana yukarıdaki kodu ekliyoruz. Bu sayede www-data kullanıcısı ile her 5 dakikada bir /var/www/nextcloud/cron.php dosyasını çalıştıracak şekilde ayar yapmış oluyoruz. Kaydedip çıkıyoruz. Bazı sunucularda –define apc.enable_cli=1 yazılmayabiliyor. Aşağıdaki komut ile istersek eklediğimiz satırı kontrol edebiliriz.
crontab -u www-data -l
Örnek tanımlama aşağıdaki görseldeki gibidir.
Nextcloud web yönetim arayüzüne girerek background jobs kısmından Cron seçeneğini seçiyoruz.
6) Apache Servisini Yeniden Başlatmak
Bu aşamaya geldiğimizde Memory Caching ile ilgili tüm ayarları tamamlamış oluyoruz. Apache servisini yeniden başlatıyoruz.
sudo systemctl restart apache2
7) Kontrol
Yönetim sayfasındaki Özet ekranında bulunan “No memory cache has been configured. To enhance your performance please configure a memcache if available.” uyarı mesajı kaldırılmış ise kurulum sorunsuz tamamlanmıştır. Aşağıdaki uyarının görseli bulunmaktadır. Örnek yol: (http://domainadiniz.com/index.php/settings/admin/overview)
Makalenin ihtiyaç sahiplerine yardımcı olması temennisi ile hayırla ve sağlıcakla kalınız.
Ek Kaynaklar;
Memory caching — Nextcloud latest Administration Manual latest documentation