Nextcloud adalah perangkat lunak sumber terbuka untuk menyimpan dan menyinkronkan data Anda di beberapa perangkat. Anda dapat menganggapnya sebagai klon Dropbox Anda sendiri. Namun selain menyimpan file, ia juga menyediakan fitur tambahan seperti Kalender, Kontak, Tugas Terjadwal, streaming media, dll.
Nextcloud menyediakan aplikasi untuk Windows, Linux, MacOS, dan aplikasi seluler untuk Android dan iOS yang dapat Anda gunakan untuk menyinkronkan file di berbagai perangkat Anda.
Dalam tutorial ini, kita akan belajar cara menginstal dan mengkonfigurasi Nextcloud di server berbasis Fedora 32. Kami juga akan menginstal server web Nginx bersama dengan PHP 7.4 dan MariaDB
Prasyarat
-
Server yang menjalankan Fedora 32.
-
Pengguna sudo non-root.
-
Pastikan semuanya diperbarui.
$ sudo dnf update
-
Paket penting.
$ sudo dnf install wget curl bzip2 nano unzip policycoreutils-python-utils -y
Beberapa paket ini mungkin sudah ada di sistem Anda.
Konfigurasi Firewall
Langkah pertama adalah mengkonfigurasi firewall. Server Fedora dilengkapi dengan firewall Firewalld yang telah diinstal sebelumnya.
Periksa apakah firewall sedang berjalan.
$ sudo firewall-cmd --state
running
Periksa layanan/port yang diizinkan saat ini.
$ sudo firewall-cmd --permanent --list-services
Ini akan menunjukkan output berikut.
dhcpv6-client mdns ssh
Izinkan port HTTP dan HTTPS.
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
Periksa kembali status firewall.
$ sudo firewall-cmd --permanent --list-services
Anda akan melihat keluaran serupa.
dhcpv6-client http https mdns ssh
Muat Ulang Firewall.
$ sudo systemctl reload firewalld
Instal PHP
Fedora 32 secara default dikirimkan dengan PHP 7.4 tetapi untuk memiliki repositori PHP yang diperbarui, kami akan menambahkan repositori REMI.
Instal repositori REMI yang merupakan repositori Fedora resmi untuk menginstal paket PHP.
$ sudo dnf -y install https://rpms.remirepo.net/fedora/remi-release-32.rpm
Aktifkan remi
repositori dan nonaktifkan remi-modular
gudang. Ini memungkinkan repositori yang diperlukan untuk menginstal paket PHP 7.4.
$ sudo dnf config-manager --set-enabled remi
$ sudo dnf config-manager --set-disabled remi-modular
Instal PHP 7.4 bersama dengan beberapa paket tambahan.
$ sudo dnf install php-fpm php-cli php-gd php-mbstring php-intl php-mysqlnd php-imagick php-zip php-json php-process php-xml php-bcmath php-gmp php-ftp php-smbclient php-opcache
Periksa apakah PHP berfungsi dengan benar.
$ php --version
PHP 7.4.11 (cli) (built: Sep 29 2020 10:17:06) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.11, Copyright (c), by Zend Technologies
Konfigurasi PHP
Buka file /etc/php-fpm.d/www.conf
.
$ sudo nano /etc/php-fpm.d/www.conf
Kita perlu mengatur pengguna/grup proses PHP Unix ke nginx . Temukan user=apache
dan group=apache
baris dalam file dan ubah ke nginx.
...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...
Batalkan komentar variabel lingkungan PHP di bawah ini.
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
Batalkan komentar konfigurasi opcache pada baris terakhir.
php_value[opcache.file_cache] = /var/lib/php/opcache
Simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.
Sekarang edit konfigurasi opcache PHP /etc/php.d/10-opcache.ini
.
$ sudo nano /etc/php.d/10-opcache.ini
Ubah konfigurasi seperti di bawah ini.
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=1
opcache.save_comments=1
Simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.
Jalankan perintah berikut untuk meningkatkan unggahan File dan batas Memori untuk PHP.
$ sudo cp /etc/php.ini /etc/php.ini.bak
$ sudo sed -i "s/memory_limit = 128M/memory_limit = 512M/" /etc/php.ini
$ sudo sed -i "s/post_max_size = 8M/post_max_size = 100M/" /etc/php.ini
$ sudo sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 100M/" /etc/php.ini
Secara default, ada 3 file di /var/lib/php/
direktori yang pemilik grupnya disetel ke apache
, tapi kami menggunakan Nginx. Jadi kita perlu memberikan izin kepada pengguna nginx untuk membaca dan menulis ke 3 direktori dengan setfacl
.
$ sudo setfacl -R -m u:nginx:rwx /var/lib/php/opcache/
$ sudo setfacl -R -m u:nginx:rwx /var/lib/php/session/
$ sudo setfacl -R -m u:nginx:rwx /var/lib/php/wsdlcache/
Aktifkan dan mulai proses php-fpm.
$ sudo systemctl enable php-fpm
$ sudo systemctl start php-fpm
Instal Nginx
Fedora 32 secara default dikirimkan dengan versi Stable terbaru Nginx.
Instal Nginx.
$ sudo dnf install nginx -y
Periksa apakah itu berfungsi dengan benar.
$ nginx -v
nginx version: nginx/1.18.0
Mulai dan aktifkan Nginx.
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
Buka alamat IP server Anda di browser untuk melihat halaman berikut. Itu berarti Nginx bekerja dengan baik.
Instal MariaDB
MariaDB adalah pengganti drop-in untuk MySQL yang berarti perintah untuk menjalankan dan mengoperasikan MariaDB sama dengan perintah untuk MySQL.
Fedora 32 secara default dikirimkan dengan MariaDB 10.4 yang akan kita gunakan.
Instal server MariaDB.
$ sudo dnf install mariadb-server
Periksa apakah MariaDB diinstal dengan benar.
$ mysql --version
mysql Ver 15.1 Distrib 10.4.14-MariaDB, for Linux (x86_64) using EditLine wrapper
Aktifkan dan mulai layanan MariaDB.
$ sudo systemctl enable mariadb
$ sudo systemctl start mariadb
Jalankan perintah berikut untuk melakukan konfigurasi default seperti memberikan kata sandi root, menghapus pengguna anonim, melarang login root dari jarak jauh, dan menghapus tabel pengujian.
$ sudo mysql_secure_installation
Menekan Enter memilih opsi default (salah satu yang dikapitalisasi, Y dalam hal ini).
Enter current password for root (enter for none): [PRESS ENTER]
Switch to unix_socket authentication [Y/n] [PRESS ENTER]
Change the root password? [Y/n] [ANSWER n]
Remove anonymous users? [Y/n] [PRESS ENTER]
Disallow root login remotely? [Y/n] [PRESS ENTER]
Remove test database and access to it? [Y/n] [PRESS ENTER]
Reload privilege tables now? [Y/n] [PRESS ENTER]
Itu dia. Lain kali Anda ingin login ke MySQL, gunakan perintah berikut
$ sudo mysql
Masukkan kata sandi root Anda saat diminta.
Konfigurasi MariaDB
Masukkan perintah berikut untuk masuk ke shell MySQL.
$ sudo mysql
Buat pengguna MySQL untuk menangani Database NextCloud.
mysql> CREATE USER 'nextuser'@'localhost' IDENTIFIED BY 'yourpassword';
Buat database NextCloud.
mysql> CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Berikan semua hak istimewa ke database Nextcloud kepada pengguna yang kita buat.
mysql> GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextuser'@'localhost';
Keluar dari Shell MySQL.
mysql> exit
Unduh Nextcloud
Saatnya mengunduh dan menyiapkan folder Nextcloud.
$ wget https://download.nextcloud.com/server/releases/latest.tar.bz2
$ tar -jxvf latest.tar.bz2
$ sudo mv nextcloud /var/www/html/
Selanjutnya, kita perlu membuat folder data.
$ sudo mkdir /var/www/html/nextcloud/data
$ sudo chown -R nginx:nginx /var/www/html/nextcloud
Instal SSL
Kami akan menginstal SSL menggunakan layanan Let's Encrypt.
Untuk itu, instal Certbot.
$ sudo dnf install certbot
Hentikan Nginx karena akan mengganggu proses Certbot.
$ sudo systemctl stop nginx
Menghasilkan sertifikat. Kami juga membuat sertifikat DHParams.
$ export LDOMAIN="nextcloud.example.com"
$ export LEMAIL="[email protected]"
$ sudo certbot certonly --standalone -d $LDOMAIN --preferred-challenges http --agree-tos -n -m $LEMAIL --keep-until-expiring
$ sudo systemctl start nginx
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Kami juga perlu menyiapkan tugas cron untuk memperbarui SSL secara otomatis. Untuk membuka editor crontab, jalankan perintah berikut
$ sudo EDITOR=nano crontab -e
Perintah di atas membuka Crontab dengan editor Nano, bukan editor Vim default.
Rekatkan baris berikut di bagian bawah.
25 2 * * * /usr/bin/certbot renew --quiet --pre-hook “systemctl stop nginx” --post-hook “systemctl start nginx”
Pekerjaan cron di atas akan menjalankan certbot pada pukul 2:25 pagi setiap hari. Anda dapat mengubahnya menjadi apa pun yang Anda inginkan.
Simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.
Konfigurasi SELinux/Izin
SELinux perlu dikonfigurasi untuk membuat Nextcloud berfungsi di Fedora. Masukkan perintah berikut ke untuk pengaturan SELinux dasar yang seharusnya berfungsi untuk semua orang.
Pastikan untuk menyesuaikan jalur file jika berbeda dalam kasus Anda.
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/data(/.*)?'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/config(/.*)?'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/apps(/.*)?'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/.user.ini'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/3rdparty/aws/aws-sdk-php/src/data/logs(/.*)?'
$ sudo restorecon -Rv '/var/www/html/nextcloud/'
Untuk mengaktifkan pembaruan melalui antarmuka web Nextcloud, jalankan juga perintah berikut.
$ sudo setsebool -P httpd_unified on
Konfigurasi Nginx untuk Nextcloud
Selanjutnya, kita perlu mengkonfigurasi Nginx untuk hosting Nextcloud.
Untuk tujuan kami, Nextcloud akan di-host di domain http://nextcloud.example.com
,
Siapkan direktori tempat server memblokir.
$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled
Buka /etc/nginx/nginx.conf
file untuk diedit.
$ sudo nano /etc/nginx/nginx.conf
Paste baris berikut setelah baris include /etc/nginx/conf.d/*.conf
include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;
Tekan Ctrl + X untuk menutup editor dan tekan Y saat diminta untuk menyimpan file.
Buat file /etc/nginx/sites-available/nextcloud.conf
menggunakan editor Nano.
$ sudo nano /etc/nginx/sites-available/nextcloud.conf
Rekatkan kode berikut di editor. Pastikan untuk mengganti domain contoh dengan domain asli Anda sebelum menempel.
upstream php-handler {
#server 127.0.0.1:9000;
server unix:/run/php-fpm/www.sock;
}
server {
listen 80;
listen [::]:80;
server_name nextcloud.example.com;
# enforce https
return 301 https://$server_name:443$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name nextcloud.example.com;
access_log /var/log/nginx/nextcloud.access.log;
error_log /var/log/nginx/nextcloud.error.log;
# 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/nextcloud.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/nextcloud.example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_dhparam /etc/ssl/certs/dhparam.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/html/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 100M;
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\/.+|.+\/richdocumentscode\/proxy)\.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_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|mp4|webm)$ {
try_files $uri /index.php$request_uri;
# Optional: Don't log access to other assets
access_log off;
}
}
Tekan Ctrl + X untuk menutup editor dan tekan Y saat diminta untuk menyimpan file.
Aktifkan file konfigurasi ini dengan menautkannya ke sites-enabled
direktori.
$ sudo ln -s /etc/nginx/sites-available/nextcloud.conf /etc/nginx/sites-enabled/
Uji konfigurasi Nginx.
$ sudo nginx -t
Muat ulang layanan Nginx jika semuanya baik-baik saja.
$ sudo systemctl reload nginx
Instal Nextcloud
Ada dua cara untuk mengkonfigurasi Nextcloud - melalui baris perintah atau melalui antarmuka grafis. Kami akan memilih metode baris perintah.
Masuk ke direktori Nextcloud.
$ cd /var/www/html/nextcloud
Jalankan perintah berikut untuk menginstal Nextcloud.
$ sudo -u nginx php occ maintenance:install --database "mysql" --database-name "nextcloud" --database-user "nextuser" --database-pass "yourpassword" --admin-user "admin" --admin-pass "password"
Perintah ini dijalankan sebagai nginx
pengguna karena memiliki izin menulis ke folder Nextcloud.
Selanjutnya, kita perlu menambahkan domain kita ke daftar domain tepercaya. Buka /var/www/html/nextcloud/config/config.php
berkas.
$ sudo nano config/config.php
Ubah Nilai trusted_domains
variabel dengan menambahkan alamat IP Server Anda dan domain Nextcloud Anda nextcloud.example.com
ke sana sehingga Anda dapat mengakses penginstalan dari domain Anda.
'trusted_domains' =>
array (
0 => 'localhost',
1 => '167.172.35.56',
2 => 'nextcloud.example.com',
),
Tekan Ctrl + X untuk menutup editor dan tekan Y saat diminta untuk menyimpan file.
Luncurkan instalasi Nextcloud Anda dengan membuka https://nextcloud.example.com
di browser Anda dan Anda akan melihat layar berikut.
Masukkan Detail Login Administrasi Anda. Gulir melalui spanduk pengantar Nextcloud, atur lokasi dan status cuaca Anda dan pilih wallpaper dan setelah selesai Anda akan disambut dengan layar yang sama.
Kesimpulan
Ini menyimpulkan tutorial kami tentang menginstal Nextcloud di server Fedora 32. Jika Anda memiliki pertanyaan, kirimkan di komentar di bawah.