คู่มือนี้คือก้าวแรกที่จะให้ท่านได้สร้าง Cloud Storage คอมมูนิตี้ผ่านคอมพิวเตอร์ของท่านเอง โดยใช้ Nextcloud ซึ่งเป็น open source สำหรับ file hosting service ชนิดสำเร็จรูป ที่มีความปลอดภัย และพร้อมใช้งานได้ทันที


แต่เดี๋ยวก่อนนะ ทำไมชั้นต้องอยากมีระบบ file hosting เป็นของตัวเองด้วยล่ะ ในเมื่อปัจจุบันระบบการฝาก และแชร์ไฟล์เป็นสิ่งที่ทำได้อย่างง่ายดายผ่านผู้ให้บริการอาทิเช่น Google Drive, OneDrive, Dropbox
สาเหตุหลักที่ผู้เขียนเลือกที่จะสร้างระบบ file hosting นี้ขึ้นมาเอง เพราะในขณะนั้นทีมต้องการสร้างระบบฝากไฟล์ให้แพทย์ใช้งาน โดยมีเป้าหมายเพื่อ “พัฒนาระบบในการรับ-ส่งข้อมูลการรักษาในเคสผู้ป่วยโควิดจากแพทย์ที่ประจำโรงพยาบาลหนึ่งไปยังแพทย์อีกที่หนึ่งซึ่งต้องมีความปลอดภัยรวดเร็วและใช้งานได้ง่าย” ความท้าทายในตอนนั้นคือโปรเจกต์นี้จะต้องเกิดขึ้นได้เร็วเพื่อรับมือกับจำนวนผู้ป่วย และข้อมูลที่เพิ่มมากขึ้น ดังนั้นพวกเราจึงทำการหยิบไอเดีย และเครื่องมือที่มีอยู่แล้วในตลาด มาสร้างให้มั่นใจว่าสามารถใช้ได้จริง และตอบโจทย์ผู้ใช้งาน
หากการรับส่งข้อมูลไฟล์นั้นทำผ่านระบบฝากไฟล์ทั่วไป จะเป็นที่ทราบกันดีว่าข้อมูลต่าง ๆ ของเราจะถูกดูแลบนเซิร์ฟเวอร์ของผู้ให้บริการเหล่านั้น และถึงแม้แต่ละเจ้าจะยืนยันเรื่องความปลอดภัยของข้อมูล แต่ความรู้สึกที่ว่าข้อมูลของเราอยู่ในมือของพวกเขาก็เพียงพอแล้วที่จะสร้างความลำบากใจให้กับผู้ใช้งานระบบ ซึ่งในที่นี้คือแพทย์ ประกอบกับข้อมูลสุขภาพของคนไข้นั้นเป็นข้อมูลที่มีความละเอียดอ่อน หากข้อมูลนั้นรั่วไหลออกไป ก็ยากที่จะเยียวยาผู้ที่ได้รับผลกระทบ
อีกหนึ่งจุดแข็งของโปรเจกต์นี้คือ การเลือกติดตั้งระบบบนเซิร์ฟเวอร์ที่ได้รับความมั่นใจว่ามีความปลอดภัย และตรวจสอบการใช้งานได้ อันได้แก่ระบบคลาวด์กลางภาครัฐ หรือ GDCC ที่พร้อมให้บริการเครื่องคอมพิวเตอร์เสมือน (Virtual Machine หรือ VM)
จึงสรุปได้ว่า การเลือกใช้งาน Nextcloud ซึ่งเป็น open source cloud storage software มีข้อดีคือ
- สามารถเลือกจุดติดตั้งเซิร์ฟเวอร์ได้
- สามารถออกแบบหน้าตาการใช้งาน ให้เป็น platform ที่ใช้งานเฉพาะกลุ่มของเราเท่านั้น
- ด้วยการออกแบบนี้เอง จะช่วยเพิ่มความน่าใช้งาน และความน่าเชื่อถือให้กับคนที่เข้ามาใช้


เชื่อเถอะว่าท่านจะยิ้มไม่หุบ เมื่อได้เป็นผู้ดูแลระบบ file hosting ที่สามารถดัดแปลงให้เหมาะกับงานหรือกิจกรรมที่ต้องการได้ เอาหล่ะเราไปลุยกันเลย!
1. สร้าง Server
จากที่กล่าวไปแล้วข้างต้นว่า Server (เซิร์ฟเวอร์) เป็นสิ่งที่ต้องใส่ใจเป็นพิเศษ หากข้อมูลข้างในเป็นความลับ ก็ควรเลือกติดตั้งเซิร์ฟเวอร์ของผู้ให้บริการที่เชื่อถือได้ หรือใช้เซิร์ฟเวอร์ส่วนตัว รวมทั้งตั้งค่าระบบให้มีความปลอดภัย เช่น Firewall, Anti-DDoS เป็นต้น ซึ่งในบทความนี้เราจะนำเสนอการติดตั้งบน cloud ของ Google
ในการเลือกสร้าง Server ผ่าน Virtual Machine บน Google Cloud Platform (GCP) นั้น Google จะให้ 300 USD free credit สำหรับผู้ใช้งานใหม่


1.1 เข้าใช้งาน Google Cloud Platform และไปที่ Computer Engine > VM Instances


1.2 เลือก CREATE INSTANCE และตั้งค่าต่างๆ ที่สำคัญได้แก่ Region (เลือกโซน Asia), Boot disk (เลือก Ubuntu 18.04 LTS), และ Firewall เลือก Allow HTTP และ HTTPS traffic


1.3 เมื่อเราสร้าง VM เสร็จแล้ว สามารถเปิดเข้าใช้งานโดยตรงได้ผ่านทาง Connect SSH > Open in browser window


สำหรับท่านที่ใช้ Windows หรือ Linux คู่มือนี้เราอยากให้ท่านได้ลองติดตั้ง Nextcloud ผ่าน command line บนเครื่องท่านเอง (ไม่ต้องพึ่ง SSH ผ่าน browser ของ google) เพื่อใช้งาน keyboard shortcut ต่าง ๆ ได้สะดวกมากขึ้น และตัวผู้เขียนเชื่อว่ามีหลายคนยังไม่รู้เทคนิคในการ SSH จากเครื่องส่วนตัว ไปยัง VM ของ google ซึ่งสำหรับคนที่ใช้ Windows นั้นจำเป็นที่จะต้องติดตั้ง Ubuntu 18.04 LTS ใน Microsoft Store ก่อน หรือผ่าน PuTTY ได้เช่นกันครับ




1.4 เปิดใช้งาน SSH ผ่าน browser ของ google VM instances ก่อน เพื่อที่จะเข้าไปตั้งค่าให้เราสามารถ SSH ผ่านเครื่องโดยตรง
# connect SSH and Su Root
sudo su root
# change password Root
passwd root
# config SSHD allow Root login
nano /etc/ssh/sshd_config
ท่านจะเด้งไปที่ Code ข้างในไฟล์ sshd_config ให้ทำการแก้ไขบางส่วนของ Code ตามข้อความข้างล่าง
บางบรรทัดเราจะเอา # ออกไป และมีเปลี่ยนข้อความข้างในเล็กน้อย ตามตัวอย่างข้างล่าง
# Authentication:
LoginGraceTime 2m
PermitRootLogin yes
StrictModes yes
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes
หลังจากนั้นให้ทำการ save ทับไฟล์เก่า ด้วยการ
- shortkey Ctrl + x เพื่อ Exit
- กด Y เพื่อยืนยันที่จะ save file
- จะขึ้นข้อความ File Name to Write: /etc/ssh/sshd_config ให้กด Enter
# restart
service sshd restart
ก็เป็นอันเสร็จสิ้นขั้นตอนการสร้าง Server บน Google Cloud Platform และตั้งค่าให้สามารถ SSH จากเครื่องส่วนตัว ไปยัง VM นี้ได้
- หากท่านเคยสร้าง VM มาก่อนหน้านี้ (ให้ชื่อว่า VM A.) แล้วทำการตั้งค่าตามข้อ 1.4 แล้วอยู่มาวันนึงท่านลบหรือหยุดการใช้ VM A. นี้ และทำการสร้าง VM ใหม่ขึ้นในโปรเจกต์เดิม (ให้ชื่อว่า VM B.) หาก Region ที่สร้าง VM B. นั้นเหมือนกับ VM A. จะพบว่าเลข IP ของ VM B. นั้นจะเหมือนกับ VM A. และที่สำคัญคือ ต่อให้เราทำขั้นตอนตามข้อ 1.4 เดียวกันกับ VM B. แต่สุดท้ายจะพบว่าไม่สามารถเชื่อมต่อได้ผ่าน SSH command line browser
- IP Address ที่ใช้งานสำหรับ SSH นั้นจะเป็นเลขจาก External IP
2. ติดตั้ง Nextcloud บน Server
2.1 ทำการเปิด Ubuntu 18.04 LTS ที่ได้ติดตั้งไว้แล้วบนเครื่องคอมพิวเตอร์ส่วนตัว


# ssh to IP of google cloud server
ssh [email protected] <External IP Address>
# update and upgrade
apt-get update ;
apt-get upgrade
# install LAMP (Linux, Apache, MySQL, PHP/Perl/Python)
apt install lamp-server^
# install PHP Moduls
apt install php-zip php-dompdf php-xml php-mbstring php-gd php-curl php-imagick php-intl unzip
2.2 หลังจากนั้นให้นำเลข External IP ไปเปิดบน internet browser หากขึ้นหน้าจอดังรูป เท่ากับว่าท่านผ่านด่านแรกแล้ว!


# adjust PHP.ini file
nano /etc/php/7.2/apache2/php.ini
จะเด้งไปที่หน้าข้างในไฟล์ php.ini ให้ทำการแก้ไขค่าต่างๆ ตามที่ระบุไว้ข้างล่าง โดยใช้ shortkey ctrl + w ในการ search
file_uploads = On
allow_url_fopen = On
memory_limit = 1024M
upload_max_filesize = 16G
post_max_size = 16G
display_errors = Off
หลังจากนั้นให้ทำการ save ทับไฟล์เก่า ด้วยการ
- shortkey Ctrl + x เพื่อ Exit
- กด Y เพื่อยืนยันที่จะ save file และตามด้วย Enter
2.3 ติดตั้ง MySQL เพื่อเป็น database โดยต้องทำการตั้ง password และให้ตอบ y ทุกขั้นตอนในการติดตั้ง
mysql_secure_installation
# open SQL dialoge
mysql
# create database calles nextcloud
CREATE DATABASE nextcloud;
ต่อไปจะทำการสร้าง user และ password ของ database nextcloud นี้ โดยแนะนำให้ user เป็น ‘nextcloud’@’localhost‘ ส่วน password สามารถใส่แทนเข้าไปใน ‘password_here’ ตามที่ระบุในโค้ดข้างล่าง
# create database user with password (ตั้งค่า password ตามที่ต้องการ)
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'password_here';
# grant accesss to databse
GRANT ALL ON nextcloud.* TO 'nextcloud'@'localhost' IDENTIFIED BY 'password_here' WITH GRANT OPTION;
# save changes and exit
FLUSH PRIVILEGES;
EXIT;
2.4 ทำการติดตั้ง nextcloud เวอร์ชันล่าสุดลงบน server
# download lastest Nextcloud version*
cd /tmp && wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
2.5 ทำการย้าย folder nextcloud และสร้างไฟล์ config
# move nextcloud file
mv nextcloud /var/www/
# create new config
nano /etc/apache2/sites-available/nextcloud.conf
จะเด้งไปที่หน้าจอเปล่า ให้เราทำการ copy code ข้างล่างทั้งหมดใส่ลงไป และทำการ save ไฟล์ใหม่นี้ได้เลย
# Copy and Paste this code.
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/var/www/nextcloud"
ServerName example.com
<Directory "/var/www/nextcloud/">
Options MultiViews FollowSymlinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
TransferLog /var/log/apache2/nextcloud_access.log
ErrorLog /var/log/apache2/nextcloud_error.log
</VirtualHost>
หากเราทำการจดโดเมนให้ผูกกับเลข External IP แล้ว เราสามารถใส่ชื่อโดเมนนั้นลงตรง Servername แทนที่ example.com
ทำการ save ไฟล์ใหม่
- shortkey Ctrl + x เพื่อ Exit
- กด Y เพื่อยืนยันที่จะ save
- กด Enter เพื่อ save ไฟล์ใหม่ในชื่อ nextcloud.conf
2.6 เตรียมความพร้อม ก่อนเปิดใช้งานจริง
# enable the NextCloud and Rewrite Module
a2ensite nextcloud.conf;
a2enmod rewrite;
a2enmod headers;
a2enmod env;
a2enmod dir;
a2enmod mime;
# restart apache
systemctl restart apache2.service
# prepare data folder
mkdir /home/data/;
chown -R www-data:www-data /home/data/;
chown -R www-data:www-data /var/www/nextcloud/;
chmod -R 755 /var/www/nextcloud/;
# restart apache
sudo a2dissite 000-default;
sudo a2ensite nextcloud;
sudo systemctl restart apache2;
นำเลข External IP ไปเปิดบน internet browser จะพบว่า Nextcloud ได้ถูกติดตั้งแล้ว สามารถสร้าง admin username/password เพื่อเข้าไปใช้งานได้


3. ใช้งาน Nextcloud ผ่านโดเมน ด้วย https:


3.1 เข้าไปจดโดเมนให้ผูกกับเลข External IP (ค่าจดประมาน 400 บาท สำหรับโดเมนที่ลงท้ายด้วย .com)
3.2 เข้าไปแก้ไขชื่อของ Servername ให้ตรงกับชื่อโดเมนของเราในไฟล์ nextcloud.conf ตามคำสั่งข้างล่าง แล้วทำการ save ทับ
nano /etc/apache2/sites-available/nextcloud.conf
# install certbot
apt install certbot python-certbot-apache
# run Certbot to enable SSL/TLS using Let's Encrypt:
certbot --apache
โดเมนของเราจะได้รับ Certificate ให้เป็น https: และสามารถเข้าใช้งาน Nextcloud ผ่านโดเมนได้โดยตรง
ช้าก่อน! หากท่านเปิดใช้งาน Nextcloud ผ่าน IP address หรือ โดเมน ที่ผ่านการ Certificate ในข้อ 3.2 แล้ว อาจจะพบกับหน้าจอ error


นั่นเป็นเพราะชื่อของ trusted domain (เลข IP และ โดเทนที่จดไป) ยังไม่ได้ถูกระบุใน config หลักของ Nextcloud ครับ หลังจากนี้ให้ท่าน change directory ไปที่ /var/www/nextcloud/config ด้วยคำสั่ง
# move to main nextcloud configuration directory:
cd /var/www/nextcloud/config
หลังจากนั้นให้ทำการเปิดไฟล์ config.php
nano config.php
ทำการเพิ่มข้อมูล trusted domain ในไฟล์ ให้เป็น
'trusted_domains' =>
array (
0 => 'ชื่อโดเมนที่จด.com',
1 => 'เลข IP',
),
ทำการเซฟทับไฟล์ และเข้าใช้งานใหม่ เพียงเท่านี้ท่านก็สามารถใช้งาน Nextcloud ผ่านโดเมน หรือ IP ที่ผ่าน certificate ได้แล้วครับ
สรุปส่งท้าย
เป็นยังไงบ้างครับกำการติดตั้ง Nextcloud ดูเหมือนจะซับซ้อน แต่ก็ตรงไปตรงมากว่าที่คิดใช่มั้ยครับ (ก๊อปวางอย่างเดียวเลยจ้า) ที่สำคัญนี่เป็นเพียงแค่จุดเริ่มต้นแห่งความสนุกครับ เพราะ Nextcloud ยังมีฟังก์ชันการใช้งานข้างในอีกหลากหลายที่มีประโยชน์ ซึ่งจำเป็นที่จะต้องตั้งค่าให้ถูกต้อง เช่น
- Email Server สำหรับการกำหนดอีเมลหลักที่ Server จะใช้ติดต่อกับผู้ใช้งาน
- Registration Page สำหรับการอนุญาตให้คนนอกสมัครเข้าใช้งานระบบ
- Social login สำหรับการเชื่อมต่อ OpenID และ OAuth2 เพื่อให้ผู้ใช้งานยืนยันตัวตนผ่านระบบอื่น ในการเข้าใช้งาน Nextcloud
- Onlyoffice สำหรับการเปิดและแก้ไขไฟล์สกุล .docx, .xlsx, .pptx บน Nextcloud โดยตรง
ซึ่งหากทุกท่านยังไม่เบื่อกับ Nextcloud ทางผมก็อยากจะเขียนบทความเกี่ยวกับลูกเล่นต่าง ๆ นี้ และหากท่านใดมีข้อสงสัย หรือข้อเสนอแนะเกี่ยวกับบทความนี้สามารถติดต่อผมได้ที่ [email protected] ครับ
สุดท้ายนี้ขอจากไปด้วยประโยคคม ๆ นั่นคือ
“พวกผมนำระบบ Cloud Storage มาพัฒนาเป็น Platform ให้เหมาะกับงานของคุณหมอในการรับ-ส่งข้อมูลผู้ป่วยแล้วคุณหล่ะจะลองเอามันมาทำอะไรดี?”
อ้างอิง: https://docs.nextcloud.com/server/18/admin_manual/installation/