当前位置: 首页 > news >正文

部署 Waline 评论系统到自己的服务器完全指南 (保姆级教程 2026)

转载自 我的个人博客

部署 Waline 评论系统到自己的服务器完全指南 (保姆级教程 2026)

简介

Waline 是一个自托管的静态博客评论系统。基于 Node.js,内置管理后台,数据存 SQLite —— 意味着不需要单独装数据库,一个 Docker 容器就跑了。前端是 Web Component(Vue),原生支持暗黑模式、浏览量统计、表情包、Markdown 渲染、数学公式。

这篇教程假设你有一台服务器和一个域名,带你从零把 Waline 跑起来,每一步都有解释。

为什么选 Waline 而不是 Twikoo

对比WalineTwikoo
数据库SQLite(无需额外容器)MongoDB(必须)
管理后台内置/ui,注册即用访问/#/login设置密码
垃圾过滤Akismet + IP 频率 + 关键词 + 相似度检测仅 IP 频率限制
浏览量统计内置,一行配置不支持
前端框架Web Component(Vue)传统 JS
暗黑模式dark: 'auto'自适应需手动适配
登录方式注册 + GitHub OAuth仅密码
镜像体积~150MB(含 SQLite)需额外 MongoDB 镜像

结论:新项目直接用 Waline,更轻量、功能更全、部署更简单。


第一步:准备工作

你需要这些

东西说明
一台服务器1c1g 足够。能 SSH 上去、能装 Docker
一个域名前端 HTTPS 页面无法请求 HTTP 后端,所以必须有域名配 SSL
一个子域名给 Waline 专用,比如comment.你的域名.com
15 分钟从零到评论可用

没有域名怎么办

如果你还没有域名,先去任意域名注册商买一个(Namesilo / Cloudflare / 阿里云 都行)。最便宜的.xyz一年几块钱。

买完后,在你的 DNS 管理页面添加一条 A 记录,把子域名指向服务器 IP:

类型: A 主机记录: comment (表示 comment.你的域名.com) 记录值: 123.456.789.0 (你的服务器公网 IP) TTL: 600

DNS 生效可能需要几分钟。验证一下:

nslookupcomment.example.com

第二步:安装 Docker

如果你的服务器还没装 Docker,先装上。

# 官方一键安装脚本curl-fsSLhttps://get.docker.com|sudosh# 把当前用户加入 docker 组,以后不用每次加 sudosudousermod-aGdocker$USER# 退出 SSH 重新登录,让用户组生效exit

重新登录后验证:

docker--versiondockerrun--rmhello-world

如果docker pull特别慢或被墙,参考文末「常见问题」配镜像加速。


第三步:生成配置值

部署 Waline 前,先把要填的值准备好。以下 5 个值需要你替换成自己的:

3.1 JWT_TOKEN —— 管理员密钥

这是 Waline 内部用来签发登录凭证的密钥,必须设,必须保密

openssl rand-hex32

输出类似a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6a7b8c9d0e1f2a3b4c5d6e1f2a3b4c5d6把这个字符串记下来,后面要用。

不要用你别的密码,用openssl rand生成的随机值。

3.2 SITE_NAME —— 网站名称

随便写,会显示在管理后台和邮件通知里。比如「XX 的博客」。

3.3 SITE_URL —— 博客地址

你的博客完整地址,带上https://

3.4 SECURE_DOMAINS —— 安全域名

你的域名,不带https://。Waline 评论框允许嵌入的域名白名单。多个域名用逗号分隔。

3.5 AUTHOR_EMAIL —— 你的邮箱

收到新评论时会往这个邮箱发通知(需要配 SMTP,见后面)。

填完后的参考

变量
JWT_TOKENa1b2c3d4...(openssl rand 那串)
SITE_NAME我的博客
SITE_URLhttps://blog.example.com
SECURE_DOMAINSblog.example.com
AUTHOR_EMAILuser@example.com

第四步:部署 Waline 后端

终于要开始部署了。以下操作全部在服务器上执行。

4.1 拉取镜像

dockerpull lizheming/waline:latest

镜像大约 150MB,半分钟到一分钟能拉完。

4.2 创建数据目录

mkdir-p/opt/waline/data

4.3 启动容器

把 3.1~3.5 准备好的值填进去,执行:

dockerrun-d\--namewaline\--restart=unless-stopped\-p127.0.0.1:8360:8360\-v/opt/waline/data:/app/data\-eTZ=Asia/Shanghai\-eSQLITE_PATH=/app/data\-eJWT_TOKEN=a1b2c3d4...\-e"SITE_NAME=我的博客"\-eSITE_URL=https://blog.example.com\-eSECURE_DOMAINS=blog.example.com\-eAUTHOR_EMAIL=user@example.com\lizheming/waline:latest

每个参数的含义:

参数作用
-d后台运行
--restart=unless-stopped服务器重启后自动启动容器
-p 127.0.0.1:8360:8360只监听本机 8360 端口(不暴露公网,安全)
-v /opt/waline/data:/app/data数据持久化
-e JWT_TOKEN=...管理员登录密钥
-e SITE_NAME/URL/DOMAINS站点信息
-e AUTHOR_EMAIL博主邮箱

关键提示:bash 续行符\必须是该行最后一个字符,后面不能跟任何东西(包括空格和注释)。如果SITE_NAME&等特殊字符,要用双引号包住整个-e "SITE_NAME=xxx"

4.4 验证容器状态

dockerps|grepwaline

看到Up字样说明容器在运行。也可以看日志:

dockerlogs waline--tail20

正常的话最后一行类似ThinkJS 3.x is running at http://127.0.0.1:8360

4.5 使用 Docker Compose(可选但推荐)

新建docker-compose.yml

mkdir-p/opt/waline&&cd/opt/waline
# docker-compose.ymlversion:'3'services:waline:container_name:walineimage:lizheming/waline:latestrestart:alwaysports:-127.0.0.1:8360:8360volumes:-./data:/app/dataenvironment:TZ:Asia/ShanghaiSQLITE_PATH:/app/dataJWT_TOKEN:a1b2c3d4...# ← 替换SITE_NAME:"我的博客"# ← 替换SITE_URL:https://blog.example.com# ← 替换SECURE_DOMAINS:blog.example.com# ← 替换AUTHOR_EMAIL:user@example.com# ← 替换IPQPS:5AKISMET_KEY:"false"

启动:

dockerstop waline&&dockerrmwalinedocker-composeup-d

第五步:Nginx 反代 + HTTPS

Waline 只监听了127.0.0.1:8360,外部访问不到。需要用 Nginx 反代到公网,并配上 HTTPS。

5.1 安装 Nginx 和 Certbot

sudoaptupdatesudoaptinstall-ynginx certbot python3-certbot-nginx

5.2 创建临时 HTTP 站点

sudotee/etc/nginx/sites-available/waline<<'EOF' server { listen 80; server_name comment.example.com; # ← 替换:你的子域名 location / { proxy_pass http://127.0.0.1:8360; 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; proxy_set_header REMOTE-HOST $remote_addr; } } EOFsudoln-sf/etc/nginx/sites-available/waline /etc/nginx/sites-enabled/sudonginx-t&&sudosystemctl reload nginx

5.3 Certbot 自动获取 SSL 证书

sudocertbot--nginx-dcomment.example.com

Certbot 会自动申请证书、改 Nginx 配置、加 HTTP→HTTPS 跳转。证书 90 天有效,到期前自动续期。

5.4 验证

curlhttps://comment.example.com

应该返回一段 JSON:

{"name":"Waline","version":"x.x.x",...}

第六步:注册管理员

这一步必须立刻做,免得被别人抢注。

浏览器打开:

https://comment.example.com/ui/register

输入邮箱和密码,点击注册。第一个注册的用户自动成为管理员

注册后登录管理后台:

https://comment.example.com/ui

第七步:前端接入

在你想显示评论框的位置加入以下代码:

<divid="waline"></div><scripttype="module">import{init}from'https://unpkg.com/@waline/client@v3/dist/waline.mjs';init({el:'#waline',serverURL:'https://comment.example.com',// ← 替换dark:'auto',lang:'zh-CN',wordLimit:500,pageview:true,emoji:['https://unpkg.com/@waline/emojis@1.2.0/qq','https://unpkg.com/@waline/emojis@1.2.0/tieba',],});</script>

浏览量统计

阅读量:<spanclass="waline-pageview-count"data-path="/posts/hello-world"></span>

Waline 自动查找页面上所有.waline-pageview-count元素并填入计数。

常见博客框架接入

框架在哪加代码
Hugolayouts/_default/single.html
Hexo主题的layout/_partial/comments.ejs
Jekyll_layouts/post.html
VuePress.vuepress/config.js
纯 HTML每篇文章底部直接贴

第八步:邮件通知(可选但建议配)

不配邮件的话,有人评论你不知道。QQ 邮箱为例:

  1. QQ 邮箱 → 设置 → 账户 → POP3/IMAP/SMTP 服务 → 开启 SMTP → 获取授权码
  2. 添加环境变量:
-eSMTP_SERVICE=QQ\-eSMTP_USER=你的QQ号@qq.com\-eSMTP_PASS=授权码\-eSENDER_NAME=Waline通知\

重启容器生效:

dockerrestart waline

日常维护

# 升级dockercompose pull&&dockercompose up-d# Compose 方式dockerpull lizheming/waline:latest&&dockerstop waline&&dockerrmwaline# run 方式# 备份(SQLite 就是一个文件)cp-r/opt/waline/data /opt/backup/waline-$(date+%F)# 查看日志dockerlogs waline--tail50

实战踩坑记录

  1. bash 续行符\后不能跟注释\必须是行末最后一个字符
  2. SITE_NAME 含&必须加引号-e "SITE_NAME=Code & Flower",否则&被 bash 解析为后台运行符
  3. SECURE_DOMAINS 必须包含管理后台域名— 只写博客域名的话,管理后台 API 返回 403
  4. SQLite 文件需要预初始化— 空文件不会自动建表,需要下载官方种子数据库
  5. 社交登录在国内可能 403— 用的代理服务不稳定,用邮箱注册就好

常见问题

评论一直转圈→ 99% 是serverURL填错了或 HTTPS 证书有问题。浏览器 F12 → Console 看报错。

管理后台打不开→ URL 路径是/ui,不是/ui/。首次访问应该去/ui/register注册。

Docker pull 太慢→ 配镜像加速:

sudotee/etc/docker/daemon.json<<-'EOF' { "registry-mirrors": [ "https://docker.xuanyuan.me", "https://docker.1ms.run", "https://docker.m.daocloud.io" ] } EOFsudosystemctl daemon-reload&&sudosystemctl restartdocker

Waline 是我用过最省心的自建评论系统——一个容器、一个 SQLite 文件、几行配置就全搞定了。有问题欢迎在评论区交流,博客地址见主页。

http://www.gsyq.cn/news/1450499.html

相关文章:

  • 2026年苏园再生费用排名,源头工厂价更实惠 - mypinpai
  • 2026上海瓷砖空鼓修复哪家靠谱?本地7家免砸砖注浆维修公司推荐 - 苏易修缮
  • 工业吸尘器品牌哪家好?杰力科清洁设备怎么样? - mypinpai
  • 进阶利器与最佳实践——成为团队里的 Git 高手
  • 基于Arduino与TEA5767的FM收音机DIY:从I2C通信到系统调试全解析
  • 2026年软质高速自复位拉链门好用吗? - mypinpai
  • 基于树莓派与光电传感器的智能曲棍球桌自动计分系统设计与实现
  • 单片机内存实验
  • WeChatMsg:永久保存与智能分析微信聊天记录的本地化解决方案
  • 别再手动查漏洞了!用OWASP DependencyCheck给你的Maven项目做个自动化安全体检(附Jenkins集成)
  • 2026最新!别乱交智商税乱踩坑亲测4款免费录音转文字软件神器好用到哭!
  • TVA复杂工况高阶调优(五):遮挡/残缺工况TVA推理:部分遮挡依然精准判定缺陷与品类
  • 2026年Q2嘉兴液氩选购全维度技术判定指南:拱墅,富阳,余杭,宁波二氧化碳、宁波工业氧气、宁波氧气、宁波液氧选择指南 - 优质品牌商家
  • 成都户外拓展夏令营品牌选型全维度技术解析:成都本地军事夏令营推荐、成都青少年军事化夏令营、成都7天/14天军事夏令营选择指南 - 优质品牌商家
  • 3分钟快速上手:大麦网抢票Python脚本完整指南
  • 竟然还在手动逐字转写语音文稿?2026年这4款精准语音识别工具,5分钟搞定1小时录音
  • 基于Attiny85与DFPlayer的电容触摸声音徽章制作全攻略
  • 避坑指南:Halcon光流检测卫星云图移动粒子,这些参数调优技巧你必须知道
  • 自由职业者AI配置终极悖论:工具越多,收入越低?20年技术顾问用A/B测试验证的「最小可行智能体」配置公式
  • 2026年写总结报告的AI软件实测对比八款热门工具挨个测完,差距竟然这么大
  • 2026春招冰火两重天:AI人才抢破头,小白如何逆袭?速收藏!
  • 海尔智能家居设备无缝接入HomeAssistant:终极完整指南
  • ESP32步进电机无线控制:从硬件连接到Web服务器全解析
  • Windows Server 2019 Hyper-V实战:如何将你的戴尔R730XD变成高效的虚拟机模板工厂
  • AI工具如何真正驱动数据分析闭环?:从数据清洗到洞察生成的7步自动化流水线(附企业级Checklist)
  • FGF basic (119-126) (human) ;KRTGQYKL
  • 保姆级避坑指南:在Linux服务器上用MobaXterm搞定CCPD车牌数据集到YOLOv5的完整转换流程
  • 川内塑料模板评测:塑料模板公司、塑料模板价格、塑料模板多少钱一张、定做塑料模板、建筑塑料模板批发、承台钢模板、新型工地塑料模板选择指南 - 优质品牌商家
  • 抖音无水印视频批量下载终极指南:douyin-downloader完全使用教程
  • 实时告警准确率提升63%的关键配置,你还在用规则引擎硬扛AI流量?