Nextcloud, ownCloud projesinin bir çatalı olan ücretsiz (Açık Kaynak) bir Dropbox benzeri yazılımdır. Nextcloud PHP ve JavaScript ile yazılmıştır, MySQL / MariaDB, PostgreSQL, Oracle Database ve SQLite gibi birçok veritabanı sistemini destekler. Dosyalarınızı Masaüstü ve kendi sunucunuz arasında senkronize tutmak için, Nextcloud, Windows, Linux ve Mac masaüstleri için uygulamalar ve Android ve iOS için bir mobil uygulama sunar. Nextcloud sadece bir Dropbox klonu değil, Takvim, Rehber, Zamanlama görevleri ve Ampache vb. İçeren akış ortamı gibi ek özellikler de sağlar.

Bu eğitici yazıda, bir Ubuntu 18.04 sunucusunda en son Nextcloud sürümünü nasıl kuracağınızı ve yapılandıracağınızı göstereceğiz. Nextcloud’u bir Nginx web sunucusu ve PHP7.1-FPM ile çalıştırıp veritabanı sistemi olarak MySQL sunucusunu kullanacağız.

Nginx Web sunucusunu kurun
PHP7.1-FPM’i Kurma ve Yapılandırma
MySQL Sunucusunu Kur ve Konfigüre Et
SSL Letsencrypt Oluştur
Nextcloud indirin
Nextcloud için Nginx Sanal Ana Bilgisayarını Yapılandırma
UFW Güvenlik Duvarı Yapılandırması
Nextcloud Kurulum Sonrası

Nginx Web sunucusunu kurun

Nextcloud rehberinde yapacağımız ilk adım Nginx web sunucusunu kurmak. Apache web sunucusu yerine Nginx web sunucusunu kullanacağız. Sunucuya giriş yapın ve depoyu güncelleyin, daha sonra aşağıda gösterildiği gibi apt komutunu kullanarak Nginx web sunucusunu yükleyin.

sudo apt update && sudo apt install nginx -y

Kurulum tamamlandıktan sonra, Nginx servisini başlatın ve servisin systemctl kullanarak sistem önyüklemesinde her seferinde başlatılmasını sağlayın.

systemctl start nginx && systemctl enable nginx

Nginx web sunucusu Ubuntu 18.04’e kurulmuştur. Aşağıdaki netstat veya curl komutunu kullanarak kontrol edin.

netstat -plntu
curl -I localhost

Nginx web sunucusu şimdi standart HTTP port 80’de Ubuntu altında çalışıyor.

PHP7.1-FPM’i Kurma ve Yapılandırma

Bu derste, nextcloud için PHP7.1-FPM’yi kullanacağız. PPA deposundan PHP7.1-FPM kullanacağız, bu yüzden sistemimize yeni PPA deposu eklememiz gerekiyor. ‘Software-properties-common’ paketini kurun ve aşağıdaki komutları çalıştırarak ‘ondrej PHP’ PPA deposunu ekleyin.

sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
Note: 

Ubuntu 18.04’te ‘add-apt-repository’ komutu, otomatik olarak depoyu günceller. Şimdi PHP7.1 ve PHP7.1-FPM’i aşağıdaki tek apt komutunu kullanarak gerekli tüm uzantıları ile yükleyin.

sudo apt install php7.1-fpm php7.1-mcrypt php7.1-curl php7.1-cli php7.1-mysql php7.1-gd php7.1-iconv php7.1-xsl php7.1-json php7.1-intl php-pear php-imagick php7.1-dev php7.1-common php7.1-mbstring php7.1-zip php7.1-soap -y

Kurulum tamamlandıktan sonra php.ini dosyalarını php-fpm ve php-cli için ayarlayacağız. ‘/etc/php/7.1’ dizinine gidin.

cd /etc/php/7.1/

NANO editörünü kullanarak php-fpm ve php-cli için php.ini dosyalarını düzenleyin.

nano fpm/php.ini
nano cli/php.ini

‘date.timezone’ satırını başındaki noktalı virgülü (;) kaldırın ve değeri kendi zaman diliminize göre değiştirin

date.timezone = Europe/Istanbul

‘cgi.fix_pathinfo’
satırının başındaki noktalı virgülü (;) kaldırın ve değeri ‘0’ olarak değiştirin.

cgi.fix_pathinfo=0

CTRL+X sonrasında Y ve Enter tuş kombinasyonu ile dosyamızı kaydediyoruz.

Ardından, php-fpm havuz yapılandırmasını ‘www.conf’ düzenleyin.

nano fpm/pool.d/www.conf

nano editöründe igili satırları bulmak için CTRL+W kombinasyonu ile aşağıdaki satırları bularak başındaki noktalı virgül (;) alanlarını siliyoruz.

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

Kaydedip çıkın.

PHP7.1-FPM hizmetini yeniden başlatın ve sistemin her açılışında başlatılmasını sağlayın.

systemctl restart php7.1-fpm
systemctl enable php7.1-fpm

Şimdi netstat komutunu kullanarak kontrol edin.

netstat -pl | grep php

Ve şimdi php-fpm ‘/ run/php/php7.1-fpm.sock’ dizini altında çalışıyor olacaktır.

MySQL Sunucusunu Kurun ve Yapılandır

Bu adımda, en son MySQL sürümünü kuracağız ve bir sonraki bulut kurulumu için yeni bir veritabanı oluşturacağız. En son sürüm MySQL paketleri depoda varsayılan olarak bulunur. Aşağıdaki apt komutunu kullanarak MySQL server son sürümünü yükleyin.

sudo apt install mysql-server mysql-client -y

Kurulum tamamlandıktan sonra, MySQL servisini başlatın ve sistem açılışında her seferinde başlatılmasını sağlayın.

systemctl start mysql
systemctl enable mysql

Şimdi MySQL root şifresini ‘mysql_secure_installation’ komutunu kullanarak yapılandıracağız. Aşağıdaki komutu çalıştırın.

mysql_secure_installation

Bu MySQL 5.8 sürümünde, MySQL şifre politikası için bir güvenlik iyileştirmesi var. Şifre politikasını seçmeniz gerekir – DÜŞÜK politika için 0, ORTA politika için 1 ve GÜÇLÜ bir şifre politikası için 2. Bu kılavuz için ‘MEDIUM’ şifre politikasını kullanacağız ve üretim sunucusunda ‘STRONG’ şifre politikasını kullanmanız önerilir. Ben tercihen ‘1’ sayısını seçtim ve Enter’a basın, ardından yeni MySQL ‘root’ şifrenizi yazın.

Ekrana çıkan soruların hepsine “Y” tuşuna basarak kurulumu tamamlayın.

Daha sonra nextcloud kurulumu için yeni bir veritabanı oluşturacağız. Benim demo olarak oluşturduğum bilgiler şöyle;

DB : pegacloud_db
User : pegacloud_user
Şifre : [email protected]

MySQL kabuğuna mysql komutuyla root kullanıcısı olarak giriş yapın.

mysql -u root -p

Şimdi aşağıdaki MySQL sorgularını çalıştırarak veritabanını ve kullanıcıyı şifre ile oluşturun.

create database pegacloud_db;
create user [email protected] identified by '[email protected]';
grant all privileges on pegacloud_db.* to [email protected] identified by '[email protected]';
flush privileges;

MySQL kurulumu ve yapılandırması tamamlandı.

Let’s Encrypt SSL Oluşturma

Bu eğiticide, nextcloud’u Letsencrypt’tan ücretsiz SSL kullanarak güvence altına alacağız ve letsencrypt aracını kullanarak sertifika dosyaları oluşturacağız. Bir etki alanı adınız yoksa veya yerel bilgisayara nextcloud uygulamasını yüklüyorsanız, OpenSSL kullanarak Kendinden İmzalı sertifika oluşturabilirsiniz. Aşağıdaki apt komutunu kullanarak ‘letsencrypt’ aracını yükleyin.

sudo apt install letsencrypt -y

Kurulum tamamlandıktan sonra nginx servisini durdurun.

systemctl stop nginx

Daha sonra, cerbot komut satırını kullanarak ‘cloud.yahyakadir.name.tr’ alan adı için SSL sertifikaları oluşturacağız. Aşağıdaki komutu çalıştırın.

certbot certonly --standalone -d cloud.yahyakadir.name.tr

Sizden e-posta adresi sorulacak ve yenileme bildirimi için kullanılacak. Letsencrypt sözleşmesi için kabul etmek üzere ‘A’ yazın ve paylaşım e-posta adresi için Hayır için ‘N’ yazabilirsiniz.

Nextcloud’u indir

Nextcloud kaynak kodunu indirmeden önce, unzip paketinin sistemde kurulu olduğundan emin olun. Paketiniz yoksa, aşağıdaki apt komutunu kullanarak yükleyin.

sudo apt install wget unzip zip -y

Şimdi ‘/ var / www’ dizinine gidin ve nextcloud son sürüm dosyasını indirin.

cd /var/www/
wget https://download.nextcloud.com/server/releases/latest.zip

Zip dosyasını çıkartın ve ‘nextcloud’ dizinini alacak, sonra yeni bir ‘data’ dizini oluşturacaksınız.

unzip latest.zip
mkdir -p nextcloud/data/

Şimdi ‘nextcloud’ dizininin sahibini ‘www-data’ kullanıcısı ve grubuyla değiştirin.

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

Nextcloud ‘/var/www/nextcloud’ dizini altına indirildi ve web kök dizini olacak.

Nextcloud için Nginx Sanal Ana Bilgisayarını Yapılandırma

Bu adımda, nextcloud için nginx sanal ana bilgisayarını yapılandıracağız. Nextcloud’u HTTPS bağlantısı altında çalışacak şekilde yapılandıracağız ve HTTP bağlantısını otomatik olarak güvenli HTTPS bağlantısına zorlayacağız. Şimdi ‘/etc/nginx/sites-available’ dizinine gidin ve ‘nextcloud’ adlı yeni bir sanal ana bilgisayar dosyası oluşturun.

cd /etc/nginx/sites-available/
nano cloud

Aşağıdaki nextcloud sanal ana bilgisayar yapılandırmasını yapıştırın.

NOT: server name ve SSL sertifika kısmını domaine bağlayacağız dolayısıyla ben “cloud.yahyakadir.name.tr” yazıyorum.

upstream php-handler {
#server 127.0.0.1:9000;
server unix:/run/php/php7.1-fpm.sock;
}
server {
listen 80;
listen [::]:80;
server_name cloud.yahyakadir.name.tr;
# enforce https
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name cloud.yahyakadir.name.tr;
ssl_certificate /etc/letsencrypt/live/cloud.yahyakadir.name.tr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/cloud.yahyakadir.name.tr/privkey.pem;
# Add headers to serve security related headers
# Before enabling Strict-Transport-Security headers please read into this
# topic first.
# add_header Strict-Transport-Security "max-age=15552000;
# includeSubDomains; preload;";
#
# WARNING: Only add the preload option once you read about
# the consequences in https://hstspreload.org/. This option
# will add the domain to a hardcoded list that is shipped
# in all major browsers and getting removed from this list
# could take several months.
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
# Path to the root of your installation
root /var/www/nextcloud/;
location = /robots.txt {
allow all;
log_not_found off;
access_log on;
}
# The following 2 rules are only needed for the user_webfinger app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
#rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json
# last;
location = /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
set max upload size 10G
client_max_body_size 512M;
fastcgi_buffers 64 4K;
# Enable gzip but do not remove ETag headers
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
# Uncomment if your server is built with the ngx_pagespeed module
# This module is currently not supported.
#pagespeed off;
location / {
rewrite ^ /index.php$uri;
}
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
deny all;
}
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}
location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\.php(?:$|/) {
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param HTTPS on;
#Avoid sending the security headers twice
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
location ~ ^/(?:updater|ocs-provider)(?:$|/) {
try_files $uri/ =404;
index index.php;
}
# Adding the cache control header for js and css files
# Make sure it is BELOW the PHP block
location ~ \.(?:css|js|woff|svg|gif)$ {
try_files $uri /index.php$uri$is_args$args;
add_header Cache-Control "public, max-age=15778463";
# Add headers to serve security related headers (It is intended to
# have those duplicated to the ones above)
# Before enabling Strict-Transport-Security headers please read into
# this topic first.
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
#
# WARNING: Only add the preload option once you read about
# the consequences in https://hstspreload.org/. This option
# will add the domain to a hardcoded list that is shipped
# in all major browsers and getting removed from this list
# could take several months.
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
# Optional: Don't log access to assets
access_log on;
}
location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
try_files $uri /index.php$uri$is_args$args;
# Optional: Don't log access to other assets
access_log on;
}
}

Kaydedip çıkıyoruz.

Sanal ana bilgisayarı etkinleştirin ve yapılandırmayı test edin ve hata olmadığından emin olun.

ln -s /etc/nginx/sites-available/cloud /etc/nginx/sites-enabled/
nginx -t

Şimdi aşağıdaki systemctl komutunu kullanarak PHP7.1-FPM servisini ve nginx servisini yeniden başlatın.

systemctl restart nginx
systemctl restart php7.1-fpm

UFW Güvenlik Duvarı’nı yapılandırma

Bu derste, güvenlik duvarını açacağız ve Ubuntu için UFW güvenlik duvarını kullanacağız. Ufw güvenlik duvarını etkinleştirin.

Bu derste, güvenlik duvarını açacağız ve Ubuntu için UFW güvenlik duvarını kullanacağız. Ufw güvenlik duvarını etkinleştirin.

ufw enable

UFW güvenlik duvarını başlatmak ve etkinleştirmek için ‘y’ yazın ve Enter’a basın. Şimdi UFW güvenlik duvarı listesine yeni SSH, HTTP ve HTTPS ekleyin.

ufw allow ssh
ufw allow http
ufw allow https

Aşağıdaki komutu kullanarak UFW güvenlik duvarındaki izin verilen liste portunu kontrol edin.

ufw status

Sunucu kurulumu bitti. Artık web tarayıcısından domain adresinize giriş yaparak sunucu kurulumunu tamamlayabiliriz.

CEVAP VER

Please enter your comment!
Please enter your name here