Giới-thiệu

Thân-thế
Thành-tích
Privacy Policy

Hữu-ích

Lập-kế-hoạch-tài-chính gia-đình

Đầu-tư-cổ-phiếu

Các loại bảo-hiểm

Câu-chuyện

Kinh-nghiệm

Máy-tính

Chữ-Việt

Linh tinh

Ý kiến

Danh mục

Download
Mục lục





Hướng dẫn làm cloud storage server riêng

Tài liệu này hướng dẫn làm một cloud storage server từ một máy tính cũ và yếu. Cloud storage server này có thể được dùng cho cá nhân hoặc nhóm ít người như gia đình. Bạn có thể tuỳ ý chọn dung lượng lưu trữ của cloud server theo nhu cầu, từ vài trăm GB trở lên đến vài TB tuỳ theo đĩa cứng gắn vào server. Dung lượng đó sẽ lớn hơn rất nhiều so với các account cloud storage server miễn phí và lớn hơn cả các account cloud storage có thu phí.

Tính năng

Cloud storage server này dùng Nextcloud chạy trên Ubuntu Server 18.04, dùng được đồng thời trong mạng LAN lẫn Internet.
User có thể share file và folder trong cloud server với nhau để cùng làm việc chung.
User có thể share file cho người ngoài download, share folder cho người ngoài upload file vào.

Các máy client dùng cloud storage server qua:

Với cloud storage server, tất cả hình chụp bằng smartphone được tự động upload vào cloud server, tất cả các file làm việc trên các computer đều được synchronize tức thời vào cloud server. Nextcloud tự động nhớ lại từng version của file sau mỗi lần file được sửa, user có thể chọn dùng lại hoặc download lại các version cũ qua web browser.

Multimedia

Các file hình được xem trực tiếp trong web browser và mobile app.
Các file âm thanh được stream (phát trực tiếp) trong mobile app.
Một số file video được stream (phát trực tiếp) trong web browser và mobile app.
Bạn cũng có thể dùng các app chuyên để thưởng thức video và audio để phát các file trong cloud server.

Apps

Ngoài việc làm cloud storage, Nextcloud có rất nhiều apps thêm vào để trở thành cloud server đa năng: Calendar, Contacts, Mail, Talk, Office Suite, Project Management…

Dụng cụ cần có

Một máy tính có ít nhất 512 MB RAM, dung lượng đĩa cứng tuỳ nhu cầu lưu trữ, Ethernet port. Tôi dùng một máy laptop cũ, vừa nhỏ gọn vừa ít hao điện.
Nếu máy tính cũ mà bạn định dùng làm cloud storagre server có đĩa cứng nhỏ, bạn có thể gắn thêm một đĩa cứng nữa qua USB.

Một đĩa cứng external dùng để backup file từ storage server. Dung lượng đĩa external lớn hơn gấp rưỡi cloud storage server.

LAN và FTTH Internet connection để nối mạng LAN với Internet. Đặt NAT/port-forwarding ở router để nối từ bên ngoài đến cloud storage server qua IPv4. Nếu FTTH router được ISP cấp IPv6 thì càng tốt, không cần NAT.

Một USB flash drive hai GB trở lên.

Cài đặt server

Làm USB boot

Download file ISO khoảng 850MB của Ubuntu Server 18.04 từ Ubuntu.

Tạo bootable USB flash drive từ file ISO

Từ Ubuntu Desktop Linux: dùng Startup Disk Creator trong System Tools menu.
Từ Windows: theo hướng dẫn ở link sau.

Boot và install

Có hai cách install Nextcloud: install Nextcloud và các thành phần kèm theo trong một gói snap hoặc install riêng Nextcloud và các thành phần kèm theo. Install trong gói snap thì gọn nhưng bạn không thay đổi được các thông số của Nextcloud. Tôi đã install trong snap, sau đó phải gỡ bỏ snap và install riêng Nextcloud và các thành phần kèm theo. Phần dưới đây hướng dẫn install trong snap.

Cắm USB flash drive đã làm ở bước trên vào máy để cài cloud storage server.

Bật máy lên và chọn boot từ USB drive rồi lần lượt làm theo hướng dẫn ở link sau.

Ở bước bảy, Networking, chương trình install sẽ tự động chọn địa chỉ DHCPv4 cho máy. Vì máy này sẽ được dùng làm server, bạn phải chọn địa chỉ IPv4 cố định bằng cách dùng phím Tab để đưa cursor đến tên Ethernet interface rồi bấm Enter, rồi chọn Edit IPv4. Bạn nên chọn một địa chỉ IPv4 nội bộ có số cuối dễ nhớ, ví dụ số cuối là 100 hoặc 200 hoặc 254.

Ở bước tám, Configure storage, bạn có thể chọn Manual để chia đĩa theo cách riêng nếu bạn có nhiều kinh nghiệm với Linux, hoặc chọn default là Use An Entire Disk. Nếu chọn Manual thì bạn nên chia một partition một GB làm boot filesystem chứa boot loader, một partition năm GB làm root filesystem chứa hệ điều hành, một partition khoảng một GB hoặc nhiều hơn số RAM trong máy làm swap và toàn bộ phần đĩa còn lại trong một partition làm data storage. Bạn cũng có thể chọn dùng LVM (Logical Volume Manager) khi chia đĩa, với LVM bạn có thể thêm dung lượng vào cloud storage dễ dàng. Nếu máy này có nhiều đĩa cứng thì bạn nên dùng LVM để nối các đĩa cứng đó lại.

Bước 12, Set up a Profile, sẽ tạo một user account trong Linux với tên người, tên account và password. Máy Linux có một user account đặc biệt là root, root có toàn quyền làm mọi việc trong máy. Trong Ubuntu Linux, account root không có password và user không trực tiếp login vào account root mà user login vào account thường rồi dùng lệnh sudo để làm việc với quyền root.

Ở bước 13, Install software, chương trình install sẽ hỏi bạn cần các software nào. Bạn cần install:

  1. OpenSSH server. Không Import SSH identity.
  2. Nextcloud
  3. Canonical-livepatch

Chương trình install sẽ chạy một lúc lâu để install và update hệ điều hành, sau đó bạn reboot. Lần boot đầu tiên lâu hơn bình thường vì các service phải tạo các file config trong lần chạy đầu tiên, bạn hãy chờ đến khi đĩa cứng ngừng hoạt động hẳn trong vài phút để các service đã sẵn sàng. Kế tiếp bạn làm một số việc sau.

Đổi storage location

Nếu bạn đã chọn chia đĩa Manual ở bước tám thì bạn phải đổi chỗ chứa file của Nextcloud để dùng đúng partition. Bạn phải tạo filesystem trong partition (hoặc logical volume nếu bạn dùng LVM) dành riêng cho data storage. Bạn thêm một dòng vào file /etc/fstab để mount filesystem đó vào chỗ Nextcloud chứa file là /var/snap/nextcloud/common/nextcloud. Nhưng trước khi boot lại để mount filesystem đó vào đúng chỗ, bạn cần mount filesystem đó vào một chỗ tạm và dời các file đang có trong /var/snap/nextcloud/common/nextcloud vào filesystem đó.

Tạo vùng swap trong RAM

Nếu máy của bạn có ít hơn bốn GB RAM hoặc có nhiều người dùng cloud server này thì sẽ có lúc server cần dùng vùng swap để phụ thêm cho RAM. Ở bước tám phía trên, chương trình install đã tạo một vùng swap trong đĩa cứng. Đĩa cứng thì chạy chậm hơn RAM gần một trăm lần nên server sẽ rất chậm mỗi khi dùng đến vùng swap.
Có một cách để cải thiện đôi chút trong trường hợp này, đó là đổi vai trò của một phần RAM. Khi hệ điều hành Linux hoạt động, nó luôn luôn lấy một phần RAM để cache hệ thống file và folder trong đĩa cứng, chúng ta sẽ giảm bớt phần RAM dùng làm cache đó để lấy một ít RAM làm swap nén. Khi tạo swap nén rồi, lúc nào server cần swap nó sẽ nén memory page cần swap lại (khoảng ba lần) và ghi vào vùng swap nén trong RAM nên sẽ nhanh hơn swap trong đĩa cứng rất nhiều.
Để tạo swap nén thì bạn apt install zram-config và điều chỉnh một số parameter của kernel Linux theo hướng dẫn ở link sau.
Nếu máy của bạn có quá ít RAM thì việc tạo vùng swap trong RAM cũng không loại trừ hết những lúc dùng đến vùng swap trong đĩa, máy vẫn chậm nhưng đỡ chậm hơn.

Tạo admin account cho Nextcloud

Tạo admin account cho Nextcloud trong lần đầu tiên nối đến server. Dùng browser nối đến https://cloud.server.ip.addr, cloud.server.ip.addr là địa chỉ IPv4 nội bộ đã chọn ở trên. Nextcloud sẽ hiện ra form để tạo user name và password cho admin account. User name và password này không liên quan đến user account đã tạo khi install server, bạn cũng có thể chọn cùng tên, cùng password.

Đến đây cloud storage server đã sẵn sàng để dùng trong mạng LAN. Bạn có thể tạo thêm các user khác cùng dùng cloud storage bằng cách bấm icon ở góc trên bên phải trong cửa sổ web browser. Để có thể dùng cloud storage từ Internet bạn cần làm tiếp phần dưới đây.

Cài đặt router, dynamic DNS và SSL certificate

Cài đặt NAT ở router

Để dùng cloud storage server từ Internet với địa chỉ IPv4 nội bộ, bạn phải cho router tiếp nhận connection trên port 80 và port 443 ở địa chỉ public IPv4 toàn cầu và chuyển tiếp connection đó đến địa chỉ IPv4 nội bộ của cloud storage server.

Bạn không cần NAT với IPv6 nhưng bạn cần đặt cho router mở port 80 và port 443 cho kết nối theo IPv6 từ bên ngoài vào.

Dynamic DNS

Để cho dễ tìm đến server, bạn sẽ đăng ký một domain name dễ nhớ cho cloud storage server và dùng dịch vụ dynamic DNS để đổi domain name đó thành địa chỉ IPv4 toàn cầu của FTTH router. Tôi đề nghị dùng dịch vụ miễn phí dynv6.com. Dynv6.com cho phép đổi domain name của bạn thành một địa chỉ IPv4 và một địa chỉ IPv6. Bạn sẽ cho cloud server chạy một script dynv6.sh để ghi hai địa chỉ đó vào database của dynv6.com mỗi lần cổng Ethernet của server bật lên. Script dynv6.sh được download từ Dynv6 và đặt vào folder /etc/networkd-dispatcher/routable.d/. Bạn cần chmod để script dynv6.sh được quyền executable và bạn cũng cần phải sửa vài dòng đầu script để đặt giá trị cho các variable hostname, device, token. Hostname là domain name mà bạn đã đăng ký với dynv6.com, device là tên của Ethernet port (xem tên đó bằng cách đánh lệnh ip addr), token do dynv6.com cấp cho domain name của bạn.

Script dynv6.sh sẽ ghi địa chỉ IPv6 của cloud storage server và địa chỉ IPv4 toàn cầu của router vào domain name tại dynv6.com. Với cách làm trên thì cloud storage server không biết khi router bị đổi địa chỉ IPv4 (kết nối Internet bị ngắt ra và nối lại) và không ghi lại, vì vậy bạn cần cho script dynv6.sh chạy lặp lại vài lần mỗi ngày bằng cách copy/link nó vào /etc/cron.hourly/.

SSL certificate

Để cho an toàn khi gõ password login server, server phải dùng mã hoá SSL. Bạn có thể xin SSL certificate miễn phí cho server bằng cách chạy lệnh sudo nextcloud.enable-https lets-encrypt ở console của server. Lệnh đó sẽ hỏi domain name mà bạn đã đăng ký ở dynv6.com và xin một SSL certificate cho domain name đó từ dịch vụ Let’s encrypt.

Sử dụng

Cài đặt client

Download client applications từ Nextcloud.

Client trên desktop computer chỉ có chức năng synchronize file giữa client và cloud server.

Mobile app cũng có chức năng synchronize file giữa client và cloud server, ngoài ra nó còn tự động upload file hình mới tạo ra trong mobile và play một số file audio và video.

Web interface

Bạn có thể quản lý file của bạn trong cloud server: upload, download, delete, move, copy, rename files.
Bạn có thể edit text files, xem pdf files.
Bạn có thể cài thêm các app vào Nextcloud server để làm được nhiều việc khác với Web Interface:

Share files

Từ web interface và mobile app, bạn có thể share file hoặc folder bằng cách tạo một link đến file hay folder đó rồi gửi cho người được share. Người được share có thể download file hoặc nếu được bạn cho phép thêm thì họ có thể upload file vào cloud server của bạn.

Multimedia Streaming

Bạn có thể dùng các multimedia player để thưởng thức nội dung trong cloud server qua WebDAV. Tuy nhiên streaming qua WebDAV tốn nhiều công sức nên máy yếu sẽ không làm nổi.
Cái máy laptop cũ CPU Atom N570 2 core 4 thread 1666MHz và 2GB RAM của tôi có thể streaming audio file nhưng không streaming nổi video file. Khi streaming video file, server sinh ra hơn 20 process php_fpm để gửi file ra, hậu quả là máy không đủ RAM và tốn nhiều thời gian swap các process.

Thay vì streaming qua WebDAV, tôi share đĩa cứng qua NFS cho app Kodi phát thật nhẹ nhàng. Thật ra khi quyết định dùng máy laptop cũ này làm server, tôi đã nghĩ đến chức năng NFS file server, rồi tìm thấy Nextcloud với những tính năng vượt quá mong đợi. Bây giờ tôi dùng Nextcloud với những file làm việc trên máy tính và hình chụp trên smartphone, NFS để share multimedia file.

Administrating

Backup

Để đề phòng mất file khi đĩa cứng trong cloud storage bị hư hoặc do lỡ tay xoá thì bạn cần backup file trong cloud storage ra một chỗ khác, external hard disk với cổng USB là thích hợp nhất. Hard disk đó cần được format theo dạng NTFS hoặc ext2/3/4 của Linux.

Dùng lệnh rsync có sẵn trong Linux để thực hiện incremental backup. Mỗi lần backup rsync sẽ chép cloud storage ra một folder mới trong external disk. Trong lần backup đầu tiên, gọi là full backup, rsync chép tất cả file. Trong mỗi lần backup sau, rsync chỉ chép những file có thay đổi trong khoảng thời gian từ lần backup trước và link những file không thay đổi từ folder backup trước sang folder backup sau, nhờ vậy tất cả các file đều có trong mỗi folder backup nhưng không tốn nhiều chỗ trong đĩa.

Tổ chức các folder trong đĩa backup như sau:
Folder backup
  User i
    Set j
      yyww

File của mỗi user được backup riêng dưới từng nhánh folder user i. Trong nhánh user i có nhiều bộ backup set j, mỗi set j gồm một folder full backup và nhiều folder incremental backup, mỗi folder được đặt tên gồm hai số cuối của năm và hai số thứ tự của tuần trong năm. User i là username trong Nextcloud. Set j là tên của một bộ backup, có thề đặt tên theo năm bắt đầu full backup của bộ đó.

Nên chạy lại full backup sau một thời gian dài (khoảng vài năm) để bản full backup mới không chứa những file đã bị cố ý xoá trong vài năm qua.

Bấm vào đây để xem script backup (chạy mỗi tuần)
#!/bin/bash -e
# incremental backup
# incbackup.sh user set dest

user=$1
backupset=$2
thisweek=`date +'%y%U'`
sourcefolder="/var/www/cloud/data/$user/files/"
dest="$3/Backup/$user"
#dest="/tmp/Backup/$user"
#testoption='--dry-run'
testoption=''

fullbackup ()
{
  printf "Full backup for %s to set %s\n" $user $backupset;
  mkdir $dest/$backupset/$thisweek;
  rsync -vhrlt $testoption $sourcefolder $dest/$backupset/$thisweek
}

incrementalbackup ()
{
  printf "Incremental backup for %s to set %s, last time %s\n" $user $backupset $lasttime;
  mkdir $dest/$backupset/$thisweek;
  rsync -vhrlt $testoption --link-dest=$dest/$backupset/$lasttime $sourcefolder $dest/$backupset/$thisweek
}

if [ $# -lt 3 ]
then
	echo "not enough parameters, user set dest";
	exit
fi
if [ ! -d $dest ]
then
  printf "Destination %s not found!\n" $dest;
  exit 1
fi
if [ -d $dest/$backupset ]
then
  lasttime=`ls -a $dest/$backupset | sort | tail -1`;
  if [ $lasttime == $thisweek ] # 
  then
    echo "You have already done backup this week. Wait until Sunday!"
  else
    if [ $lasttime == ".." ] # not any backup exists
    then # full backup
      fullbackup
    else # incremental backup
      incrementalbackup
    fi
  fi
else
  mkdir $dest/$backupset;
  fullbackup;
fi

Restore

Nếu bạn cần lấy lại một version trước đây của file đang còn trong cloud storage (và local disk), bạn chỉ cần dùng Nextcloud web interface để chọn dùng lại version đó.

Để restore lại file hoặc folder đã bị lỡ tay xoá mất, bạn cũng dùng web interface để lấy lại. Nếu file đã lỡ bị xoá vĩnh viễn khỏi cloud server thì bạn cắm đĩa backup vào máy client, chép file hoặc folder cần thiết từ folder backup mới nhất vào máy client.

Shutdown

Shutdown server bằng cách chạy lệnh sudo init 0 ở console của server.

Chi phí

Chi phí sử dụng cloud storage server này chỉ gồm tiền điện server dùng 24/7. Máy laptop cỡ nhỏ chỉ tốn khoảng 15W-20W, mỗi ngày tốn khoảng 360Wh-480Wh, mỗi tháng tốn khoảng 10,8kWh-14,4kWh. Tính theo giá điện sinh hoạt bậc sáu là 3219,7₫/kWh thì mỗi tháng tốn khoảng 35K₫-46K₫.
Chú ý: máy desktop hao điện hơn máy laptop rất nhiều, có thể hao gấp 3-5 lần.
Nếu không tìm được một máy laptop cũ để làm cloud storage server, bạn cũng có thể mua một máy tính nhỏ như RaspberryPi. RaspberryPi dùng SD card thay cho đĩa cứng chứa hệ điều hành, và bạn có thể gắn thêm đĩa cứng ngoài qua USB để chứa file.
Các bài liên quan:
* Những kinh nghiệm khác

Trang-web này được áp-dụng Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. Bạn được phép chép lại trang-web này, với điều-kiện không được thay-đổi nội-dung và không dùng cho mục-đích thu-lợi và ghi rõ nguồn-gốc https://LeHBoi.github.io. Điều kiện trên cũng áp dụng với domain name trước đây của website này là LHBOI.NAME.VN.