🌟 写在前面:为什么非要折腾评论系统? 如果你看过我上一篇关于从Halo换到Hexo的文章,大概知道我是个什么样的博主了。 射手座,爱折腾,总觉得“太舒服的地方待不住”。博客从动态换到静态,从有服务器变成没服务器,一切都挺好——除了一个问题:没有评论区了。 静态博客就是这样,干净是真干净,寂寞也是真寂寞。写完一篇文章,发出去,然后就没了。不知道有没有人看过,不知道人家看完想说什么,像对着空屋子说话。 有人会说:可以用第三方评论啊,Disqus、 utterances、giscus…… 我都试过。Disqus太臃肿,还带广告;utterances依赖GitHub Issues,国内访问有时抽风;giscus不错,但毕竟数据在GitHub上,总有一种“寄人篱下”的感觉。 作为一个在广东长大的孩子,我骨子里有点“家己人”的情结——自己的东西,最好放在自己家里。 于是盯上了Twikoo。 🤔 第一回合:Twikoo是什么?为什么选它? Twikoo,一个简洁、安全、免费的静态网站评论系统。说来也巧,这名字听着像“Twi”(Twitter)加“koo”(酷),但用起来的感觉,更像“踢开”——踢开那些复杂臃肿的评论方案,回归简单。 它有几个地方特别打动我: ✨ 优点一:数据自己管 Twikoo支持多种部署方式:云开发、Vercel、私有部署、Docker…… 我选的是私有化部署,把评论数据放在自己的服务器上。服务器我有啊,虽然配置不高,但跑个评论系统绰绰有余。数据自主可控,不用担心厂商哪天政策变动、免费额度用完。 ✨ 优点二:轻量干净 Twikoo的页面风格简洁,没有多余的东西。支持回复、点赞、表情、图片粘贴,该有的都有,不该有的都没有。访客在昵称栏输入QQ号,会自动补全QQ昵称和邮箱,这个细节挺贴心的。 ✨ 优点三:管理方便 内嵌式管理面板,密码登录就能查看评论、隐藏、删除、修改配置。还支持邮件通知、微信提醒(通过Server酱)、QQ提醒(通过Qmsg酱)。有人评论了,我能第一时间知道。 ✨ 缺点嘛……不支持IE 这年头谁还用IE?不算缺点。 🛠️ 第二回合:部署前要准备什么? 动手之前,先把家伙事儿备齐: 一台服务器(我用的就是之前跑Halo那台,CentOS 7.x) 一个域名(最好给Twikoo单独配个二级域名,比如twikoo.yourdomain.com) Docker环境(没有的话要先装) 一点点耐心(射手座最不缺的就是这个) 📦 第三回合:开始部署(详细步骤版) 第一步:解析二级域名 给Twikoo安排一个专属门牌号。进入你的域名DNS管理后台,添加一条A记录: 记录类型:A 主机记录:twikoo(或其他你喜欢的二级域名前缀) 记录值:你的服务器IP地址 解析生效后,可以用ping twikoo.yourdomain.com验证一下。 第二步:用Docker拉起Twikoo容器 方案一:命令行部署(推荐) 登录服务器,执行以下命令: bash docker run --name twikoo -e TWIKOO_THROTTLE=1000 -p 8181:8080 -v ${PWD}/data:/app/data -d imaegoo/twikoo 这条命令做了几件事: --name twikoo:给容器起个名字 -e TWIKOO_THROTTLE=1000:设置每个IP每10分钟最多发表1000条评论(防刷) -p 8181:8080:将服务器的8181端口映射到容器的8080端口 -v ${PWD}/data:/app/data:把数据挂载出来,容器删了数据还在 -d imaegoo/twikoo:后台运行,使用官方镜像 方案二:宝塔面板部署(可视化) 如果你用的是宝塔面板(9.2.0及以上版本),更简单: 登录宝塔,左侧导航栏点击Docker,先安装Docker服务(如果没装的话) 安装完成后,在应用商店中找到Twikoo 点击安装,配置域名、端口等基本信息 如果填写了域名,宝塔会自动帮你配置反向代理;如果不填域名,需要勾选“允许外部访问”,然后通过IP+端口访问 第三步:验证容器是否运行 命令行执行docker ps,看到twikoo在列表里,说明运行成功。 浏览器访问http://你的服务器IP:8181,如果看到以下输出,代表Twikoo部署完成: text Twikoo 云函数运行正常 第四步:配置Nginx反向代理 直接用IP加端口访问,既不优雅也不安全。通过Nginx反向代理,可以实现: 用域名访问(如twikoo.yourdomain.com) 后续配置HTTPS 隐藏真实端口,提高安全性 Nginx配置示例: nginx upstream twikoo { server 127.0.0.1:8181; # 指向本地运行的Twikoo端口 } server { listen 80; server_name twikoo.yourdomain.com; # 换成你的二级域名 location / { proxy_pass http://twikoo; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } 配置好后,重启Nginx。 第五步:部署SSL证书 为了保证数据传输安全,强烈建议配置HTTPS。 宝塔用户:在反向代理站点中,点击“SSL”选项卡,选择“Let‘s Encrypt”免费证书,开启“强制HTTPS”即可。 命令行用户:可以用Certbot申请证书,然后修改Nginx配置: nginx server { listen 443 ssl; server_name twikoo.yourdomain.com; ssl_certificate /path/to/your/cert.pem; ssl_certificate_key /path/to/your/privkey.pem; location / { proxy_pass http://twikoo; # ... 其他配置同上 } } server { listen 80; server_name twikoo.yourdomain.com; return 301 https://$server_name$request_uri; # HTTP自动跳转HTTPS } 配置完成后,访问https://twikoo.yourdomain.com,看到“Twikoo云函数运行正常”,说明HTTPS配置成功。 🎨 第四回合:Hexo前端配置 Twikoo服务端跑起来了,接下来要让博客前端能调用它。 1. 在head中引入Twikoo脚本 打开Hexo主题的配置文件(不同主题位置不同,我用的主题是在layout/_partial/head.ejs),添加: html <script src="https://cdn.jsdelivr.net/npm/twikoo@1.6.41/dist/twikoo.all.min.js"></script> 版本号可以用最新的,我用的1.6.41。 2. 在文章页添加评论区容器 在文章页模板的合适位置(比如文章末尾),添加: html <div id="twikoo"></div> 3. 初始化Twikoo 在页面底部添加初始化脚本: html <script> twikoo.init({ envId: 'https://twikoo.yourdomain.com', // 换成你的Twikoo地址 el: '#twikoo', // 容器选择器 lang: 'zh-CN', // 语言 }); </script> 不同主题的集成方式略有差异。如果你的主题支持自定义评论(比如Volantis、Icarus等),通常在主题配置文件中直接填envId就行。 4. 重新生成并部署 bash hexo clean hexo generate hexo deploy 🔧 第五回合:后台管理与配置 评论框出来了,现在要进后台设置一下。 首次登录 在评论区右下角,会有一个蓝色的小齿轮图标,点击它。第一次进入会让你设置管理员密码,请务必记住这个密码,忘了会比较麻烦。 登录后,你就可以: 配置邮件通知 在管理面板的“通知”设置里,可以配置SMTP邮箱。有人评论时,你会收到邮件提醒。如果用QQ邮箱,需要获取授权码而不是直接用密码。 配置反垃圾 Twikoo支持腾讯云内容安全,可以用来过滤垃圾评论。腾讯云提供1个月免费试用,到期后按量付费,25元/万条。注意不要买套餐,对个人博客来说太浪费了。 个性化设置 你还可以自定义: 评论框背景图片 “博主”标识文字 通知邮件模板 表情列表 必填项(昵称/邮箱/网址) ❓ 第六回合:常见问题 Q:容器重启后数据会丢吗? A:不会。因为我们挂载了-v ${PWD}/data:/app/data,数据保存在宿主机的data文件夹里。只要这个文件夹在,重新运行容器数据依然保留。 Q:为什么用私有化部署而不是云开发? A:云开发有免费额度限制(比如腾讯云每日读取次数限制),超出要付费。私有化部署只要服务器不宕机就永久可用,数据完全自主可控。 Q:以后想升级Twikoo怎么办? A:用Docker的话,拉取新镜像,重新运行容器就行。数据卷挂载着,升级不会丢数据。我之前用Node私有部署,几年后想升级,因为node版本太老各种报错,换了Docker真香。 Q:忘记管理员密码怎么办? A:可以查看Twikoo官方文档的解决方案,或者在服务器上找找配置文件(数据卷里的data文件夹)。 🌈 最后想说 折腾了两天,终于把Twikoo跑起来了。 现在每篇文章下面,都有一个小小的评论区。像给每篇文字开了一扇窗,等着有缘人路过时,探头进来说句话。 我知道静态博客配评论系统,多少有点“逆潮流”。现在谁还在博客评论区聊天啊?想聊天的都去微博、去小红书、去微信群了。 但我还是喜欢这种感觉——你在我的地盘上留言,我在我的地盘上回复。没有算法推荐,没有信息流干扰,就是两个人,隔着屏幕,说几句话。 像小时候在老家的院子里,有人路过,喊一声“食咗饭未”,你应一声“食咗,你咧”。 简单,但真实。 如果你也折腾了Twikoo,遇到什么问题,或者有什么心得,欢迎在下面留言——当然,前提是你已经折腾好了评论区,才能在这篇文章下面留言。这个套娃还挺有意思的。 Damon_Zhang 2026年3月12日 广东,窗外有风,适合折腾代码
给博客安个家:本地部署Twikoo评论系统全纪录
笔记