🚀 目录

  1. 引言:评论系统为何对SEO重要?
  2. 什么是 Waline?
  3. 部署方案一:Docker Compose + Nginx 快速部署
  4. 部署方案二:Traefik + Docker Compose 更优整合
  5. 注册管理员用户并进入后台
  6. 结语:独立博客,也该有交流的空间

引言:评论系统为何对SEO重要?

作为一位使用 Hugo 搭建博客多年的内容创作者,我一直在寻找一种能既 保持站点纯净、加载快速,又能 支持用户互动 的解决方案。尤其当我逐渐意识到:评论不仅仅是交流工具,它对 SEO 的影响远超我们的想象。

搜索引擎喜欢「活」的页面。每一次新的评论,都是对页面内容的一次补充和更新,有助于提高关键词密度、延长页面停留时间,也可能触发长尾词流量。

然而,大部分 Hugo、Hexo 等静态博客,并不原生支持评论系统。像 Disqus 虽然流行,但广告、隐私、速度问题让人望而却步。于是,我找到了 Waline —— 一个开源、轻量、支持本地化部署的评论解决方案。

今天,我就来分享如何用 Waline + SQLite 的方式,为你的博客加入一套真正属于你自己的评论系统。


什么是 Waline?

Waline 是一个基于服务端部署的评论系统,前端使用 Vue 构建,后端支持多种数据库(MySQL、PostgreSQL、SQLite 等)。它的核心特点包括:

  • 完全自托管:你掌控数据,隐私无忧;
  • 支持 SQLite:轻量部署,适合个人博客;
  • 无需登录:用户直接评论,体验流畅;
  • 支持 Markdown、表情、邮件通知、IP 识别等功能
  • 可嵌入任意静态网站,完美兼容 Hugo、Hexo、Astro 等。
  • 评论管理系统:可以对评论进行审核置顶删除等操作;

简而言之,Waline 就像你博客的「留言本 + 微型社交系统」,不依赖 GitHub,不依赖第三方,灵活、独立。


快速部署

使用 SQLite 时需要下载 waline.sqlite 文件至合适的位置。之后在项目中配置如下环境变量。

其他数据库方案:多数据库服务支持

环境变量名称必填默认值备注
SQLITE_PATHSQLite 数据库文件的路径,该路径不包含文件名本身
JWT_TOKEN用户登录密钥,随机字符串即可
SQLITE_DBwalineSQLite 数据库文件名,若文件名变化需要修改该字段值
SQLITE_PREFIXwl_SQLite 数据表的表前缀

部署方案一:Docker Compose + Nginx 快速部署

如果你已经有一台 VPS,或者用宝塔面板搭建了网站环境,使用 Docker Compose 是最简单的方式。

首先,创建 docker-compose.yml 文件:

version: "3"

services:
  waline:
    image: liszlang/waline:latest
    container_name: waline
    restart: always
    ports:
      - "8360:8360"
    volumes:
      - ./data:/app/data
    environment:
        TZ: 'Asia/Shanghai'
        SQLITE_PATH: '/app/data'
        JWT_TOKEN: 'Your token'
        SITE_NAME: 'Your site name'
        SITE_URL: 'https://example.com'
        SECURE_DOMAINS: 'example.com'
        AUTHOR_EMAIL: 'mail@example.com'

部署步骤如下:

mkdir -p ~/waline && cd ~/waline
nano docker-compose.yml
docker-compose up -d

接着,配置 Nginx 做反向代理(可配合 HTTPS 证书):

server {
    listen 80;
    listen 443 ssl http2;
    server_name comment.yourdomain.com;

    location / {
        proxy_pass http://127.0.0.1:8360;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

部署完成后,你可以在博客中引入 Waline 前端组件,页面评论功能即刻启用。


部署方案二:Traefik + Docker Compose 更优整合

如果你已经在使用 Traefik 管理多站点代理和自动 HTTPS,这里是一个更优雅的部署方法:

version: '3.7'

services:
   waline:
     image: lizheming/waline:latest
     container_name: waline-server
     restart: always
     networks:
        - traefik-net
     volumes:
        - ./data:/app/data
     environment:
       SQLITE_PATH: '/app/data'
       JWT_TOKEN: '***'
     labels:
        - "traefik.enable=true"
        - "traefik.docker.network=traefik-net"
        - "traefik.http.routers.ypp-waline.entrypoints=websecure"
        - "traefik.http.routers.ypp-waline.rule=Host(`waline.ypplog.cn`)"
        - "traefik.frontend.entryPoints=https,http"
        - "traefik.http.services.ypp-waline.loadbalancer.server.port=8360"

networks:
  traefik-net:
    external: true

这种方式的好处是:

  • 自动生成 HTTPS 证书;
  • 自动配置域名代理;
  • 与现有站点架构完美融合,便于管理。

注册管理员用户并进入后台

Waline 部署完成后,访问 https://your-domain.com/ui/register,第一个注册的用户将被设为管理员。

在后台你可以:

  • 审核/删除评论;
  • 查看访客统计;
  • 处理垃圾信息和敏感内容。

后台管理是纯前端 SPA 应用,界面简洁,支持移动端使用。


HTML 引入 (客户端集成)

在你的网页中进行如下设置:

导入样式:https://unpkg.com/@waline/client@v3/dist/waline.css。

引用脚本:https://unpkg.com/@waline/client@v3/dist/waline.js

初始化配置init({})。

<!-- Waline 评论框 -->
<div id="waline"></div>
<link rel="stylesheet" href="https://unpkg.com/@waline/client@v3/dist/waline.css" />
<!-- 引入 Waline JS -->
<script src="https://cdn.jsdelivr.net/npm/@waline/client@2/dist/waline.js"></script>
<!-- 初始化 -->
<script>
    Waline.init({
        el: '#waline',
        serverURL: 'https://waline.ypplog.cn/',  // 替换为你的实际地址
        path: '{{ .RelPermalink }}',          // 当前页面路径
        emoji: [                              // 可选:自定义表情
            'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/weibo',
        ],
        imageUploader: false, // 自定义图片上传方法。默认行为是将图片 Base 64 编码嵌入,你可以设置为 false 以禁用图片上传功能。
        search: false,          // 禁用gif表情包搜索
        login: "disable",       // 禁用登录,用户只能填写信息评论
        noCopyright: false,     // 是否显示页脚版权信息:本站评论功能使用 waline 实现!
        wordLimit: 1024,        // 评论字数限制。填入单个数字时为最大字数限制。设置为 0 时无限制。
        comment: true,          // 文章评论数统计,填入字符串时会作为 CSS 选择器。
        pageview: true,        // 文章浏览量统计,填入字符串时会作为 CSS 选择器。
        reaction: [
            // 为文章增加表情互动功能,设置为 true 提供默认表情,也可以通过设置表情地址数组来自定义表情图片,最大支持 8 个表情。
            "https://npm.elemecdn.com/@waline/emojis@1.1.0/bilibili/bb_heart_eyes.png",
            "https://npm.elemecdn.com/@waline/emojis@1.1.0/bilibili/bb_thumbsup.png",
            "https://npm.elemecdn.com/@waline/emojis@1.1.0/bilibili/bb_zhoumei.png",
            "https://npm.elemecdn.com/@waline/emojis@1.1.0/bilibili/bb_grievance.png",
            "https://npm.elemecdn.com/@waline/emojis@1.1.0/bilibili/bb_dizzy_face.png",
            "https://npm.elemecdn.com/@waline/emojis@1.1.0/bilibili/bb_slap.png",
        ],
        locale: {
            placeholder:
                "请注意:提交留言后,内容需审核通过后才会展示,请勿重复发布。",
            reaction0: "非常有用",
            reaction1: "有帮助",
            reaction2: "一般",
            reaction3: "无帮助",
            reaction4: "看不懂",
            reaction5: "有错误",
            reactionTitle: "本站内容对你有帮助吗?",
            sofa: "还没有人留言哦!快来抢沙发吧~",
            comment: "留言",
        },
    });
</script>

在Hugo中,可以在_partials文件夹下面创建一个waline_comments.html文件,将上述代码复制进去。在需要的地方使用这个方法引用:

{{ partial "waline_comments.html" . }}

恭喜你,到这里评论功能就可以正式运行了🎉!!!

结语:独立博客,也该有交流的空间

当你选择 Hugo、Hexo 这样的静态博客,其实就是选择了一种「慢内容创作」的方式。而评论系统,正是为这种慢创作添加一点互动的温度。

Waline 的存在,让我们不再依赖第三方平台,也不需要复杂运维,便可以拥有一个属于自己的评论区。在 SEO 角度,它能有效提升页面活跃度,增加关键词覆盖,有助于博客获得更自然的搜索流量。如果你觉得有收获,不妨收藏本页,如有任何问题或建议,欢迎留言交流!