Ubuntu 16.04 LEMP Stack üzerine Adım Adım Nextcloud Server Kurulumu

Adım 1: Download NextCloud

NextCloud server zip arşivini sunucunuza indirin. Bu yazının yazıldığı sırada en son kararlı sürüm 18.0 idi. Sürüm numarasını değiştirmeniz gerekebilir. https://nextcloud.com/install adresine gidin ve en son sürüme göz atmak için indirme düğmesini tıklayın.

[root@srv1 ~]# wget https://download.nextcloud.com/server/releases/nextcloud-18.0.0.zip

unzip yok ise kurun ve arşivi açın:

[root@srv1 ~]# apt install unzip
[root@srv1 ~]# unzip nextcloud-18.0.0.zip

Arşiv açıldığında bulunulan dizinde nextcloud adlı yeni bir dizin oluşturulur. Yeni dizini ve tüm içeriğini Nginx web sunucusunun kök dizini nere ise oraya taşıyın:

[root@srv1 ~]# mv nextcloud /usr/share/nginx/

Nginx kullanıcısını (www-data) nextcloud dizininin sahibi olarak ayarlamanız gerekir.

[root@srv1 ~]# chown www-data:www-data /usr/share/nginx/nextcloud/ -R

Adım 2: MariaDB de Veritabanını Oluşturma

MariaDB de nextcloud için database ve user oluşturmak user’ın yetkilerini ayarlamak için aşağıdaki komutları sırayla yürütün.

[root@srv1 ~]# mysql -u root
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 254639
Server version: 0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

mysql> create database nextcloud;
mysql> create user nextclouduser@localhost identified by 'your-password';
mysql> grant all privileges on nextcloud.* to nextclouduser@localhost identified by 'your-password';
mysql> flush privileges;
mysql> exit;

Adım 3: MariaDB için Binary Loging Ayarlamaları

Mysqld yapılandırma dosyasını düzenleyin.

[root@srv1 ~]# vi /etc/mysql/mariadb.conf.d/50-server.cnf

Aşağıdaki satırları [mysqld] bölümü içerisine ekleyin.

...
log-bin        = /var/log/mysql/mariadb-bin
log-bin-index  = /var/log/mysql/mariadb-bin.index
binlog_format  = mixed
...

Dosyayı kaydedip kapatın. Ardından MariaDB hizmetini yeniden başlatın.

[root@srv1 ~]# systemctl restart mysql

Adım 4: Nextcloud için Nginx Site Enable Dosyası Oluşturma

[root@srv1 ~]# vi /etc/nginx/site-available/nextcloud.conf

Aşağıdaki içeriği bu dosyaya yapıştırın. Bazı kısımları kendi verilerinizle değiştirmeyi unutmayın. Domain adınız veya php versiyonunuz gibi…

nextcloud.yourdomain.com;

unix:/run/php/php7.3-fpm.sock;

Alan adınız için A kaydı ayarlamayı unutmayın. DNS ‘lerinizin girildiğini ve sunucu ip ‘nizi çözdüğünü varsayıyoruz.

server {
    listen 80;
    server_name nextcloud.yourdomain.com;

    # Add headers to serve security related headers
    add_header Referrer-Policy no-referrer;
    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 /usr/share/nginx/nextcloud/;

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # 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;
    }

    location ~ /.well-known/acme-challenge {
      allow all;
    }

    # set max upload size
    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

    # Disable gzip to avoid the removal of the ETag header
    gzip off;

    # Uncomment if your server is build with the ngx_pagespeed module
    # This module is currently not supported.
    #pagespeed off;

    error_page 403 /core/templates/403.php;
    error_page 404 /core/templates/404.php;

    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/.+|core/templates/40[34])\.php(?:$|/) {
       include fastcgi_params;
       fastcgi_split_path_info ^(.+\.php)(/.*)$;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param PATH_INFO $fastcgi_path_info;
       #Avoid sending the security headers twice
       fastcgi_param modHeadersAvailable true;
       fastcgi_param front_controller_active true;
       fastcgi_pass unix:/run/php/php7.3-fpm.sock;
       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)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "public, max-age=7200";
        # Add headers to serve security related headers (It is intended to
        # have those duplicated to the ones above)
        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 off;
   }

   location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        # Optional: Don't log access to other assets
        access_log off;
   }
}

Dosyayı enabled klasörüne linkleyip, konfigrasyonu test edip nginx servisini reload ediniz:

[root@srv1 ~]# cd /etc/nginx/site-enabled/
[root@srv1 ~]# ln -s ../site-available/nextcloud.conf .
[root@srv1 ~]# nginx -t
[root@srv1 ~]# systemctl reload nginx

Adım 5: Yüklenecek ve Aktif edilecek PHP Modülleri

Nextcloud kararlı ve sorunsuz çalışma için aşağıdaki php modüllerine ihtiyaç duyar, bunları yüklemelisiniz: Php versiyonunuz 7.1, 7.2, 7.3 ve ya 7.4 olabilir bunlar için karşılık olan paketi bulup yükleyiniz.

[root@srv1 ~]# apt-get install php7.3 php7.3-cli php7.3-fpm php7.3-json php7.3-pdo php7.3-mysql php7.3-zip php7.3-gd  php7.3-mbstring php7.3-curl php7.3-xml php7.3-bcmath php7.3-json php7.3-cgi php7.3-ldap php7.3-intl php7.3-imagick

Adım 6: Domaininiz için HTTPS ‘in Aktif Edilmesi

Artık Nextcloud kurulumunuz için alan adını girerek tarayıcınızdaki Nextcloud web kurulum sihirbazına erişebilirsiniz. Fakat sitenizin https çalışması önemli bir konudur. Bunun için ücretsiz 3 aylık(otomatik uzatılabiliyor) güvenilir ssl sertifikası dağıtımı yapan Let’s Encrypt Authority X3 sertifikasını kullanmanızı şiddetle tevsiye ediyoruz.

Kurulum adımları aşağıda belirtilmiştir:

[root@srv1 ~]# apt install software-properties-common
[root@srv1 ~]# add-apt-repository ppa:certbot/certbot
[root@srv1 ~]# apt update
[root@srv1 ~]# apt install certbot python-certbot-nginx

Ayrıca sunucunuzda bazı paket versiyonlarınında yükseltilmesi gerekiyor olabilir.

[root@srv1 ~]# apt upgrade

Nginx’in certbot eklentisini kullanarak ücretsiz TLS sertifikası almak için aşağıdaki komutu çalıştırın.

[root@srv1 ~]# certbot --nginx --agree-tos --redirect --staple-ocsp --email your-email-address -d nextcloud.yourdomain.com

Artık söylememe gerek var mı bilemiyorum, your-email-address ve nextcloud.your-domain.com yerine sizin bilgilerinizin yazılması gerekiyor.

Kısa bir süre sonra çıktı sonunda aşağıdakini görüyorsanız her şey tamam demektir.

Donating to EFF: …

Sertifikanızı her ay ücretsiz yenileyebilirisiniz. Ben bunun için crontab da aşağıdaki komutu kullanıyorum.

[root@srv1 ~]# crontab -e
0 0 1 * *       sudo certbot renew --dry-run

Son Adım: Data Klasör Ayarı ve Kurulumu Bitirme

Artık HTTPS bağlantısını kullanarak Nextcloud web kurulum sihirbazına erişebilirsiniz. Yüklemeyi tamamlamak için WEB Erişimi sayfasında bir yönetici hesabı oluşturmanız, Nextcloud veri klasörünün yolunu girmeniz, daha önce oluşturulan veritabanı ayrıntılarını girmeniz gerekecektir.

Veri klasörü, kullanıcıların dosyalarının saklandığı yerdir. Güvenlik için, veri dizinini nextcloud web kökünün dışına yerleştirmek en iyisidir. Dolayısıyla, kullanıcıların dosyalarını /usr/share/nginx/nextcloud/data/ altında depolamak yerine, aşağıdaki komutla oluşturulabilecek /usr/share/nginx/nextcloud-data olarak değiştirebiliriz:

[root@srv1 ~]# mkdir /usr/share/nginx/nextcloud-data

Sonra nginx kullanıcısının (www-data) veri dizinine yazma iznine sahip olduğundan emin olun.

[root@srv1 ~]# chown www-data: www-data /usr/share/nginx/nextcloud-data -R

Kurulum tamamlandığında, Nextcloud’un Web arayüzünü göreceksiniz. Özel bulut depolama alanınızı kullanmaya başlayabilirsiniz.

Kolay Gelsin…

Yeteneklerini kullanarak başarılı olan insanlarla bir sorunum yok, sadece başarının en üst hedef olmadığını düşünüyorum. Özgürlük, bilginin paylaşılması - genişlemesi başarının, kişiselliğin ötesinde şeyler. Kişisel başarı yanlış değil ama etkisi sınırlanmış, eğer gerektiği kadarını elde ettiyseniz hala bunun için açlık duymak ayıp, tabii doğruluk, güzellik ve adalet için durum tam tersi. / Richard Stallman