首页 / 文章 / 个人博客评论系统

个人博客评论系统

前言

这台轻量服务器跑着我的博客 dazyz.art,技术栈是 Express + EJS + SQLite + PM2 + nginx 反代。最近趁着暑假,我把「评论系统」和「安全加固」两件事一起做了。这篇文章记录完整过程和踩过的坑,既是技术笔记,也顺便拿刚上线的评论区测一下(欢迎在底下留言)。

一、先说结论:没装宝塔面板

一开始我问要不要装宝塔面板来管理服务器,结论是——没装,理由很实在:

维度 宝塔面板 我的选择
nginx 被面板接管,现有反代配置失效,可能直接 502 保持原样不动
攻击面 新增 8888 公网端口,是黑客重点扫描目标 零新增公网端口
内存 300~500MB 常驻,2C2G 机器变紧 filebrowser 仅 ~20MB
功能 自带 MySQL/PHP,我用不上 按需上轻量工具

我是安全方向的学生,服务器本来就做了 SSH 限源、关 ICMP、fail2ban、ufw。再开个公网面板端口等于反向操作。所以换成更轻的方案:

  • 文件可视化管理filebrowser(Go 单文件二进制,只绑 127.0.0.1:8080,靠 SSH 隧道访问)
  • 证书自动续期 → 一查发现 certbot.timer 本来就在跑,根本不用装 acme.sh

二、用 filebrowser 做可视化管理

宝塔最大的吸引力是「网页上管文件」。这个需求用 filebrowser 就够,而且它不碰 nginx、不引 docker 守护进程、端口只绑回环地址(公网不可达)。

部署步骤(服务器侧):

# 下载 v2.63.23(国内服务器直连 GitHub 慢,走 ghproxy.net 镜像 + 断点续传)
cd /tmp
for i in $(seq 1 40); do
  curl -fsSL --max-time 60 -C - -o fb.tar.gz \
    'https://ghproxy.net/https://github.com/filebrowser/filebrowser/releases/download/v2.63.23/linux-amd64-filebrowser.tar.gz' \
    && gzip -t fb.tar.gz 2>/dev/null && break
  sleep 2
done
tar -xzf fb.tar.gz
sudo mv filebrowser /opt/filebrowser/

# 关键:sudo mkdir 建出来的目录属 root,ubuntu 写不了数据库,必须改回来
sudo chown -R ubuntu:ubuntu /opt/filebrowser

cd /opt/filebrowser
./filebrowser config init -d filebrowser.db
./filebrowser config set --address 127.0.0.1 --port 8080 --root /opt/my-space -d filebrowser.db

再用 systemd 让它开机自启:

[Unit]
Description=File Browser
After=network.target

[Service]
User=ubuntu
ExecStart=/opt/filebrowser/filebrowser -d /opt/filebrowser/filebrowser.db
Restart=on-failure

[Install]
WantedBy=multi-user.target

本地访问靠 SSH 隧道(不是把端口开到公网):

ssh -L 8080:127.0.0.1:8080 -p xxx -i "你的密钥.pem" ubuntu@49.233.218.199

然后浏览器开 http://127.0.0.1:8080 即可。

踩坑记录:filebrowser v2.x 已经不支持 -v 看版本;而且 sudo mkdir 建出的目录属 root,ubuntu 写不了库,必须用 chown -R 改回来,否则初始化直接报错。

三、证书其实一直在自动续期

我曾以为需要装 acme.sh 接管证书,结果一查——证书是 certbot 签的,certbot.timer 早就是 enabled + active(每天跑两次,到期前自动续)。所以保持现状最稳,硬装 acme.sh 反而可能覆盖现有签发。验证命令:

systemctl is-enabled certbot.timer    # 输出 enabled
sudo certbot certificates              # 看证书和到期日

四、给博客加评论:Giscus

评论系统最终选了 Giscus——基于 GitHub Discussions 的开源方案,零后端、评论存在你自己的仓库里。

为什么不用别的

  • 博客是静态渲染 + SQLite,不想再引一套数据库和后端
  • Giscus 只要 4 个配置值,我的文章页代码本来就是配置驱动的,拿到值直接生效

搭建步骤

  1. GitHub 建一个公开仓库(我用的 CL-c816/community
  2. 仓库 Settings → General → Features 勾选 Discussions
  3. 安装 Giscus App:https://github.com/apps/giscus
  4. 打开 https://giscus.app/zh-CN ,填仓库名 用户名/仓库名,选一个分类,页面底部生成 4 个值:
    • data-repo
    • data-repo-id
    • data-category
    • data-category-id

后端只需写 4 个配置

因为评论做成配置驱动,所以零代码改动,把 4 个值写进 config 表再重启 PM2 就生效:

UPDATE config SET value='CL-c816/community'   WHERE key='giscus_repo';
UPDATE config SET value='R_kgDOUQFxUw'        WHERE key='giscus_repo_id';
UPDATE config SET value='Announcements'        WHERE key='giscus_category';
UPDATE config SET value='DIC_kwDOUQFxU84DE_wk' WHERE key='giscus_category_id';
pm2 restart my-space

文章页模板里就是一句判断,配了才渲染评论区:

<% if (config.giscus_repo) { %>
  <!-- 渲染 giscus 评论区 -->
<% } %>

已知特性

  • 评论者需要 GitHub 账号才能留言(这是 Giscus 的固有机制)
  • 评论实际存在你仓库的 Discussions 里,随时可管理、可删
  • 主题跟随博客明暗切换

五、顺手补的 SEO 与体验

  • sitemap 补聚合页/archive/tags/category/series 之前没收录,已加入
  • 关于页补联系方式 + 友链:邮箱已显示,GitHub / 微信 / 友链在后台填即生效
  • robots.txt 加 AI 爬虫声明:对 GPTBot / CCBot / ClaudeBot 等表态(默认 Allow,提升在 AI 回答里的可见度)

小结

这一轮下来,服务器更稳、更可控,博客也有了互动入口。作为安全方向的学生,我最大的体会是:「能用就行」和「安全可控」之间,往往只差一个「要不要偷懒开公网端口」的选择。 少开一个端口,就少一份被扫的风险。

这篇就是用来测评论区的,看完在底下点个评论试试?😄

分享这篇:
扫码阅读本文 扫码用手机阅读 / 分享

评论