Bash script move server for Artalk – Comment Systems

Bài này mình tách nhỏ ra từ bài gốc về Artalk – Comment Systems, chủ yếu cho gọn, vì bài đó dài quá

Phần cũng viết ra để nhớ, chứ không 1 thời gian sau là quên 😛 phần cũng muốn kiểm nghiệm xem code có chạy không =)) tiện thử xem trên 1 con VPS tại US, tốc độ Artalk có bị ảnh hưởng nhiều ở điều kiện sử dụng thực tế không?

Artalk có cấu hình siêu đơn giản cho vấn đề backup, restore, tổng các file quan trọng của nó chỉ tầm 6-7 file, nên ta có thể dùng bash script backup 1 phút 1 lần bằng Rclone lên các dịch vụ như Cloudflare R2 miễn phí  …. nếu bạn dùng các hình thức khác thì tự sửa lại cho phù hợp với nhu cầu

  1. Cấu hình VPS, cài đặt các thứ cần thiết
  2. Copy dữ liệu ở server cũ, upload lên server mới, chạy docker
  3. Tạo crontab tự đồng bộ 1 phút 1 lần
  4. Tạo backup mỗi ngày 1 lần, lưu trữ trong khoảng 1 tháng
  5. Việc cuối cùng là cập nhập IP mới qua Cloudflare Turnstile (downtime ít phút) 😛

2023 11 25 9 53 47

Ở điều kiện đồng bộ dự liệu liên tục 1 phút 1 lần, request hàng tháng chỉ ~ 1/3 tài nguyên miễn phí R2 cung cấp, khá ngon 😀

Tạo mới VPS

  • Tạo 1 VPS Oracle tại US, gói miễn phí cấu hình thấp nhất VM.Standard.E2.1.Micro chạy Ubuntu 22.04, 1 GB RAM
  • Login với quyền root

Cập nhập OS

sudo apt update && sudo apt upgrade -y && sudo reboot

Cài đặt tự động Artalk

Để đơn giản quá trình backup, restore, bạn có thể bổ xung 2 file thêm vào thư mục Artalk trên Cloudflare R2 là rclone.confArtalk.sh, theo cấu trúc như bên dưới

2023 11 20 5 49 09

rclone.conf: file cấu hình của Rclone, cấu hình cũ tại bài gốc Artalk – Comment Systems

Artalk.sh: file bash script auto cài đặt mọi thứ (nội dung như bên dưới)

  • Tạo 1 bash script có nội dung như sau
#!/bin/bash

# set locale
locale-gen en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

# Tắt Firewall
sudo apt remove iptables-persistent -y
sudo ufw disable
sudo iptables -F

# Chỉnh về múi giờ Việt Nam
timedatectl set-timezone Asia/Ho_Chi_Minh

# Tạo swap 4GB RAM
sudo fallocate -l 4G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile && echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
cat <<EOF > /etc/sysctl.d/99-xs-swappiness.conf
vm.swappiness=10
EOF

# Enable TCP BBR congestion control
cat <<EOF > /etc/sysctl.conf
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF

# Cài đặt docker và docker-compose
curl -sSL https://get.docker.com | sh
sudo usermod -aG docker $(whoami)
sudo systemctl start docker
sudo systemctl enable docker
apt install docker-compose -y

# Cài đặt Rclone
apt install unzip -y
curl -O https://downloads.rclone.org/rclone-current-linux-amd64.zip
unzip rclone-current-linux-amd64.zip
cd rclone-*-linux-amd64
cp rclone /usr/bin/
chown root:root /usr/bin/rclone
chmod 755 /usr/bin/rclone
mkdir -p /usr/local/share/man/man1
cp rclone.1 /usr/local/share/man/man1/
mandb
cd
rclone version

# Chép cấu hình Cloudflare R2 từ Cloudflare R2 xuống VPS mới
sudo wget --no-check-certificate https://cdn.bibica.net/_duong_dan_thu_muc_Artalk/rclone.conf -O /root/.config/rclone/rclone.conf

# Chép dữ liệu Artalk từ Cloudflare R2 xuống VPS mới
rclone copy cloudflare-r2:cdn-bibica-net/_duong_dan_thu_muc_Artalk /root/Artalk

# Cài đặt Artalk
cd Artalk
docker-compose pull && docker-compose up -d
cd

# Dùng cron để tự cập nhập backup 1 giờ 1 lần
crontab -l > artalk
echo "* * * * * rclone sync /root/Artalk cloudflare-r2:cdn-bibica-net/_duong_dan_thu_muc_Artalk" >> artalk
crontab artalk
  • 3 giá trị cần sửa là ở dòng 50, 53, 62
sudo wget --no-check-certificate https://cdn.bibica.net/_duong_dan_thu_muc_Artalk/rclone.conf -O /root/.config/rclone/rclone.conf
  • https://cdn.bibica.net/_duong_dan_thu_muc_Artalk/rclone.conf thay bằng đường dẫn file cấu hình Rclone của bạn
rclone copy cloudflare-r2:cdn-bibica-net/_duong_dan_thu_muc_Artalk /root/Artalk
  • cloudflare-r2: tên file rclone config
  • cdn-bibica-net: tên của bucket Cloudflare R2
  • _duong_dan_thu_muc_Artalk : đường dẫn thư mục Artalk nằm trong bucket

Thay nó bằng vị trí lưu backup của bạn

* * * * * rclone sync /root/Artalk cloudflare-r2:cdn-bibica-net/_duong_dan_thu_muc_Artalk

Do chỉ đồng bộ 7-10 file (không tính ảnh upload, tổng dung lượng thường < 1MB cho trang có 1000 comment), trên Cloudflare R2 miễn phí 1 triệu request mỗi tháng, nên mình set cho chạy 1 phút 1 lần luôn, hạn chế tối đa chuyện mất data comment

  • Nếu bạn không biết chạy bash script làm sao thì cứ save đoạn code ở trên thành 1 file có đuôi .sh, ví dụ Artalk.sh, upload lên VPS thư mục Artalk, sau đó chạy
chmod +x /root/Artalk/Artalk.sh && sudo /root/Artalk/Artalk.sh

Tổng thời gian cài đặt Artalk mất khoảng vài phút

Bổ xung cài đặt nhiều bản backup

Khi dùng Rclone, ta chỉ có 1 bản đồng bộ dữ liệu mới nhất, trong trường hợp bản đang dùng có lỗi, hay lỡ tay xóa nhầm trên VPS, nó tự xóa luôn trên Cloudflare R2, rất nguy hiểm, nên tạo thêm nhiều bản backup khác

Tạo 1 bash script có tên /root/Artalk/data/backup_cron/backup_moi_ngay.sh

#!/bin/bash
mkdir -p /root/Artalk/backup/
zip -r /root/Artalk/backup/Artalk_$(/bin/date +%d.%m.%Y).zip /root/Artalk
rclone copy /root/Artalk/backup/ cloudflare-r2:cdn-bibica-net/backup_dally_Artalk/
rclone delete cloudflare-r2:cdn-bibica-net/backup_dally_Artalk/ --min-age 31d
rm -r /root/Artalk/backup/
  1. #!/bin/bash
  2. Tạo thư mục /root/Artalk/backup/ trên VPS
  3. Nén thư mục /root/Artalk, đặt tên thành Artalk.zip (kèm ngày tháng) sau đó chuyển file này vào bên trong thư mục /root/Artalk/backup/
  4. Copy file Artalk.zip vào thư mục backup_dally_Artalk trên Cloudflare R2
  5. Xóa các file có tuổi thọ > 31 ngày bên trong thư mục backup_dally_Artalk trên Cloudflare R2
  6. Xóa thư mục /root/Artalk/backup/ trên VPS

Ý tưởng của đoạn bash script là nén thư mục /root/Artalk trên VPS lên Cloudflare R2, mỗi ngày lưu 1 bản, lưu tối đa 31 bản

Set tự động backup mỗi ngày lúc 3h sáng (thêm vào bên trong file Artalk.sh)

sudo apt install zip unzip -y
sudo wget --no-check-certificate https://cdn.bibica.net/_duong_dan_thu_muc_Artalk/data/backup_cron/backup_moi_ngay.sh -O /root/Artalk/data/backup_cron/backup_moi_ngay.sh
chmod +x /root/Artalk/data/backup_cron/backup_moi_ngay.sh
crontab -l > artalk
echo "0 3 * * * /root/Artalk/data/backup_cron/backup_moi_ngay.sh" >> artalk
crontab artalk

Sửa lại đường dẫn dòng 2 cho phù hợp với tài khoản Cloudflare R2 của bạn

Lúc này ta se có thêm 1 thư mục backup_dally_Artalk trên trên Cloudflare R2, chứa các backup hằng ngày

2023 11 23 3 48 05

Một ý tưởng khác theo mình cũng ổn, nếu bạn đang dùng WordPress mà cài Artalk như mình

  • Sau khi đồng bộ Artalk -> Cloudflare R2 như thông thường
  • Trên server chứa WordPress, bạn cài Rclone vào, sau đó tạo backup về thư mục root của WordPress, lúc này khi dùng các tool backup dạng Duplicator Pro, nó tự download data của Artalk vào luôn, giữ liệu của cả trang lúc này sẽ thống nhất về mặt dữ liệu và thời gian hơn

Cập nhập Cloudflare Turnstile

  • Bước này để chắc kèo, mình vào DNS của Cloudflare xóa DNS domain cũ của Artalk đi (c.bibica.net), sau đó xóa Tunnels của VPS cũ luôn cho sạch sẽ

Tiếp theo là cài mới một Tunnels mới cho Artalk

  • Cloudflare Zero Trust ->Access -> Tunnel -> Create a tunnel -> đặt 1 tên cho dễ nhớ (Artalk Comment) -> Install and run a connector

2023 11 23 12 01 23

  • Sau đó tạo Public hostnames c.bibica.net tới localhost:8181

Lý thuyết thì ta không cần phải xóa triệt để Tunnels cũ đi như mình nói ở trên, có thể ghi đè Tunnels mới vào là được, mà mình thấy làm như này cho sạch sẽ, downtime tầm vài phút ở hệ thống comment không đáng kể lắm 😀 vì thường cũng hiếm khi phải cài mới lại Artalk

Caddy reverse proxy

comment.bibica.net {
    tls /etc/ssl/bibica.net.pem /etc/ssl/bibica.net.key
    reverse_proxy http://localhost:8181

handle_path /avatar* {
    rewrite * /avatar{uri}
    reverse_proxy https://www.gravatar.com {
    header_up Host {upstream_hostport}
    }
}
}

Theo như tài liệu hướng dẫn tại trang chủ Artalk, reverse proxy trên Caddy là tới port 23366, mà mình thử không thấy chạy, ở bước tạo docker-compose.yaml mình dùng 8181 thay cho 8080 (để tránh chuyện tình cờ trùng với 1 port nào đó) nên trên Caddy reverse proxy điền là 8181

Ưu khuyết?

Cách làm này được ưu điểm là khi backup, restore gần như tự động hoàn toàn, dữ liệu chỉ lệch 1 phút so với thời gian sử dụng thực tế

Có rất nhiều bản backup, nên không lo mất dữ liệu

Bạn chỉ phải cấu hình restore như bài này cho lần cài đặt đầu tiên, sau này restore chỉ cần chạy 2 dòng lệnh:

sudo apt update && sudo apt upgrade -y && sudo reboot
sudo wget --no-check-certificate https://cdn.bibica.net/_duong_dan_thu_muc_Artalk/Artalk.sh && sudo chmod +x Artalk.sh && sudo ./Artalk.sh

Về cơ bản là như thế 😀 chủ yếu mình lười nên làm thành 1 bash script auto mọi thứ, đỡ quên các bước

Restore lại xong xuôi, kiểm tra nếu thấy mọi thứ ổn định hết thì nhớ xóa server cũ đi, nếu vẫn còn dùng, thì vào crontab -e xóa dòng đồng bộ dữ liệu tự động đi, không thì dữ liệu từ 2 server ghi đè lên nhau, dễ nhầm NHẦM dữ liệu cũ lắm

Cách đồng bộ 1 phút tự chạy 1 lần, bất kể file có thay đổi hay không, khá ngu học về mặt lý thuyết, mà Artalk tổng các file chỉ ~ 1MB, nên cũng lười cài đặt đồng bộ khi có sự thay đổi

Speedtest location US

Tạm thì sau khi thử mình thấy code chạy tốt, không gặp vấn đề gì 😀 server tại US dùng theo trải nghiệm thực tế, kiểu ấn vào bài viết, đọc bài, tới phần comment thì bình thường, nhưng thử kiểu cực đoan, xóa hết cache, sau đó mở trang, lập tức kéo chuột xuống cuối cùng để xem comment hiện ra chưa thì ở 1 số trường hợp nhất định, có thể thấy chậm 1 tẹo, thường lần đầu tiên sẽ mất 1-2s mới load xong data comment 😛 các thao tác ghi xóa comment cũng sẽ chậm 1 chút so với server tại Singapore

Nói chứ hiệu năng các Comment Systems đều rất tốt, Artalk hỗ trợ thêm cả cache, nên bình thường thì server tại US mình cũng khá hài lòng 😀

Bạn nào có thừa server US mua sale off kiểu 10$ 1 năm, để không có thể vác ra cài Artalk làm 1 trang comment cũng ổn :]]

Artalk do có rất nhiều tính năng, nên nó chi chít các lỗi lặt vặt, tuy thế nó vẫn là comment systems phù hợp với nhu cầu của mình nhất, nên mình đang lựa chọn nó làm hệ thống comment cho thèng bibica.net, 1 trang mang tính kĩ thuật khá nhiều

Với các trang dạng cơm gạo, tốt nhất không nên dùng các script dạng này, vì độ ổn định không cao, tác giả vui vui không làm nữa là méo mỏ luôn :]]

Comment policy: We love comments and appreciate the time that readers spend to share ideas and give feedback.
Notes: However, those deemed to be spam or solely promotional will be deleted.

You can create a Gravatar account, add avatar, then use that email to comment here, your account will have a more beautiful Avatar, easier to recognize with other members.

Please use real emails, you can receive notifications when comments are replied