Cara Install Nextcloud 15 Server pada Debian 9 dan Nginx Web Server

nextcloud Nov 18, 2019

Sebelum menginstall Nextcloud Server saya lebih dulu menginstall Owncloud Server, karena dulu lagi penasaran dengan VPS (virtual private server), sehingga semua mau diinstall :D. Nextcloud merupakan fork dari Owncloud, banyak aplikasi yang saling compatible antar keduanya, bahkan saya pernah menggunakan owncloud client untuk koneksi ke nextcloud server. namun untuk sekarang saya lebih merekomendasikan menggunakan nextcloud client pada artikel Install Nextcloud Client pada Archlinux untuk nextcloud server agar tidak terjadi kegagalan yang tidak diinginkan.

Jika anda menggunakan VPS Cloud Server seperti DigitalOcean, Vultr dan lainnya, akan sangat mudah untuk install nextcloud server dengan Install One Click Apps seperti Vultr berikut :

vultr Click Apps

Installasi Nextcloud 15 pada Debian 9

Namun jika server anda sudah jalan dan sudah terconfigurasi untuk website, atau anda ingin menginstall versi Nextcloud paling baru, ada baiknya diinstall secara manual. untuk installasi saya demokan dengan debian 9, untuk distro lain tidak jauh berbeda, dan web server menggunakan nginx, skip saja perintah-perintah yang sudah pernah anda jalankan, berikut langkahnya :

1. Update System

Login terlebih dahulu ke Instance anda dengan SSH, lalu lakukan Update System

apt update && apt upgrade

2. Install Nginx

Install Nginx Web Server, cara lengkap sudah ada pada artikel Install Nginx (Engine X) pada server debian 9 stretch.

#install nginx terbaru
sudo echo "deb http://nginx.org/packages/mainline/debian/ stretch nginx
deb-src http://nginx.org/packages/mainline/debian/ stretch nginx" > /etc/apt/sources.list.d/nginx.list

#add key
sudo wget -qO - http://nginx.org/keys/nginx_signing.key | sudo apt-key add -

#update debian
sudo apt update

#remove nginx debian
sudo apt remove nginx-common

#install nginx terbaru
sudo apt install nginx

#cek versi
sudo nginx -v
Installasi Nginx terbaru

3 Install PHP 7.2 FPM

Nextcloud merekomendasikan menggunakan PHP 7, untuk installasi lengkap PHP7.2-FPM sudah ada pada artikel Installasi PHP 7 dengan module PHP-FPM dan Nginx pada Debian 9 Stretch.

#pertama update dulu package repository
sudo apt-get update

#install php 7.2
sudo apt-get install php7.2

#install php-cli dan php-fpm untuk php 7.2
sudo apt-get install php7.2-cli php7.2-fpm

#biasanya letaknya pada direktori '/etc/php/7.2/' coba dicek 
sudo ls /etc/php/7.2

#isi foldernya
apache2  cli  fpm  mods-available
Installasi php 7.2

4. Install MySQL server

Untuk installasi Mysql secara lengkap pada artikel Cara Install Mysql Community Server Edition 5.7 pada Debian Server 9.

#cek list apt-config terbaru
https://dev.mysql.com/downloads/repo/apt/

#download file
wget https://dev.mysql.com/get/mysql-apt-config_0.8.10-1_all.deb

#install dan pilih versi mysql yang ingin diinstall
dpkg -i mysql-apt-config_0.8.10-1_all.deb

#update repository
apt-get update

#install mysql-community-server
apt-get install mysql-community-server

#install db dan secure installation
sudo mysql_install_db
sudo mysql_secure_installation
Installasi mysql server

5. Download Nextcloud 15 Terbaru

Untuk installasi Nextcloud Server pada debian 9 bisa ikuti langkah berikut :

#download nextcloud
sudo wget https://download.nextcloud.com/server/releases/nextcloud-15.0.2.zip

#extract nextcloud server
sudo unzip nextcloud-15.0.2.zip -d /var/www/

#rubah owner dan group
sudo chown -R www-data:www-data /var/www/nextcloud/

#pindah ke nextcloud
cd /var/www/nextcloud

#install nextcloud via vli
sudo -u www-data php /var/www/nextcloud/occ  maintenance:install --database "mysql" --database-name "nextcloud"  --database-user "user_nextcloud" --database-pass "password_mysql" --admin-user "admin" --admin-pass "password_admin"
installasi nextcloud 15

jika kesulitan install via cli, skip langkah untuk install dengan occ script,  lakukan installasi Via GUI Web Interface setelah kita setting Nginx VirtualHost untuk Nextcloud pada langkah setelah ini.

6. Membuat Nginx Virtual Host untuk Nextcloud

untuk membuat virtualhost nextcloud buat file baru di nginx config, anda bisa membuat nextcloud sebagai subdomain ataupun subfolder, namun pada langkah ini saya hanya akan mencontohkan menggunakan subdomain, silahkan lihat dokumentasi lengkap nextcloud mengenai berbagai macam opsi lainnya disini. berikut langkah membuat virtualhost nginx :

#buat untuk subdomain cloud.komputerkampus.com
sudo nano /etc/nginx/sites-available/cloud.komputerkampus.com

#isikan configurasi berikut
upstream php-handler {
      #jika menggunakan socket
      server unix:/var/run/php/php7.2-fpm.sock;
      #jika menggunakan tcp dan port
      #server 127.0.0.1:9072;
}

#port 80 non https redirect ke https
server {
    listen 80;
    listen [::]:80;
    server_name cloud.komputerkampus.com www.cloud.komputerkampus.com;
    return 301 https://$server_name$request_uri;
}

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        server_name cloud.komputerkampus.com www.cloud.komputerkampus.com;
        #tambahkan sertifikat ssl, konfigurasi dengan letsencrypt
        ssl_certificate /etc/letsencrypt/live/cloud.komputerkampus.com/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/cloud.komputerkampus.com/privkey.pem; # managed by Certbot

        add_header Strict-Transport-Security "max-age=15552000; includeSubDomains";
        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;
        add_header Referrer-Policy no-referrer;
        fastcgi_hide_header X-Powered-By;

        root /var/www/nextcloud;

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

        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 {
           allow all;
           default_type "text/plain";
        }

        client_max_body_size 16G;
        fastcgi_buffers 64 4K;

        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;

        location / {
          rewrite ^ /index.php$request_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;
        }

        location ~ .(?:css|js|woff|svg|gif)$ {
           try_files $uri /index.php$request_uri;
           add_header Cache-Control "public, max-age=15778463";
           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;
           add_header Referrer-Policy no-referrer;
           access_log off;
        }

        location ~ .(?:png|html|ttf|ico|jpg|jpeg)$ {
           try_files $uri /index.php$request_uri;
           access_log off;
        }

}
nginx virtualhost nextcloud

Buat symbolic link pada site-available ke site-enabled

sudo ln -s /etc/nginx/sites-available/cloud.komputerkampus.com /etc/nginx/sites-enabled

selesai untuk konfigurasi nginx virtualhost, silahkan anda restart nginx service dengan perintah :

sudo service nginx restart

tambahkan trusted domain pada config di nextcloud

sudo nano /var/www/nextcloud/config/config.php

tambahkan data berikut :

 'trusted_domains' =>
  array (
    0 => 'localhost',
    1 => 'cloud.komputerkampus.com',
  ),

kemudian akses laman https://cloud.komputerkampus.com namun pastikan subdomain sudah dibuat pada DNS management dan SSL Sertificate sudah terinstall untuk domain bersangkutan.

M. Najamudin Ridha

Penikmat coffe latte ICE, apalagi tanpa gula. Menyukai teknologi open source, terutama yang berbasis web dan mobile, senang mencoba hal - hal seperti linux, DevOps, database dan programming