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
- Cấu hình VPS, cài đặt các thứ cần thiết
- Copy dữ liệu ở server cũ, upload lên server mới, chạy docker
- Tạo crontab tự đồng bộ 1 phút 1 lần
- Tạo backup mỗi ngày 1 lần, lưu trữ trong khoảng 1 tháng
- Việc cuối cùng là cập nhập IP mới qua Cloudflare Turnstile (downtime ít phút) 😛
Ở đ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.conf
và Artalk.sh
, theo cấu trúc như bên dưới
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/
- #!/bin/bash
- Tạo thư mục /root/Artalk/backup/ trên VPS
- 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/
- Copy file Artalk.zip vào thư mục
backup_dally_Artalk
trên Cloudflare R2 - 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 - 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
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
- 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 :]]
Chính sách bình luận: Chúng tôi rất trân trọng các bình luận của bạn và cảm ơn thời gian bạn dành để chia sẻ ý tưởng và phản hồi.
Ghi chú: Những bình luận được xác định là spam hoặc chỉ mang tính quảng cáo sẽ bị xóa.
• Để cải thiện trải nghiệm bình luận, chúng tôi khuyến khích bạn tạo một tài khoản Gravatar. Thêm avatar vào tài khoản Gravatar sẽ giúp bình luận của bạn dễ nhận diện hơn đối với các thành viên khác.
• ✂️ Sao chép và 📋 Dán Emoji 💪 giúp bình luận thêm sinh động và thú vị!