Valine 一款快速、简洁且高效的无后端评论系统。服务端可以借助LeanCloud免费部署到Vercel 部署 (服务端)

配置Valine

  1. 注册LeanCloud 账号:
  • 进入 LeanCloud 官网注册一个国际账号。
  • 创建一个新的应用以便使用 LeanCloud 提供的后端服务。
  1. Vercel 部署 (服务端)

关联github账号登陆,创建Valine应用,名称任意,例如Valine

  1. 获取 Valine App ID 和 App Key:
  • 在 LeanCloud 控制台中,进入你创建的应用。
  • 在左侧导航栏中找到“设置”选项。
  • 在应用凭证部分,复制 App IDApp KeyREST API 服务器地址
  1. 在Vercel的应用中依次进入【settings】、【environment-variables】添加上面获取的环境变量LEAN_KEYLEAN_ID值。然后进入【deployments】【Redeploy】重新部署生效。

完成后会自动分配一个二级域名,类似xxx-xxx-xxxx-projects.vercel.app【可选】进入【settings】【domains】绑定自己的域名

评论通知的环境设置在在进入leancloud应用的Play=== CLIENT ENGINE === 设置 添加自定义环境变量 【Redeploy】重新部署生效。

  1. valine评论数据管理

点击Visit打开进入https://xxx-xxx-xxxx-projects.vercel.app 是一个独立的网页单面。 在域名后边加上/ui/register注册,默认首次注册的用户是为评论管理员,可以删除评论等操作,也可以进入LeanCloud的控制台找到数据存储=>结构化数据=>Comment,在这里你可以对评论的数据进行管理

在Hugo主题中引入Valine

PaperMod主题为例,找到需要添加Valine的页面或模板文件,以下方法二选一

方法一:在~/themes/PaperMod/layouts/_default/single.html添加以下代码

复制替换 LeanCloud 控制台中的【设置】【应用凭证】的App IDApp KeyREST API 服务器地址

<div id="comments"></div>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script src="https://cdn.jsdelivr.net/npm/valine/dist/Valine.min.js"></script>
<script>
  new Valine({
    el: '#comments',
    appId: 'App-ID',
    appKey: 'App-Key',
    serverURLs: "REST API 服务器地址",
    placeholder: '说点什么吧...',
  });
</script>

方法二: 修改~/themes/PaperMod/layouts/partials/comments.html的内容如下

{{- /* Comments area start */ -}}
{{- /* to add comments read => https://gohugo.io/content-management/comments/ */ -}}

<link rel="stylesheet" href="https://unpkg.com/@waline/client@v2/dist/waline.css" />

<div id="waline"></div>
<script type="module">
    import { init } from 'https://unpkg.com/@waline/client@v2/dist/waline.mjs';
    const locale = {
        nick: '昵称',
        nickError: '请填写昵称',
        mail: '邮箱',
        mailError: '请填写正确的邮件地址',
        link: '网址',
        optional: '可选',
        placeholder: '仅填写昵称即可发表回复。\n填写邮箱可收到回复提醒。\n评论区支持 Markdown 语法及预览。\n',
        sofa: '来发评论吧~',
        submit: '提交',
        like: '喜欢',
        cancelLike: '取消喜欢',
        reply: '回复',
        cancelReply: '取消回复',
        comment: '评论',
        refresh: '刷新',
        more: '加载更多...',
        preview: '预览',
        emoji: '表情',
        uploadImage: '上传图片',
        seconds: '秒前',
        minutes: '分钟前',
        hours: '小时前',
        days: '天前',
        now: '刚刚',
        uploading: '正在上传',
        login: '管理',
        logout: '退出',
        admin: '博主',
        sticky: '置顶',
        word: '字',
        wordHint: '评论字数应在 $0 到 $1 字之间!\n当前字数:$2',
        anonymous: '匿名',
        level0: '潜水',
        level1: '冒泡',
        level2: '吐槽',
        level3: '活跃',
        level4: '话痨',
        level5: '传说',
        gif: '表情包',
        gifSearchPlaceholder: '搜索表情包',
        profile: '个人资料',
        approved: '通过',
        waiting: '待审核',
        spam: '垃圾',
        unsticky: '取消置顶',
        oldest: '按倒序',
        latest: '按正序',
        hottest: '按热度',
        reactionTitle: '你认为这篇文章怎么样?',
    };
    init({
        // options
        el: '#waline',
        serverURL: 'REST API 服务器地址',
        locale,
        emoji: false,     // 表情
        search: false,    // GIF 表情包
        reaction: false,  // 文章反应
        requiredMeta: ['nick'],
        pageSize: 10,
        imageUploader: false,
        copyright: true,
        pageview: true,
        like: false,
    });
</script>

{{- /* Comments area end */ -}}
  1. 全局设置,修改hugo站点配置文件config.yamlcomments: true开启全站默认允许评论 运行hugo server重新生成站点后生效
  2. 单篇设置,在post文章中设置comments: false关闭评论,不加comments参数选项=全局设置
  • placeholder 【可选】评论框占位提示符。
  • serverURLs 【可选】该配置适用于国内自定义域名用户, 海外版本会自动检测(无需手动填写) v1.3.10+

如果你遇到了 CDN 加载速度较慢的问题,你可以尝试使用其他的 CDN 地址来加载这些文件,如:

<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/valine/dist/Valine.min.js"></script>

参考 https://valine.js.org/configuration.html

LeanCloud 国际版国内不能用?

LeanCloud 国际版国为你懂的原因,在国内是不能正常访问的。可以导出数据切换到国内版,要备案域名,所以放弃。可以通过CNAME别名绑定2个子域名解决。

  1. 在LeanCloud控制面板的【设置】==【域名绑定】中的【API 访问域名】按提示绑定自己的域名
  2. vercel应用中【settings】【environment-variables】添加环境变量名为LEAN_SERVER值是上面绑定自己的域名
  3. 重新部署vercel应用生效,然后【settings】【domains】中再次绑定另一个域名。外部serverURLs可直接调用它。

Valine-Admin添加邮件通知

!!! 自带的邮件提醒功能将在v1.4.0发布时下线,请使用自带邮件提醒的用户注意更改为第三方邮件提醒

快速开始

首先需要确保 Valine 的基础功能是正常的,参考 Valine Docs

然后进入 Leancloud 对应的 Valine 应用中。

点击 云引擎 -> 设置 填写代码库并保存:https://github.com/zhaojun1998/Valine-Admin

切换到部署标签页,分支使用 master,点击部署即可:

首先是登录Leancloud,然后点击创建的应用,点击左侧的【云引擎】->【管理部署】->【创建分组】在弹出来的窗口中,填写【分组名称】,选择【web后端】,【免费版】即可

创建完成之后,看到以下内容,然后点击【未部署】,进入到我们刚刚创建的分组之中,【设置】,配置自定义环境变量

必选参数

  • SITE_NAME : 网站名称。
  • SITE_URL : 网站地址, 最后不要加 /
  • SMTP_USER : SMTP 服务用户名,一般为邮箱地址。
  • SMTP_PASS : SMTP 密码,一般为授权码,而不是邮箱的登陆密码,请自行查询对应邮件服务商的获取方式
  • SMTP_SERVICE : 邮件服务提供商,支持 QQ163126Gmail"Yahoo"...... : 全部支持请参考。 — 如这里没有你使用的邮件提供商,请查看自定义邮件服务器
  • SENDER_NAME : 寄件人名称。

配置环境变量中 TO_EMAIL 字段 : 指定站长收信邮箱,默认值为 SITE_USER。用于 SMTP 发件人与站长收件人不一致的情况下使用。

LeanCloud 休眠策略

免费版的 LeanCloud 容器,是有强制性休眠策略的,不能 24 小时运行:

  • 每天必须休眠 6 个小时
  • 30 分钟内没有外部请求,则休眠。
  • 休眠后如果有新的外部请求实例则马上启动(但激活时此次发送邮件会失败)。

分析了一下上方的策略,如果不想付费的话,最佳使用方案就设置定时器,每天 7 - 23 点每 20 分钟访问一次,这样可以保持每天的绝大多数时间邮件服务是正常的。

首先需要先配置下 Web 主机的域名,使用定时器时要用到。配置方式如下。

后台登录需要账号密码,需要在这里设置,只需要填写 emailpasswordusername,这三个字段即可, 使用 email 作为账号登陆即可。(为了安全考虑,此 email 必须为配置中的 SMTP_USERTO_EMAIL, 否则不允许登录)

LeanCloud 自带定时器[推荐]

首先需要添加环境变量,ADMIN_URLWeb 主机域名,如图所示(添加后重启容器才会生效):

然后点击云引擎 - 定时任务,新增定时器,按照图片上填写:

注意, LeanCloud 最近更新了定时器校验规则, 需要将 Cron 表达式写为: 0 */20 7-23 * * ? !!!

添加后要记得点击启用

启用成功后,每 20 分钟在云引擎的 - 应用日志中可以看到提示:

Linux 定时器[老版本方式]

Linux crontab 定时器代码:

*/20 7-23 * * * curl https://你配置的域名前缀.leanapp.cn

注 : 这里是 Linuxcrontab 定时器,会用的自行添加即可,推荐使用上面的 LeanCloud 自带定时器。

自定义邮件服务器

SMTP_SERVICE 中没有你使用的邮件服务提供商, 也可以进行自定义。

参数配置如下:

  • SMTP_HOST : 邮件服务提供商 SMTP 地址,如 qq : smtp.qq.com此项需要自行查询或询问其服务商
  • SMTP_PORT : 邮件服务提供商 SMTP 端口, 此项需要自行查询或询问其服务商
  • SMTP_SECURE : 是否启用加密, 默认为 true,一般不需要设置,如有特殊请自行配置。 此项需要自行查询或询问其服务商

注: 配置自定义邮件服务器的话,请不要同时配置 SMTP_SERVICE。当 SMTP_SERVICE 未配置时才会启用自定义邮件服务

经测试163网易邮箱SMTP发送邮件成功