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

推荐订阅源

Engineering at Meta
Engineering at Meta
T
Threatpost
P
Palo Alto Networks Blog
NISL@THU
NISL@THU
O
OpenAI News
Project Zero
Project Zero
G
GRAHAM CLULEY
P
Privacy International News Feed
A
Arctic Wolf
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
M
MIT News - Artificial intelligence
T
Threat Research - Cisco Blogs
S
Security @ Cisco Blogs
Google DeepMind News
Google DeepMind News
B
Blog RSS Feed
D
Docker
aimingoo的专栏
aimingoo的专栏
博客园 - 【当耐特】
N
Netflix TechBlog - Medium
云风的 BLOG
云风的 BLOG
雷峰网
雷峰网
W
WeLiveSecurity
P
Proofpoint News Feed
腾讯CDC
Cloudbric
Cloudbric
S
Secure Thoughts
C
Check Point Blog
博客园 - Franky
T
The Exploit Database - CXSecurity.com
T
Troy Hunt's Blog
GbyAI
GbyAI
Security Archives - TechRepublic
Security Archives - TechRepublic
Application and Cybersecurity Blog
Application and Cybersecurity Blog
月光博客
月光博客
C
Cyber Attacks, Cyber Crime and Cyber Security
I
Intezer
TaoSecurity Blog
TaoSecurity Blog
L
Lohrmann on Cybersecurity
V
Visual Studio Blog
F
Fortinet All Blogs
博客园 - 叶小钗
C
CXSECURITY Database RSS Feed - CXSecurity.com
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recorded Future
Recorded Future
C
Cisco Blogs
博客园 - 司徒正美
Stack Overflow Blog
Stack Overflow Blog
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research

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 收集个人网站统计数据