PostgreSQL, PHP 7.4, Apache2 & HTTP/2 ile Debian 10'a Nextcloud 18 (NextcloudHub) Kurulumu

Nextcloud, herhangi bir bulut sunucu üzerinde dosya barındırma/depolama servisi oluşturma imkanı sunan client-server yazılımıdır. Fonksiyon özellikleri açısından Dropbox ve Google Drive’a benzeyen Nextcloud ücretsiz ve açık kaynak kodlu ücretsiz bir yazılımdır. İsteyen tüm kullanıcılar Nextcloud’u kendi sunucularına kurarak tüm çapraz platformlarından yönetip senkron edebilecekleri, kullanıma hazır bir bulut depolama alanına sahip olabilirler.

Gereksinimler:

  • Temiz Debian 10 kurulu bir sunucu (DigitalOcean)
  • SSH erişimi ve root ya da sudo yetkilerine sahip bir kullanıcı
  • Doğru yapılandırılmış bir DNS A ve IPV6 var ise AAAA kaydı

Adım 1

İlk olarak postgreSQL’i yükleyin, postgreSQL’i veritabanı sunucusu olarak kuracağız:

apt install -y postgresql postgresql-contrib -y

Şimdi postgreSQL konsoluna şu komutla bağlanabilirsiniz:

sudo -u postgres psql

Çıktı şu şekilde görünmeli:

could not change directory to "/root": Permission denied
psql (11.7 (Debian 11.7-0+deb10u1))
Type "help" for help.

postgres=#

Sonrasında şu komut ile bağlantı hakkında bilgi alabilirsiniz:

\conninfo
You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".

Şu komutla oturumu sonlandırın:

\q

Adım 2

Aşağıdaki komutla Apache web sunucusunu kuracağız:

apt install -y apache2 apache2-utils -y

Adım 3

Önerilen php7.4-fpm modüllerini ve PHP 7.4’ü yüklemeden önce Debian Buster’a aşağıdaki depoları eklemeliyiz:

sudo apt -y install lsb-release apt-transport-https ca-certificates
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury_php.list
sudo apt update

Şimdi aşağıdaki komutlarla gerekli paketleri kurmaya başlayabiliriz:

apt install -y php7.4-cli php7.4-common php7.4-mbstring php7.4-gd php-imagick php7.4-intl php7.4-bz2 php7.4-xml php7.4-pgsql php7.4-zip php7.4-dev php7.4-curl php7.4-fpm php-dompdf redis-server php-redis php-smbclient php7.4-ldap

Adım 4

Apache2 ve php7.4-fpm’yi yapılandıralım. Şimdi Apache2’de gerekli olan modüllerimizi aşağıdaki komutla etkinleştirelim:

a2enmod proxy_fcgi setenvif mpm_event rewrite headers env dir mime ssl http2

Sonrasında php7.4-fpm’yi etkinleştirelim:

a2enconf php7.4-fpm

Şimdi ise apache2.conf dosyasını .htaccess dosyalarının kullanımına izin vermek için düzenlemeliyiz:

nano /etc/apache2/apache2.conf

Şu kısmı:

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

Şu şekilde düzenleyin:

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

Ayrıca HTTP/2’yi etkinleştirmek için bu satırı apache2.conf dosyasının en üstüne eklememiz gerekir:

Protocols h2 h2c http/1.1

Şimdi php.ini’yi nextcloud için hazırlamalıyız:

nano /etc/php/7.4/fpm/php.ini

Şu kodları en üste ekleyiniz:

opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

Ve şu değerleri bulup düzenleyiniz:

max_execution_time = 300
max_input_time = 600
memory_limit = 512M
upload_max_filesize = 10240M

Daha sonra, web sunucusunu ve php7.4-fpm’yi yeniden başlatalım:

systemctl restart apache2 php7.4-fpm

Adım 5

SSL sertifikası kurulumu için Certbot’u ve diğer yardımcı araçlarını yükleyin. Let’s Encrypt’tan sertifika istemek için Certbot ve apache-plugin kullanacağız:

apt install python-certbot-apache certbot wget curl sudo unzip -y

Adım 6

Nextcloud’u kurabilmemiz için önce postgreSQL’de bir veritabanı oluşturmamız gerekiyor. Bunu yapmak için aşağıdaki komutları girmelisiniz:

:warning: İlgili alanları kendi değerlerinizle değiştirmeyi unutmayınız! :warning:

Konsola giriş yapın:

sudo -u postgres psql

Sonrasında sırasıyla;

CREATE USER nextcloud WITH PASSWORD 'ŞİFRENİZ';
CREATE DATABASE nextclouddb TEMPLATE template0 ENCODING 'UNICODE';
ALTER DATABASE nextclouddb OWNER TO nextcloud;
GRANT ALL PRIVILEGES ON DATABASE nextclouddb TO nextcloud;
\q

Adım 7

Nextcloud’un en güncel sürümünü resmi sitesinden indirin ve dosya sistemini oluşturun.

wget https://download.nextcloud.com/server/releases/latest-18.zip

İndirilen arşiv dosyasını dışarı çıkartın:

unzip latest-18.zip

Ardından klasörü doğru yere taşıyın ve yetkilerini tanımlayın. Tüm klasörü olduğu gibi /var/www/html/ yoluna taşıyacağız.

mv nextcloud /var/www/html/
chown -R www-data:www-data /var/www/html/nextcloud

İndirilen arşiv dosyasını şimdi silebilirsiniz:

sudo rm latest-18.zip

Nextcloud dosyalarımız için güvenlik nedeniyle /var/www/html/nextcloud dışında bir dizin hazırlayın:

mkdir /nextcloud_verileri

Dizin sahibini www-data olarak değiştirin:

chown -R www-data:www-data /nextcloud_verileri

Adım 8

Apache2 sanal ana bilgisayarını oluşturun ve SSL ile güvenli hale getirin. /etc/apache2/sites-available/ dizininde yeni bir .conf dosyası oluşturacağız;

nano /etc/apache2/sites-available/001-nextcloud.conf

Dosya içeriğine şunları kendinize göre düzenleyip yapıştırın:

<VirtualHost *:80>
ServerName sizinalanadiniz.com
ServerAdmin webmaster@sizinalanadiniz.com
DocumentRoot /var/www/html/nextcloud

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Nextcloud VirtualHost

Şimdi şu komutları girelim:

a2ensite 001-nextcloud.conf
a2dissite 000-default.conf
systemctl reload apache2

Siteye https:// ile güvenli bir şekilde ulaşmak istediğimiz için bir Let’s Encrypt sertifikası oluşturacağız. Bunu Certbot’la çok kolay bir şekilde yapacağız:

certbot --apache --rsa-key-size 4096

Komut ve kurulum sonrası şu dosyayı düzenleyiniz ve verdiğim kodları DocumentRoot altına ekleyiniz:

nano /etc/apache2/sites-available/001-nextcloud-le-ssl.conf
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15768000; preload"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
# Prevent MIME based attacks
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
</IfModule>
# SSL Configuration - uses strong cipher list - these might need to be downgraded if you need to support older browsers/devices
SSLEngine on
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On

<Directory /var/www/html/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews

<IfModule mod_dav.c>
Dav off
</IfModule>

SetEnv HOME /var/www/html/nextcloud
SetEnv HTTP_HOME /var/www/html/nextcloud
Satisfy Any

</Directory>

Web arayüzünde kuruluma geçmeden önce web sunucusunu yeniden başlatalım:

systemctl reload apache2

Web arayüzünden oluşturduğumuz veritabanı bilgilerini girdikten bir yönetici hesabı oluşturduktan ve veri dizinini düzenledikten sonra:

Nextcloud önbelleğini yapılandırmak için Nextcloud’un config.php dosyasını düzenleyelim.

nano /var/www/html/nextcloud/config/config.php
'memcache.local' => '\OC\Memcache\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' => array(
'host' => 'localhost',
'port' => 6379,
),

Şöyle görünmelidir:

Temel ayarlarda, arka plan görevlerini Cron ile yapılacak şekilde yapılandırın:

Cron işini ise sunucumuzda www-data ile yapılandıralım:

sudo crontab -u www-data -e

Dosyanın en son satırına şunu ekleyin:

*/15 * * * * php7.4 -f /var/www/html/nextcloud/cron.php

Apache2 ve php-fpm’yi yeniden başlatın:

systemctl restart apache2 && sudo systemctl restart php7.4-fpm

Son olarak, alttaki verdiğim komutları girelim:

sudo -u www-data php7.4 /var/www/html/nextcloud/occ db:add-missing-indices
sudo -u www-data php7.4 /var/www/html/nextcloud/occ db:convert-filecache-bigint


Kurulum sonrası ekran görüntüleri:

Sonuç

Sıfırdan öncelikle PostgreSQL, PHP 7.4, Apache2 & HTTP/2 kurarak ve yapılandırarak Debian 10 işletim sisteminde Nextcloud 18 (NextcloudHub) kurdunuz.

Herhangi bir sorunla karşı karşıyaysanız, bu makaleyi yanıtlamaktan çekinmeyin :point_down:

Soluksuz izledim anlatım akıcı ve harika eline sağlık Muhammed Hocam. Only Office olayı bitirmiş işi. Birde Bunun H/A Cluster olan versiyonunu bekliyoruz.

1 Beğeni

Hocam selamlar, cron olarak ayarlama satırından sonra web browser’da

Internal Server Error

The server encountered an internal error and was unable to complete your request.
Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.
More details can be found in the server log.

bu hatayı almaya başladım. Daha öncesinde normal çalışıyordu neden olabilir ?

hocam problemin cron ile ilgili değil de;

‘memcache.local’ => ‘\OC\Memcache\Redis’,
‘memcache.locking’ => ‘\OC\Memcache\Redis’,
‘redis’ => array(
‘host’ => ‘localhost’,
‘port’ => 6379,

config.php’e eklediğimiz bu satırlar ile ilgili olduğunu anladım. Satırları kaldırınca tekrar çalışmaya başladı. Acaba port ile ilgili bir hata yapıyor olabilirmiyim ?

Hocam selam, ya bağlantı noktası ya da php-redis yüklenmedi ikisini kontrol ettiniz mi?