GNU/Linux >> Belajar Linux >  >> Ubuntu

Cara Menginstal Nextcloud dengan Nginx dan Lets Encrypt SSL di Ubuntu 20.04 LTS

Nextcloud adalah perangkat lunak seperti Dropbox (Open Source) gratis, cabang dari proyek ownCloud. Nextcloud ditulis dalam PHP dan JavaScript, mendukung banyak sistem database seperti MySQL/MariaDB, PostgreSQL, Oracle Database, dan SQLite.

Untuk menjaga sinkronisasi file Anda antara Desktop dan server Anda sendiri, Nextcloud menyediakan aplikasi untuk desktop Windows, Linux, dan Mac dan aplikasi seluler untuk Android dan iOS. Nextcloud bukan hanya tiruan Dropbox, ia menyediakan fitur tambahan seperti Kalender, Kontak, Jadwalkan tugas, dan streaming media dengan Ampache, dll.

Dalam tutorial ini, kami akan menunjukkan cara menginstal dan mengkonfigurasi rilis Nextcloud terbaru (pada saat penulisan ini, rilis terbaru adalah 18) di server Ubuntu 20.04. Kami akan menjalankan Nextcloud dengan server web Nginx dan PHP7.4-FPM dan menggunakan server MariaDB sebagai sistem database.

Prasyarat

  • Ubuntu 20.04
  • Hak istimewa root

Apa yang akan kami lakukan

  1. Instal Server Web Nginx
  2. Instal dan Konfigurasi PHP7.4-FPM
  3. Instal dan Konfigurasi Server MySQL
  4. Buat SSL Letsencrypt
  5. Unduh Nextcloud 18
  6. Konfigurasi Nginx Virtual Host untuk Nextcloud
  7. Konfigurasi Firewall UFW
  8. Pasca-Instalasi Nextcloud

Langkah 1 - Instal Nginx Webserver

Langkah pertama yang akan kita lakukan dalam panduan cloud selanjutnya ini adalah menginstal server web Nginx. Kami akan menggunakan server web Nginx sebagai ganti server web Apache.

Masuk ke server dan perbarui repositori, lalu instal server web Nginx menggunakan perintah apt seperti yang ditunjukkan di bawah ini.

sudo apt update
sudo apt install nginx -y

Setelah penginstalan selesai, mulai layanan Nginx dan aktifkan layanan untuk diluncurkan setiap kali saat sistem boot menggunakan systemctl.

systemctl start nginx
systemctl enable nginx

Layanan Nginx aktif dan berjalan, periksa menggunakan perintah berikut.

systemctl status nginx

Dan Anda akan mendapatkan hasil seperti di bawah ini.

Hasilnya, server web Nginx telah terinstal di Ubuntu 20.04.

Langkah 2 - Instal dan Konfigurasi PHP7.4-FPM

Secara default, Ubuntu 20.04 hadir dengan versi default PHP 7.4.

Instal paket PHP dan PHP-FPM yang dibutuhkan oleh Nextcloud menggunakan perintah apt di bawah ini.

sudo apt install php-fpm php-curl php-cli php-mysql php-gd php-common php-xml php-json php-intl php-pear php-imagick php-dev php-common php-mbstring php-zip php-soap php-bz2 -y

Setelah instalasi selesai, kita akan mengkonfigurasi file php.ini untuk php-fpm dan php-cli.

Buka direktori '/etc/php/7.4'.

cd /etc/php/7.4/

Edit file php.ini untuk php-fpm dan php-cli menggunakan vim.

vim fpm/php.ini
vim cli/php.ini

Batalkan komentar pada baris 'date.timezone' dan ubah nilainya dengan zona waktu Anda sendiri.

date.timezone = Asia/Jakarta

Batalkan komentar pada baris 'cgi.fix_pathinfo' dan ubah nilainya menjadi '0'.

cgi.fix_pathinfo=0

Simpan dan keluar.

Selanjutnya, edit konfigurasi pool php-fpm 'www.conf'.

vim fpm/pool.d/www.conf

Batalkan komentar pada baris di bawah ini.

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

Simpan dan keluar.

Mulai ulang layanan PHP7.4-FPM dan aktifkan untuk diluncurkan setiap kali sistem boot.

systemctl restart php7.4-fpm
systemctl enable php7.4-fpm

Sekarang periksa layanan PHP-FPM menggunakan perintah berikut.

ss -xa | grep php
systemctl status php7.4-fpm

Dan Anda akan mendapatkan php-fpm aktif dan berjalan di bawah file kaus kaki '/run/php/php7.4-fpm.sock'.

Langkah 3 - Instal dan Konfigurasi Server MariaDB

Pada langkah ini, kita akan menginstal versi MariaDB terbaru dan membuat database baru untuk instalasi cloud berikutnya. Paket MariaDB versi terbaru tersedia di repositori secara default.

Instal versi terbaru server MariaDB menggunakan perintah apt di bawah ini.

sudo apt install mariadb-server -y

Setelah penginstalan selesai, mulai layanan MariaDB dan aktifkan untuk diluncurkan setiap kali sistem boot.

systemctl start mariadb
systemctl enable mariadb

Sekarang periksa layanan MySQL menggunakan perintah berikut.

systemctl status mariadb

Server MariaDB aktif dan berjalan di Ubuntu 20.04.

Selanjutnya, kita akan mengkonfigurasi password root MariaDB menggunakan perintah 'mysql_secure_installation'.

Jalankan perintah berikut.

mysql_secure_installation

Dan Anda akan dimintai beberapa konfigurasi Server MariaDB. Juga, ketikkan kata sandi root baru untuk Server MariaDB.

Enter current password for root (enter for none): Press Enter
Set root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Dan kata sandi root MariaDB telah disiapkan.

Selanjutnya, kita akan membuat database baru untuk instalasi nextcloud. Kami akan membuat database baru bernama 'nextcloud_db' dengan pengguna 'nextclouduser' dan sandi '[email protected]'.

Masuk ke shell MySQL sebagai pengguna root dengan perintah mysql.

mysql -u root -p
TYPE THE MYSQL ROOT PASSWORD

Sekarang buat database dan pengguna dengan kata sandi dengan menjalankan kueri MySQL berikut.

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

Dan database dan pengguna baru untuk instalasi cloud berikutnya telah dibuat.

Instalasi dan konfigurasi MariaDB untuk nextcloud telah selesai.

Langkah 4 - Buat SSL Letsencrypt

Dalam tutorial ini, kita akan mengamankan nextcloud menggunakan SSL gratis dari Letsencrypt, dan kita akan membuat file sertifikat menggunakan alat letsencrypt.

Jika Anda tidak memiliki nama domain atau menginstal nextcloud di komputer lokal, Anda dapat membuat sertifikat yang Ditandatangani Sendiri menggunakan OpenSSL.

Instal alat 'letsencrypt' menggunakan perintah apt di bawah ini.

sudo apt install certbot -y

Setelah instalasi selesai, hentikan layanan nginx.

systemctl stop nginx

Selanjutnya, kami akan membuat sertifikat SSL untuk nama domain kami 'nextcloud.hakase-labs.io' menggunakan baris perintah cerbot. Jalankan perintah di bawah ini.

certbot certonly --standalone -d cloud.hakase-labs.io

Anda akan dimintai alamat email, dan itu digunakan untuk pemberitahuan perpanjangan. Untuk perjanjian TOS Letsencrypt, ketik 'A' untuk menyetujui dan untuk alamat email berbagi, Anda dapat mengetik 'N' untuk Tidak.

Jika sudah selesai maka akan mendapatkan hasil seperti gambar dibawah ini.

Sertifikat SSL Letsencrypt untuk nama domain netxcloud telah dibuat, semuanya terletak di direktori '/etc/letsencrypt/live/domain-anda'.

Langkah 5 - Unduh Nextcloud

Sebelum mendownload source code nextcloud, pastikan paket unzip sudah terinstall di sistem. Jika Anda tidak memiliki paket, instal menggunakan perintah apt di bawah ini.

sudo apt install wget unzip zip -y

Sekarang buka direktori '/var/www' dan unduh versi terbaru Nextcloud menggunakan perintah berikut.

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

Ekstrak kode sumber Nextcloud dan Anda akan mendapatkan direktori baru 'netxcloud', ubah kepemilikan direktori nextcloud menjadi pengguna 'www-data'.

unzip -qq latest.zip
sudo chown -R www-data:www-data /var/www/nextcloud

Akibatnya, Nextcloud telah diunduh di bawah direktori '/var/www/nextcloud', dan itu akan menjadi direktori root web.

Langkah 6 - Konfigurasikan Virtual Host Nginx untuk Nextcloud

Pada langkah ini, kita akan mengonfigurasi virtual host nginx untuk nextcloud. Kami akan mengonfigurasi nextcloud untuk berjalan di bawah koneksi HTTPS dan akan memaksa koneksi HTTP secara otomatis ke koneksi HTTPS yang aman.

Sekarang buka direktori '/etc/nginx/sites-available' dan buat file host virtual baru 'nextcloud'.

cd /etc/nginx/sites-available/
vim nextcloud

Di sana, rekatkan konfigurasi host virtual nextcloud berikut.

upstream php-handler {
    #server 127.0.0.1:9000;
    server unix:/var/run/php/php7.4-fpm.sock;
}

server {
    listen 80;
    listen [::]:80;
    server_name cloud.hakase-labs.io;
    # enforce https
    return 301 https://$server_name:443$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name cloud.hakase-labs.io;

    # Use Mozilla's guidelines for SSL/TLS settings
    # https://mozilla.github.io/server-side-tls/ssl-config-generator/
    # NOTE: some settings below might be redundant
    ssl_certificate /etc/letsencrypt/live/cloud.hakase-labs.io/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/cloud.hakase-labs.io/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=15768000; includeSubDomains; preload;" always;
    #
    # 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 Referrer-Policy "no-referrer" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-Download-Options "noopen" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Permitted-Cross-Domain-Policies "none" always;
    add_header X-Robots-Tag "none" always;
    add_header X-XSS-Protection "1; mode=block" always;

    # Remove X-Powered-By, which is an information leak
    fastcgi_hide_header X-Powered-By;

    # Path to the root of your installation
    root /var/www/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;

    # The following rule is only needed for the Social app.
    # Uncomment it if you're planning to use this app.
    #rewrite ^/.well-known/webfinger /public.php?service=webfinger last;

    location = /.well-known/carddav {
      return 301 $scheme://$host:$server_port/remote.php/dav;
    }
    location = /.well-known/caldav {
      return 301 $scheme://$host:$server_port/remote.php/dav;
    }

    # set max upload size
    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 build with the ngx_pagespeed module
    # This module is currently not supported.
    #pagespeed off;

    location / {
        rewrite ^ /index.php;
    }

    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\/.+|oc[ms]-provider\/.+)\.php(?:$|\/) {
        fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
        set $path_info $fastcgi_path_info;
        try_files $fastcgi_script_name =404;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_param HTTPS on;
        # Avoid sending the security headers twice
        fastcgi_param modHeadersAvailable true;
        # Enable pretty urls
        fastcgi_param front_controller_active true;
        fastcgi_pass php-handler;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }

    location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
        try_files $uri/ =404;
        index index.php;
    }

    # Adding the cache control header for js, css and map files
    # Make sure it is BELOW the PHP block
    location ~ \.(?:css|js|woff2?|svg|gif|map)$ {
        try_files $uri /index.php$request_uri;
        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;" always;
        #
        # 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 Referrer-Policy "no-referrer" always;
        add_header X-Content-Type-Options "nosniff" always;
        add_header X-Download-Options "noopen" always;
        add_header X-Frame-Options "SAMEORIGIN" always;
        add_header X-Permitted-Cross-Domain-Policies "none" always;
        add_header X-Robots-Tag "none" always;
        add_header X-XSS-Protection "1; mode=block" always;

        # Optional: Don't log access to assets
        access_log off;
    }

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

Simpan dan keluar.

Aktifkan virtual host dan uji konfigurasi, dan pastikan tidak ada kesalahan.

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

Sekarang restart layanan PHP7.4-FPM dan layanan nginx menggunakan perintah systemctl di bawah ini.

systemctl restart nginx
systemctl restart php7.4-fpm

Konfigurasi virtual host Nginx untuk nextcloud telah dibuat.

Langkah 7 - Konfigurasi Firewall UFW

Dalam tutorial ini, kita akan mengaktifkan firewall, dan kita akan menggunakan firewall UFW untuk Ubuntu.

Tambahkan SSH, HTTP, dan HTTPS ke daftar firewall UFW menggunakan perintah di bawah ini.

for svc in ssh http https
do
ufw allow $svc
done

Setelah itu, aktifkan firewall UFW dan periksa layanan dan port yang diizinkan.

ufw enable
ufw status numbered

Dan Anda akan mendapatkan HTTP port 80 dan HTTPS port 443 ada dalam daftar.

Langkah 8 - Pasca-Instalasi Nextcloud

Buka browser web Anda dan ketik alamat URL nextcloud.

http://cloud.hakase-labs.io/

Dan Anda akan diarahkan ke koneksi HTTPS yang aman.

Di halaman Atas, kita perlu membuat pengguna admin untuk cloud berikutnya, ketikkan kata sandi pengguna admin. Pada konfigurasi 'Data folder', ketik path lengkap direktori 'data' '/var/www/nextcloud/data'.

Gulir halaman ke bawah, dan Anda akan mendapatkan konfigurasi database. Ketik info database yang telah kita buat di langkah 3 lalu klik tombol 'Finish Setup'.

Jika Anda mencentang opsi 'Instal aplikasi yang direkomendasikan', Anda akan mendapatkan halaman berikut.

Nextcloud sedang menginstal aplikasi tambahan yang direkomendasikan untuk Anda.

Dan setelah instalasi selesai, Anda akan mendapatkan Dashboard Nextcloud seperti di bawah ini.

Instalasi Nextcloud 18 dengan server web Nginx dan database MySQL di Ubuntu 20.04 telah berhasil diselesaikan.


Ubuntu
  1. Cara Menginstal Nextcloud dengan Nginx di Ubuntu 18.04 LTS

  2. Cara Menginstal Magento 2 dengan Nginx dan Mengenkripsi SSL di Ubuntu 20.04 LTS

  3. Cara Menginstal Shopware dengan NGINX dan Mari mengenkripsi di Ubuntu 18.04 LTS

  1. Instal Automad CMS dengan Nginx dan Lets Encrypt SSL di Ubuntu 18.04

  2. Cara Install Grav CMS dengan Nginx dan Lets Encrypt di Ubuntu 18.04 LTS

  3. Cara Menginstal X-Cart dengan Nginx dan Mengenkripsi SSL di Ubuntu 18.04 LTS

  1. Cara Menginstal Drupal dengan Nginx dan Mengenkripsi SSL di Ubuntu 20.04 LTS

  2. Cara menginstal Webmin dan mengamankannya dengan Lets Encrypt SSL di Ubuntu 20.04 LTS

  3. Cara Menginstal Drupal 9 dengan Nginx dan Mengenkripsi SSL di Debian 10