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 - ADMIN_SHARED_EMAIL=bibica@gmail.com - ADMIN_PASSWD=bibica-net-password - ADMIN_SHARED_ID=email_03befe073684443e7b57aa0b6537abe083501247 - ADMIN_EDIT=true - AUTH_EMAIL_ENABLE=true - AUTH_EMAIL_FROM=BIBICA.NET@bibica.net - 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 - AUTH_EMAIL_USER=BIBICA.NET@bibica.net - AUTH_EMAIL_PASSWD=850d7b1e6571cdb1bcea6b194675b7f6-324e0bb2 - AUTH_EMAIL_TIMEOUT=10s - SMTP_HOST=smtp.mailgun.org - SMTP_PORT=465 - SMTP_TLS=true - SMTP_USERNAME=confirmation@email.bibica.net - SMTP_PASSWORD=850d7b1e6571cdb1bcea6b194675b7f6-324e0bb2 - NOTIFY_USERS=email - NOTIFY_ADMINS=email - NOTIFY_TYPE=email - NOTIFY_EMAIL_FROM=noreply@bibica.net 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
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
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
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
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 độ
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
và /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 😀
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ị!