惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Exploit Database - CXSecurity.com
F
Fortinet All Blogs
U
Unit 42
F
Full Disclosure
雷峰网
雷峰网
博客园 - 司徒正美
云风的 BLOG
云风的 BLOG
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
罗磊的独立博客
D
DataBreaches.Net
C
Check Point Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
O
OpenAI News
C
CXSECURITY Database RSS Feed - CXSecurity.com
aimingoo的专栏
aimingoo的专栏
S
Security @ Cisco Blogs
大猫的无限游戏
大猫的无限游戏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
SegmentFault 最新的问题
NISL@THU
NISL@THU
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Hacker News
The Hacker News
Webroot Blog
Webroot Blog
Security Latest
Security Latest
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Google DeepMind News
Google DeepMind News
酷 壳 – CoolShell
酷 壳 – CoolShell
N
News | PayPal Newsroom
P
Proofpoint News Feed
B
Blog RSS Feed
MongoDB | Blog
MongoDB | Blog
C
Cybersecurity and Infrastructure Security Agency CISA
N
News and Events Feed by Topic
Google Online Security Blog
Google Online Security Blog
H
Help Net Security
Spread Privacy
Spread Privacy
T
Threat Research - Cisco Blogs
GbyAI
GbyAI
I
Intezer
Application and Cybersecurity Blog
Application and Cybersecurity Blog
M
MIT News - Artificial intelligence
Vercel News
Vercel News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
IT之家
IT之家
MyScale Blog
MyScale Blog
腾讯CDC

pseudoyu

周报 #106 - OpenClaw 实践、搬家与生活的能量 周报 #105 - 打破无聊的社会 2025 年末回顾 - Anything different is good 周报 #104 - 被遗忘的生活一隅 周报 #103 - 工作随想与被吞噬的生活 周报 #102 - 我是如何使用 AI 的 周报 #101 - 消失了三个月,我的生活发生了什么变化 周报 #100 - 过去这十年 周报 #99 - 离开 RSS3,迷茫与重启人生 周报 #98 - 生活之书与 Agentic Coding 周报 #97 - 日本旅行小记 28 岁的自白:去找寻自己 周报 #96 - 基于 Roo Code/Cursor 的 iOS 开发工作流 周报 #95 - All AI 与 No AI 周报 #94 - 生活的界限与真实感 周报 #93 - 婚礼纪录片与失落的电影院 周报 #92 - 数码产品 Porn 与断舍离 周报 #91 - 一席、消失的时代与自由意志 周报 #90 - OVH 服务器、Coolify 与对 AI Coding 的思考 周报 #89 - 博客改版与 TheWan App 发布 周报 #88 - 方大同、《回留》与人生清单 周报 #87 - 我们主持了自己的宝可梦婚礼,还为它办了一个展 周报 #86 - 用影像打败时间 周报 #85 - 京华烟云 Moment in Peking 周报 #84 - 想起他们 Echos of Reverie 周报 #83 - 年初收纳(房间、设备、服务、软件) 周报 #82 - Brand New Year 与写日记 2024 年末回顾 - 不完美的日子 周报 #81 - Engaged -> Married 与时间的尺度 周报 #80 - 关于求婚、爱情与婚姻 求婚誓言 | 爱的本质是被看见 周报 #79 - 清迈旅居、曼谷之行与 Follow RSSHub 开发实践 #01:Telegram 频道 RSS 订阅实现与部署方案 Follow —— 信息获取的另一种形态 周报 #78 - NAS、Chromebook 与 Zeabur 折腾小记 周报 #77 - 一间只属于自己的房间(对亲密关系的思考) 周报 #76 - 关于 Adulting 的思考 周报 #75 - 回答 Dayu 关于独立博客的 9 个问题 周报 #74 - 清迈异闻录 周报 #73 - 《社交网络》、Ego 与中秋的现充生活 周报 #71 - Indie App 体验计划 周报 #70 - 消失的附近,Burnout 与 Boreout 周报 #69 - AI Coding 体验与学习的源动力 周报 #68 - 关于写博客这件事与我生活的色彩 使用 GoatCounter 与 Zeabur 搭建网站数据统计系统 周报 #67 - 使用 follow 重塑我的信息输入系统 周报 #66 - 10x 工程师、技术热情与个人工具箱 从零开始搭建你的免费博客评论系统(Remark42 + fly.io) 周报 #65 - Adventure X 体验、Apple Notes 笔记实践与 EpubKit 周报 #64 - 生活在此处(《斯通纳》与《Normal People》) 使用 WebP Cloud 与 Cloudflare WAF 为你的图床添加隐私和版权保护 当云服务器崩溃时,我是如何救援重要数据的 周报 #63 - 不愉快的订花经历、商家和消费者与日渐 AI 化的人 从零开始搭建你的免费图床系统(Cloudflare R2 + WebP Cloud) 2024 年了,我的博客有了什么变化 周报 #62 - 香港之行、5am club 计划与 Rust 学习 周报 #61 - 好朋友的婚礼与对婚姻的思考 27 岁的自白:成长是一件很扫兴的事 周报 #60 - 虫子旁、教育理念与 EpubKit 周报 #59 - 沙漠之行、家庭与家人 周报 #58 - 远程工作这一年 周报 #57 - 生活在别处(巴厘岛之行) 周报 #56 - 面基 Randy 与考科目二 周报 #55 - 油画体验、博客系统升级与对 self-hosting 的思考 周报 #54 - 漂流计划、钱包被盗与 Home Server 周报 #53 - 空白的三个月、生活漂流与春节 周报 #52 - 自谦型人格与感情的另一个视角 周报 #51 - 追星小鹿 Lawrence 与生病 周报 #50 - 天坛漫步、重拾阅读和费曼学习法 周报 #49 - 烧焦的键盘、庞贝神话展、健康调整与神奇的梦 周报 #48 - 内蒙之行、清迈游民、重启的周报与生活 周报 #47 - 采访、拳击与工作状态 周报 #46 - 告别长发、周报初心与合约开发 个人信息获取与知识管理系统(Heptabase + Logseq + Readwise) 周报 #45 - 读书笔记、知识管理与双城生活 周报 #44 - 静寂工人、xLog 与日常 周报 #43 - In the Mood for Love 周报 #42 - 感情观、生活状态与自我 周报 #41 - 生日的仪式感、时间管理与北京之行 26 岁的自白:推石头的人 周报 #40 - 开源之夏、代码之外与流逝的睡眠 周报 #39 - 初患新冠、过去的心绪与失而复得的分享欲 周报 #38 - Foundry、Logseq 与 Surge Ponte 周报 #37 - 浮生半月闲( 武汉 | 香港 | 五月天) 周报 #36 - 肠胃炎、捏捏近况与新的旅途 周报 #35 - 登报、搬家和生病的捏捏 周报 #34 - Don't Stop the Clocks 周报 #33 - 北京 x 故事 x 离别 周报 #32 - 武汉、久别重逢与流动的心绪 周报 #31 - 开源、前端开发与 ChatGPT 实践 周报 #30 - 开源预算、写作初心与对技术的谦卑 Cosmos 区块链架构与 Tendermint 共识机制 周报 #29 - 日语学习经验、Steam Deck 与居酒屋 周报 #28 - Mastodon、故乡与捉迷藏的猫 周报 #27 - 何以为家 周报 #26 - 博客、客制化键盘和新服务器 周报 #25 - 基于 Crossbell 的个人信息输出与同步系统(重构) 摄影集 #02 - Moment In Peking (The Autumn) 摄影集 #01 - Cat In The Box 2022 年末回顾 - 迷茫、低谷与改变
轻量级开源免费博客评论系统解决方案 (Cusdis + Railway)
pseudoyu · 2022-05-24 · via pseudoyu

前言

cusdis_intro

之前写了一篇《免费的个人博客系统搭建及部署解决方案(Hugo + GitHub Pages + Cusdis)》,讲述了一下我使用 Serverless 和一些开源项目搭建的博客系统,也开了个系列来记录搭建过程。

本篇是关于博客评论系统的解决方案,我最早使用的博客评论系统是万恶的 Disqus,一个笨重且会收集用户隐私的知名评论系统,因为加载比较慢,且免费版本经常会附带一些广告,实在难以忍受,于是换成了另一个基于 GitHub issues 的评论系统 utterances,它会为每篇文章生成一个 issue,将,用户通过授权 GitHub 登录来对 issue 发表评论。这种方式的好处是只需要授权一个 utterances-bot 来进行管理,无需自己部署服务,维护数据库等。但是用了一段时间后,觉得有几点不足:

  1. 基于 GitHub API 进行评论管理,如之后接口变动或对这类利用 issue 进行评论的方式进行限制,会不太稳定
  2. 读者必须要授权 GitHub 登录,非技术人员或使用移动端阅读的读者使用起来很不方便
  3. 会将 GitHub 仓库弄得较乱,也不方便后续迁移到其他系统

经过一番调研 RandyCusdis 很合我的心意。Cusdis 是一个注重数据隐私的开源的评论系统,十分轻量,经过 gzipped 后大约只有 5kb,从名字来看也知道开发者也是难以忍受 Disqus,自己做了一个替代版,因此它也是支持 Disqus 历史数据导入的,很贴心。

虽然这是一个开发早期的项目,但是已经提供了电子邮件通知以及通过 Webhook 联动 Telegram 等方式进行评论提醒,对使用者来说很方便进行管理。Cusdis 提供了免费托管服务与自行部署两种方式,如果不想折腾可以直接用作者提供的服务。自行部署则需要服务器与一个 Postgre SQL 实例,我们主要示范一下自行部署方式。

因为在上一篇 《从零开始搭建一个免费的个人博客数据统计系统(umami + Vercel + Heroku)》 中我使用的是 VercelHeroku 进行搭建的,作为一个爱折腾的人,这个评论系统我们就用 Railway 来搭建部署。

Railway 和 Vercel 类似,也是一个 PaaS 平台,能够支持多种语言项目的部署。对于个人项目来说,它每月提供的 5 美元免费额度非常够用,实测了一下,把之前的 umami 网站数据统计系统 连同 Postgre SQL 数据库实例部署在 Railway 平台,大约一个月 0.7 美元,对于个人使用来说完全足够。

railway_price

比起 Vercel,它同时支持部署数据库实例,可以将数据库与实例一起部署在单个项目中,减少搭建维护成本。下文会对具体搭建部署流程做个记录,因为官方支持 Railway 一键部署方式,整个搭建流程很顺畅。

[2024-06-30 更新]

鉴于 Railway 从去年 8 月起已经取消了 Free Plan,如果依然想完全免费使用,可以使用 Vercel/Netlify/Zeabur 免费部署主项目,并在 Supabase 上部署一个免费的 PostgreSQL 数据库实例,把链接作为环境变量传入 Cusdis 服务中即可,其他流程大同小异。

搭建部署说明

使用 Railway 一键部署服务与数据库实例

首先注册一个 Railway 账号,可以用我的邀请链接。注册登录完成后,点击右上角 New Project 新建项目。

railway_dashboard

然后输入 Cusdis 进行搜索,点击出现的项目即可开始部署。前几步也可以通过点击 Cusdis 项目仓库 中的 Deploy on Railway 按钮进行一键部署。

new_cusids_starter

开始部署前,需要手动填入三个环境变量:

deploy_cusdis_on_railway

  1. USERNAME: 用来登录的账户
  2. PASSWORD: 用来登录的密码
  3. JWT_SECRET: 一个随机字符串

其他一些环境变量已经预先设置默认值,请不要自行修改。

  1. NEXTAUTH_URL: ${{ RAILWAY_STATIC_URL }}
  2. DB_TYPE: pgsql
  3. DB_URL: ${{ DATABASE_URL }}
  4. PORT: 3000

点击部署后,等待完成即可,会自动部署服务并初始化数据库。

cusdis_deploy_done

配置 Cusdis 脚本至个人博客

部署完成后,点击 cusdis 服务生成的链接,点击访问服务 Dashboard。

cusdis_login

此处输入部署前配置的用户名与密码,点击登录。登录完成后,点击 Dashboard,进入项目配置页面。

初次登录会弹窗提示需要配置第一个网站,输入网站名称即可完成添加。后续当我们需要添加网站时,点击侧边栏 New Website,填写网站名称即可完成添加。

add_new_website

因为我已经配置了自己的网站,所以界面会有之前的评论记录。

cusdis_dashboard

下面我们点击上方 Embed Code,复制弹窗中的代码。

cusdis_embed_code

这部份代码需要根据你所用的博客网站类型不同进行部分修改,具体可参考官方文档 的 Integration 模块进行配置。

我所用的是 Hugo,配置如下:

<div
  id="cusdis_thread"
  data-host="xxx"
  data-app-id="xxx"
  data-page-id="{{ .File.UniqueID }}"
  data-page-url="{{ .Permalink }}"
  data-page-title="{{ .Title }}"
></div>

<script defer src="https://cusdis.com/js/widget/lang/zh-cn.js"></script>
<script async defer src="xxx"></script>

其中的 data-hostdata-app-id 等都需要以刚复制出的 Embed Code 内容为准。其中 <script defer src="https://cusdis.com/js/widget/lang/zh-cn.js"></script> 主要实现了汉化,不同语言支持详见文档 i18n 模块

修改后,将其添加到博客的相应位置(一般在最下方),配置部署后,即可看到评论框,呈现效果如下:

cusdis_display

配置自定义域名

Railway 部署自动生成的域名比较长,且有一些字符,不方便记忆。我们可以在 Railway 中为项目配置自定义域名。

railway_custom_domain

填入想要配置的域名/二级域名后,根据官方提示添加 DNS 解析。

railway_domain_dns

例如,我使用的是 Cloudflare 托管的域名,需要先添加一下域名 CNAME 解析。

cloudflare_domain_dns

至此,我们的部署已经完成,可以通过域名访问管理后台,进行评论审核管理等。

更新项目

如前文所述,Cusdis 还是一个正在开发成长的项目,我们想第一时间更新作者发布的新功能。Railway 提供了十分便捷的上游分支管理功能,可以设置项目的父项目,点击即可拉取最新更新,很方便。

railway_update_project

总结

以上就是我们为网站添加 Cusdis 评论系统的全流程,配置完成后无需后续维护,可以便捷地通过看板来进行网站管理与评论审核,且数据存储在 Postgre SQL 数据库实例中,方便导出备份与迁移。这是我的博客搭建部署系列教程之一,请持续关注,希望能对大家有所参考。

参考资料

  1. Cusdis 项目官网
  2. Railway 官方网站
  3. 搭建 umami 收集个人网站统计数据