Hallo,
Apakah sobat tau apa itu cloud file sharing?
Sobat pasti tau kan google drive, dropbox, onedrive dan lain sebagainya. Nah, Itu salah satu contoh dari cloud file sharing. Terkadang kita saat menggunakan aplikasi tersebut, kita terkendala quota yang diberikan (Mau banyak ya bikin sendiri), keamanan data kita di server tersebut (kali aja server google di hack. wkakakak), kita tidak mengetahui data kita di enkripsi atau tidak (ntar ketauan folder rahasianya >.<). Maka dari itu, kali ini kita akan membahas tentang membuat private cloud file sharing menggunakan NextCloud.

Nextcloud adalah paket software client-server yang dibuat untuk digunakan sebagai layanan file hosting. Kalau sobat pernah denger OwnCloud, pembuatnya juga sama yaitu Frank Karlitschek dan kawan-kawannya. Pada April 2016, mereka meninggalkan OwnCloud karena perbedaan pendapat di internal perusahaan. Meskipun NextCloud merupakan hasil kopian dari projek OwnCloud, terdapat beberapa perbedaan diantaranya menawarkan edisi untuk komunitas open-source. Mereka juga menawarkan edisi esklusif untuk Enterprise dengan fitur tambahan dan support berlangganan.
Langsung kita mulai, Apa aja yang dibutuhkan untuk membuatnya?
- Tempat untuk jalanin aplikasinya (web server (apache, nginx, IIS,etc), web hosting, atau images buat di virtual machines)
- Niat yang kuat, karena memakan banyak waktu berharga sobat
- Kopi atau susu dan cemilan biar ngga ngantuk
Berikut rekomendasi platform yang dapat berjalan agar mendapat performa terbaik dan stabil:
- Server: GNU/Linux (Debian 8 (Jessie), 9 (Stretch), SUSE Linux Enterprise Server 11 SP3 & 12, openSUSE LEAP 42.1 atau yang terbaru, Red Hat Enterprise Linux/CentOS 6.5 dan 7 (7 hanya untuk 64-bit), Ubuntu 14.04 (Trusty) LTS, 16.04 (Xenial) LTS, 18.04 (Bionic) LTS)
- Web server: Apache 2.4 (mod_php, php-fpm) atau Nginx (php-fpm)
- Databases: MySQL atau MariaDB 5.5+; PostgreSQL 9, 10; Oracle 11g (Hanya dimungkinkan untuk perusahaan yang berlangganan)
- PHP 5.6, 7.0, 7.1 atau 7.2 (wajib ada)
- Hypervisors: Hyper-V, VMware ESX, Xen atau KVM
- Desktop: Windows 7+, Mac OS X 10.7+ (hanya 64-bit), Linux (CentOS 6.5, 7 – hanya 64-bit), Ubuntu 14.04 LTS, 16.04 LTS, 16.10+, Fedora 21+, openSUSE 13+ dan LEAP 41.1+, SLE 11 SP3+ Debian 8+).
- Mobile apps: iOS 9+ (10+ untuk Talk), Android 4.x+ (5.0+ untuk Talk)
- Web browser: Versi terakhir IE11+, Microsoft Edge, Firefox, Chrome, Safari atau yang berbasiskan browser tersebut. Talk membutuhkan Firefox 31+ dan Chrome38+
Oke, disini kita siapkan terlebih dahulu bahan-bahannya. Disini Mimin install di virtual machine dengan spesifikasi sebagai berikut:
- CPU 2 Core
- RAM 4 GB
- Hardisk 20 GB
- OS Server : Linux CentOS 7 64-bit
- Storage NAS : 10 TB x 10 RAID 5
Tahap Pertama
Setelah siap, pertama kita terlebih dahulu buat user agar lebih aman (tidak menggunakan root): #Bikin user baru, contoh: NextCloud
adduser NextCloud
passwd NextCloud
# Masukkan user tersebut ke group sudo dan pindah ke user tersebut
usermod -aG wheel NextCloud
sudo su - NextCloud
# Pastikan sudah install nano dan sudah update epel-release
yum install –y nano epel-release yum-utils
sudo rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum-config-manager --enable remi-php71
Setalah diupdate reponya, update centOSnya juga:
yum –y update
Setelah selesai, kita install aplikasi nginx, mariadb10 dan aplikasi pendukungnya:
yum -y install nginx wget unzip mariadb mariadb-server
yum --disableexcludes=main install libxslt.x86_64
Install juga PHP 7.1. Untuk mengetahui fungsi dan PHP yang kita install, bisa lihat disini:
yum -y install nginx php php-fpm php-mysqlnd php-ldap php-ctype php-dom php-gd php-iconv php-json php-libxml php-mbstring php-posix php-xml php-zip php-openssl php-zlib php-curl php-fileinfo php-bz2 php-intl php-mcrypt php-ftp php-exif php-gmp php-memcached php-imagick
Tahap Ke Tiga
Setelah sobat install PHP, edit file konfigurasi PHP di /etc/php.ini:
nano /etc/php.ini
memory_limit = 512M
date.timezone =Asia/Jakarta
cgi.fix_pathinfo=0
post_max_size = 512M
upload_max_filesize = 512M
Kita juga edit file konfigurasi PHP-FPM di /etc/php-fpm.d/www.conf:
nano /etc/php-fpm.d/www.conf
user = nginx
group = nginx
;listen = 127.0.0.1:9000
listen = /var/run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
Kita lanjut untuk membuat direktori baru untuk menyimpan session data PHP:
mkdir -p /var/lib/php/session
chown nginx:nginx -R /var/lib/php/session/
Jangan lupa permissionnya juga:
chown nginx:nginx /var/run/php-fpm/php-fpm.sock
chmod 660 /var/run/php-fpm/php-fpm.sock
Konfigurasi mariadbnya, ketik:
mysql_secure_installation
masukkan password untuk root user :
Set root password? [Y/n] Y
New password:
Re-enter new password:
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
Jangan lupa buat user baru untuk mysqlnya sesuai selera:
CREATE USER 'bayhaqy'@'localhost' IDENTIFIED BY ' bayhaqy ';
Setelah itu restart services dan buat autostart PHP-FPMnya:
systemctl restart php-fpm
systemctl enable php-fpm
untuk webservernya dan mysql juga dilakukan seperti itu:
systemctl restart nginx
systemctl enable nginx
systemctl restart mysql
systemctl enable mysql
Tahap Ke Empat
Download aplikasi NextCloud ke servernya, samakan urlnya dengan versi terakhir disini:
wget https://download.NextCloud.com/server/releases/NextCloud-XXXXX.zip
Ekstrak hasil downloadnya tersebut:
unzip NextCloud-*.zip -d /usr/share/nginx/html/
Buat folder dan set ownership untuk data penyimpanan aplikasi tersebut
mkdir /usr/share/nginx/NextCloud/data
chown -R nginx:nginx /usr/share/nginx/html/NextCloud
Sampai sini aplikasi NextCloud sudah berhasil berada di server
Tahap Ke Lima
Di tutorial ini, kita menggunakan SSL certificate gratis dari Let’s Encrypt CA. Jika aplikasi sobat digunakan untuk user bisnis, lebih baik sobat menggunakan SSL certificate berbayar untuk level keamanan yang lebih tinggi dan juga agar lebih handal. Pastikan juga jika sobat ingin membuat SSL, sobat harus mempunyai domain serta akses ke server dengan domain tersebut.
Kita install cerbot untuk generate Let’s Encrypt SSL certificate:
wget https://dl.eff.org/certbot-auto -O /usr/bin/certbot
chmod a+x /usr/bin/certbot
Ubah domain drive.bayhaqy.com sesuai dengan domain sobat ya:
certbot certonly --webroot -w /usr/share/nginx/html -d drive.bayhaqy.com
jika tahap tersebut berhasil, sobat akan menerima notifikasi seperti dibawah ini:
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/drive.bayhaqy.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/ drive.bayhaqy.com /privkey.pem Your cert will expire on 2019-05-21. . . .
Sampai sini kita sudah membuat SSL untuk meningkatkan keamanan pada aplikasi sobat nih
Tahap Ke Enam
Pada tahap ke enam, kita buat virtual hosting untuk NextCloud di nginx server yang telah kita install:
nano /etc/nginx/conf.d/NextCloud.conf
Masukkan konfigurasi dibawah pada file tersebut:
upstream php-handler {
#server 127.0.0.1:9000;
server unix:/var/run/php-fpm/php-fpm.sock;
}
server {
listen 80;
listen [::]:80;
#enforce https
server_name drive.bayhaqy.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name drive.bayhaqy.com;
keepalive_timeout 70;
#ubah ssl certificate sesuai lokasi sobat membuatnya
ssl_certificate /etc/letsencrypt/live/drive.bayhaqy.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/drive.bayhaqy.com/privkey.pem;
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
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;
#ubah direktori tersebut sesuai lokasi aplikasi NextCloud
root /usr/share/nginx/html/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;
}
client_max_body_size 512M;
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;
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;
fastcgi_param HTTPS on;
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)$ {
try_files $uri /index.php$uri$is_args$args;
add_header Cache-Control "public, max-age=7200";
add_header Strict-Transport-Security "max-age=15768000;
includeSubDomains; preload;";
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;
access_log off;
}
location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
try_files $uri /index.php$uri$is_args$args;
access_log off;
}
}
Setelah itu restart services dari web server nginx:
systemctl restart nginx
Tahap Ke Tujuh
Sampai sini kita sudah selesai konfigurasi dari sisi terminal linux. Sekarang kita buka browser (terserah sesuai favorit sobat, tetapi sesuai dengan rekomendasi diatas ya), dan buka url dari lokasi hostname server sobat (Misalnya sebelumnya kita buat dengan nama https://drive.bayhaqy.com) maka tampilannya akan seperti gambar dibawah ini:

Masukkan dengan keterangan sebagai berikut:
Akun user admin : Bebas sesuai selera
Password admin : Bebas sesuai selera
Data folder : Sesuaikan lokasi data folder yang sudah sobat buat sebelumnya
Configure database : Karena kita menggunakan mariaDB, maka pilih MySQL/MariaDB
User database : Isikan sesuai user yang telah sobat buat sebelumnya
Password database : Isikan sesuai password yang telah sobat buat sebelumnya
Nama database : Bebas sesuai selera
Lokasi database :Karena kita menginstall database di satu server, kita isi dengan “localhost”
Note: Jika kita menggunakan database diserver lainnya,masukkan ip address atau hostname dari server tersebut. Pastikan web server bisa melakukan koneksi ke database server (misalnya dengan melakukan ping)
Sampai sini kita telah berhasil melakukan instalasi aplikasi NextCloud.

Tahap Ke Delapan
Setelah semua tahapan kita lewati, sekarang adalah tahapan terakhir untuk mengoptimalkan dari aplikasi NextCloud. Diantaranya yaitu:
Cron Job
Cron job berfungsi untuk menjalankan command sesuai waktu yang kita tentukan secara regular
#Masuk crontab untuk user nginx:
crontab -u nginx –e
#Kita buat terlebih dahulu crontab untuk user nginx:
*/15 * * * * php -f /usr/share/nginx/html/NextCloud/cron.php > /dev/null 2>&1
5 1 * * * php -f /usr/share/nginx/html/NextCloud/occ files:scan-app-data > /dev/null 2>&1
#Seletah itu, masuk crontab untuk user root:
crontab –e
#Kita buat crontab untuk user root:
0 12 * * 1 /usr/bin/certbot renew –quiet
09,39 * * * * /usr/lib/php/sessionclean 2>&1
0 2 * * * /bin/bash /mnt/backup-cron-mysql-NextCloud.sh
Config.php
Config.php berfungsi untuk mengontrol operasional server dengan melakukan list semua parameter konfigurasi yang ada di NextCloud, baik dengan contoh maupun dengan nilai default.
#Masuk ke direktori config.php:
Nano /usr/share/nginx/html/NextCloud/config/config.php
#Setelah itu, tambahkan konfigurasi dibawah ini:
‘loglevel’ => 2,
‘logfile’ => ‘/media/HDD2/NextCloud/data/NextCloud.log’,
‘logdateformat’ => ‘F d, Y H:i:s’,
‘cron_log’ => true,
‘memcache.local’ => ‘\OC\Memcache\APCu’,
‘auth.bruteforce.protection.enabled’ => true,
‘updatechecker’ => true,
‘updater.server.url’ => ‘https://updates.NextCloud.com/updater_server/’,
‘updater.release.channel’ => ‘stable’,
#Lalu restart services nginx dan PHP-FPM:
systemctl restart nginx php-fpm
LDAP/AD Integration
Saat sobat install PHP 7.1, sobat menginstall PHP untuk fungsi LDAP. Untuk mengaktifkannya dari bisa dari Menu – Apps – LDAP user and group backend – Enable – Selesai. Untuk konfigurasi LDAPnya, sobat bisa masuk ke Menu – Settings – LDAP/AD Integration – lalu setting sesuai dengan LDAP/AD yang sobat miliki.

Encryption
Untuk mengaktifkannya dari bisa dari Menu – Apps – Default encryption module – Enable – Selesai. Untuk konfigurasi Encryptionnya, sobat bisa masuk ke Menu – Settings – Encryption – Enable server-side-encryption.

Email Server
Email Server dipergunakan untuk mempermudah user dalam memanage akunnya. Seperti untuk mendapatkan notifikasi semua update yang terjadi. Untuk konfigurasinya, buka Menu – Settings – Additional Settings dan silahkan ikuti sesuai dengan gambar dibawah ini (sesuaikan dengan nama mail server sobat ya):

File Handling
Jika sobat mempergunakan NextCloud untuk upload file yang besar, sobat bisa tambahkan Maximum upload size pada Menu – Settings – Additional Settings.

Draw.io
Apa aplikasi yang biasa sobat gunakan untuk membuat flow diagram? Visio?
Sekarang sobat bisa menggunakan aplikasi Draw.io pada aplikasi NextCloud yang lebih banyak featurenya. Sobat cukup aktifkan featurenya pada Menu – Apps – Draw.io – Enable – Selesai. Untuk membuatnya sobat tinggal memilih tanda plus pada menu Files dan pilih Diagram.


Oke deh sobat, Sekian pembahasan panjang kali ini tentang membuat private cloud file sharing dengan NextCloud. Silahkan tunggu updatean artikel selanjutnya dan share jika artikel ini bermanfaat. Terima Kasih…