Cài đặt Remark42 - Comment Systems

Remark42 là một hệ thống bình luận mã nguồn mở, nhẹ và đơn giản, được thiết kế để tích hợp với các trang web và blog. Remark42 cho phép người dùng bình luận với tài khoản mạng xã hội hoặc ẩn danh, hỗ trợ định dạng markdown, phân cấp bình luận, thông báo email, kiểm duyệt và nhiều tính năng khác. Remark42 cũng tôn trọng quyền riêng tư của người dùng và không sử dụng cookie hay theo dõi hành vi. Remark42 có thể được triển khai dễ dàng với Docker hoặc Kubernetes, và có thể tùy biến giao diện để phù hợp với thiết kế của trang web.

  • Đăng nhập xã hội qua Google, Twitter, Facebook, Microsoft, GitHub, Apple, Yandex, Patreon và Telegram
  • Đăng nhập qua email
  • Truy cập ẩn danh tùy chọn
  • Nhận xét lồng nhau đa cấp với cả bản trình bày dạng cây và đơn giản
  • Nhập từ Disqus, Commento và WordPress
  • Hỗ trợ Markdown với thanh công cụ formatter thân thiện
  • Người kiểm duyệt có thể xóa nhận xét và chặn người dùng
  • Hệ thống bỏ phiếu, ghim và xác minh
  • Nhận xét có thể sắp xếp
  • Tải lên hình ảnh bằng cách kéo và thả
  • Trình trích xuất cho các nhận xét gần đây, bài đăng chéo
  • RSS cho tất cả các nhận xét và mỗi bài đăng
  • Telegram, Slack, email và thông báo quản trị webhook cho mỗi nhận xét mới trên trang web của bạn
  • Thông báo qua email và Telegram cho người dùng để họ nhận được thông báo khi ai đó trả lời nhận xét của họ
  • Xuất dữ liệu sang JSON với sao lưu tự động
  • Không có cơ sở dữ liệu bên ngoài, mọi thứ được nhúng trong một tệp dữ liệu duy nhất
  • Hoàn toàn dockerized và có thể được triển khai trong một lệnh duy nhất
  • Một tệp thực thi khép kín có thể được triển khai trực tiếp cho Linux, Windows và macOS
  • Giao diện người dùng sạch sẽ, nhẹ và có thể tùy chỉnh với các chủ đề sáng và tối
  • Chế độ nhiều trang web từ một phiên bản duy nhất
  • Tích hợp với SSL tự động (trực tiếp hoặc qua proxy)
  • Tập trung vào quyền riêng tư

Để demo cho bài này thì mình cài trên VPS Oracle chạy Ubuntu 22.04, 1 GB RAM, location Singapore

Cấu hình VPS

Nếu bạn dùng VPS hãng khác, đã cài docker, docker-compose thì không cần làm bước bên dưới

# update OS
sudo apt update && sudo apt upgrade -y

# 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
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

# bypass Oralce
sudo wget --no-check-certificate https://raw.githubusercontent.com/bibicadotnet/NeverIdle-Oracle/master/VM.Standard.E2.1.Micro.sh -O /usr/local/bin/bypass_oracle.sh
chmod +x /usr/local/bin/bypass_oracle.sh
nohup /usr/local/bin/bypass_oracle.sh >> ./out 2>&1 <&- &
crontab -l > bypass_oracle
echo "@reboot nohup /usr/local/bin/bypass_oracle.sh >> ./out 2>&1 <&- &" >> bypass_oracle
crontab bypass_oracle

Các bước râu ria ở trên VPS nào mình cũng làm, bao gồm cập nhập Ubuntu, tắt firewall, tạo 4G RAM ảo, bật BBR, cài đặt docker, docker-compose và bypass oracle …

Cài đặt Remark42

nano docker-compose.yml

Nội dung bên trong

version: "2"

services:
  remark:
    # remove the next line in case you want to use this docker-compose separately
    # as otherwise it would complain for absence of Dockerfile
    build: .
    image: umputun/remark42:latest
    container_name: "remark42"
    hostname: "remark42"
    restart: always

    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "5"

    ports:
      - "8080:8080"

    environment:
      - REMARK_URL=https://c.bibica.net
      - SITE=bibica.net
      - SECRET=G*vuewN7CHx!N5!oTySM6^L!kc*
      - STORE_BOLT_PATH=/srv/var/db
      - AUTH_ANON=false
      - BACKUP_PATH=/srv/var/backup
      - AVATAR_RESIZE=48
      - ADMIN_SHARED_NAME=bibica
      - [email protected]
      - ADMIN_PASSWD=bibica-net-password
      - ADMIN_SHARED_ID=email_03befe073684443e7b57aa0b6537abe083501247
      - ADMIN_EDIT=true
      - AUTH_EMAIL_ENABLE=true
      - [email protected]
      - AUTH_EMAIL_HOST=smtp.mailgun.org
      - AUTH_EMAIL_PORT=465
      - AUTH_EMAIL_SUBJ=BIBICA.NET Confirmation Comment
      - AUTH_EMAIL_CONTENT_TYPE=text/html
      - AUTH_EMAIL_TLS=true
      - [email protected]
      - AUTH_EMAIL_PASSWD=850d7b1e6571cdb1bcea6b194675b7f6-324e0bb2
      - AUTH_EMAIL_TIMEOUT=10s
      - SMTP_HOST=smtp.mailgun.org
      - SMTP_PORT=465
      - SMTP_TLS=true
      - [email protected]
      - SMTP_PASSWORD=850d7b1e6571cdb1bcea6b194675b7f6-324e0bb2
      - NOTIFY_USERS=email
      - NOTIFY_ADMINS=email
      - NOTIFY_TYPE=email
      - [email protected]
    volumes:
      - ./var:/srv/var

Cấu hình bên trong khá phức tạp, bao gồm xác định tài khoản admin, đăng kí, login tài khoản qua email, gửi email qua SMTP Mailgun, không cho comment ẩn danh ….

Mình nghĩ ai đã comment nghĩa là muốn có câu trả lời cho thắc mắc của họ, thế thì cần email để biết khi nào có comment trả lời, nên mình yêu cầu có email thực cho chuyện này và tắt tùy chọn comment ẩn danh AUTH_ANON=false

Chạy lệnh bên dưới để hoàn thành cài đặt

docker-compose pull && docker-compose up -d

Cấu Hình Cloudflare Tunnels

Đơn giản nhất thì dùng Cloudflare Tunnels làm Reverse Proxy thay thế cho dãy IP:8080

Tạo tài khoản Cloudflare Zero Trust ->Access -> Tunnel -> Create a tunnel -> đặt 1 tên cho dễ nhớ (comment.bibica.net) -> Install and run a connector

2023 10 28 2 59 29

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

Lúc này thì có thể truy cập vào trang demo Remark42 qua đường dẫn https://c.bibica.net/web/

Tích hợp vào trang web

Remark42 khi hoạt động chỉ thêm 1 đoạn script nhỏ, nên cơ bản bạn có thể add Remark42 vào mọi nền tảng

Muốn hiện vị trí comment vào đâu thì thêm đoạn code bên dưới vào

<script>
  var remark_config = {
    host: "https://c.bibica.net",
    site_id: 'bibica.net',
    theme: 'light',
     max_shown_comments: 100,
  show_rss_subscription: false,
no_footer: true
  };
</script>
<script>!function(e,n){for(var o=0;o<e.length;o++){var r=n.createElement("script"),c=".js",d=n.head||n.body;"noModule"in r?(r.type="module",c=".mjs"):r.async=!0,r.defer=!0,r.src=remark_config.host+"/web/"+e[o]+c,d.appendChild(r)}}(remark_config.components||["embed"],document);</script>
<div id="remark42"></div>

Bypass cache Cloudflare

2023 10 28 4 27 02

Nếu bạn dùng Cache Rules Cloudflare để cache trang thì có thể bypass Remark42 qua cookie 2 giá trị JWT và XSRF-TOKEN, tránh tình huống 1 người đăng nhập mà ai cũng thấy là người đó

JWT và XSRF-TOKEN

Frontend User

2023 10 28 4 37 08

Các tính năng liên quan tới comment theo mình là đủ dùng, user có thể tự sửa, xóa comment của mình nếu không thích, bạn cũng có thể set cho user upload ảnh lên để tiện việc trao đổi

Remark42 mặc định không gửi bất cứ email nào cho người dùng, comment xong muốn theo dõi các trả lời, thì phải bật tùy chọn subscribed

Frontend Admin

2023 10 28 4 46 16

Phía quản trị có thể tắt comment 1 bài viết, xóa, khóa user, hoặc pin comment lên đầu …. cũng khá là đầy đủ

Tốc độ

2023 10 28 4 51 33

Remark42 có tốc độ tốt, comment như là đang chat ấy 😀 rất hiệu quả nếu trang có lượng tương tác qua lại nhiều

Mà khoản tốc độ thì mình thấy gần như mọi Comment Systems đều rất tốt, cũng không có gì đặc biệt

Import from WordPress

Phần doc tác giả viết tại đây, chép file .xml vào thư mục /root/var/srv/var sau đó chạy lệnh bên dưới

docker exec -it remark42 import -p wordpress -f /srv/var/bibicanet.WordPress.2023-10-28.xml -s bibica.net

Các comment được import vào khá tốt, mỗi cái không hiểu sao phần ảnh avatar không có 😀

Hiệu quả mang lại?

Việc cài đặt Remark42 theo mình là quá mức phức tạp nếu bạn chỉ muốn 1 hệ thống comment cho 1 trang cá nhân, việc backup bảo trì hay mọi thứ khác đều phải tự cấu hình, khá phiền

Chi phí cũng không hề rẻ, cần 1 con VPS để chạy, muốn gửi email cần dùng 1 dịch vụ riêng

Remark42 sẽ thực sự hiệu quả, nếu bạn áp dụng trên các trang dạng tĩnh, không có hệ thống comment, còn dùng trên WordPress, trang đó lượng tương tác phải cực nhiều mới đáng cho sự đánh đổi này

Comment gốc của WordPress tuy không nhanh bằng các hệ thống Comment Systems bên ngoài như Remark42, có điều trên cách vận hành của 1 trang blog, thi thoảng mới có 1 comment mới, theo mình cũng khá đủ dùng, nó không cần tương tác mạnh như forum hay live chat …

Thứ mình thấy phiền nhất của hệ thống comment ngoài là vấn đề backup, tống hết mọi thứ trên WordPress bạn chỉ cần backup 1 lần, giờ dùng thêm comment ngoài, bạn lại phải backup thêm cái file của nợ này, dù dung lượng nó bé tẹo, chỉ khoảng 100-200kb, nhưng …. phiền 😀

Sau khi cân đong đo đếm các thứ, dù đã cấu hình gần như hoàn chỉnh cho Remark42, mình vẫn sẽ dùng lại hệ thống comment gốc từ WordPress

Thực tế giải pháp ban đầu mình hướng tới cho Comment Systems là chạy qua Cloudflare Workers, trên cơ sở hạ tầng của Cloudflare sẽ đảm bảo vấn đề tốc độ và độ ổn định hơn, tiếc là chưa ai viết hoàn chỉnh ra 1 sản phẩm tương tự như Remark42

Bạn nào có nhu cầu hay muốn thử hệ thống comment ngoài có thể thử Remark42 😀

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