Hexo接入码云评论系统

本文介绍了基于gitment源码开发的giteement评论系统,它基于码云issues,实现了类似码云的回复功能。文中说明了使用该系统的前提、配置第三方应用和文件的方法,还介绍了修改主题模板的步骤,给出了在不同主题中使用的例子,同时提及待解决问题。

简介

giteement系统是基于gitment的源码开发和扩展的。目前实现以下功能:
1. 基于码云的issues来进行评论的,所以需要有码云账号。
2. 实现了类似码云issues的回复功能,评论开头用@符号选择你要回复的人,回复完毕,如果你要回复的人登录码云,会有消息提示。

* giteement还在继续维护优化中…欢迎小伙伴们加入一起维护 *
* 效果展示 *

声明

非常感谢Gitment原作者,通过学习和阅读源码,受益匪浅。作者对于版权方面,不是很了解,如有侵权请告知。

使用

前提

作者搭建自己的博客在码云上,就是不想花钱买服务器。但是在接入码云的第三方认证OAuth2,获取access_token的时候,出现post请求跨域问题。尝试多次,没有找到直接在前端可以跨域的方法,如果有大神知道,麻烦告知,非常感谢。

* 无意间看到一个别人搭建好的专门用来跨域的服务器,好多人都在用,但是不知道提供到什么时候。使用 *

作者也花钱购买了一个便宜的vps服务器(搬瓦工,速度有点慢),在vps服务器中安装nginx,利用nginx的反向代理实现跨域。

现在你有三种选择,第一是使用上面介绍的别人搭建专门用来跨域的服务器。第二种是自己购买vps或其他主机,利用nginx反向代理跨域。第三种就是作者的vps服务器,可以提供给大家,但是需要在留言中留下你的博客域名(实在是不好意思,购买的vps服务器的每个月流量有限,所以没有全部开放,需要配置指定域名)。

配置第三方应用

使用码云的issues作为评论系统,就要使用码云来登录评论,所以需要在码云上配置第三方应用。

配置文件

需要在主题的配置文件中作如下配置(themes/主题/_config.yml)

giteement:
  enable: true
  redirect_uri: https://wudong.tech
  oauth_uri: https://wudong.tech/token
  giteeID: ''
  repo: ''
  ClientID: ''
  ClientSecret: ''

enable:true|false 是否开启评论系统
redirect_uri:应用回调地址
oauth_uri: https://cors-anywhere.herokuapp.com/https://gitee.com/oauth/token
上面的配置就是网上开源项目cors-anywhere作者提供的专门用来跨域服务器的配置。
oauth_uri: https://wudong.tech/token
作者自己的nginx代理获取token地址,如果使用作者配置的请在评论中留下你的域名。

giteeID: 你的码云账号英文名
ClientID,Client Secret: 码云配置第三方应用给的Client ID和Client Secret
repo: 评论项目的地址

修改主题模板

应用回调地址一般配置的是博客的首页,但是在浏览某篇博客的时候,需要评论,一般是在当前博客页登录,登录完在回到当前的博客进行评论。在跳转到码云的登录授权的页面,一般我们会传一个回调地址给码云,告诉他验证完在跳转到这个页面,但是码云只支持传过去的回调地址必须与应用配置的回调地址一致,才可以,这点跟Github不一样。但是可以将该博客的地址以bkurl参数传过去,然后在首页通过js转发到该bkurl地址,因此需要将下面的代码放在主题的index中。

  <script src="https://giteement.oss-cn-beijing.aliyuncs.com/oauthcallback.browser.js"></script>
  <script>
    Oauthcallback();
  </script>

需要在每篇博客后面加上评论,因此展示博客的主题模板也要加上下面的代码

    <div id="giteementDiv"></div>
    <link rel="stylesheet" href="https://giteement.oss-cn-beijing.aliyuncs.com/default.css">
    <script src="https://giteement.oss-cn-beijing.aliyuncs.com/giteement.browser.js"></script>
    <script>
    var giteement = new Giteement({
      id: {{date(page.date, 'YYYYMMDDHHmmss')}},
      owner: '{{theme.giteement.giteeID}}',
      repo: '{{theme.giteement.repo}}',
      backcall_uri: '{{theme.giteement.redirect_uri}}',
      oauth_uri: '{{theme.giteement.oauth_uri}}',
      oauth: {
        client_id: '{{theme.giteement.ClientID}}',
        client_secret: '{{theme.giteement.ClientSecret}}'
      },
    })
    giteement.render('giteementDiv')

以上的步骤完成的话基本上,你的评论系统就可以使用了。
* 上面都的js和css都是引用作者的阿里云OSS上的,你可以直接使用,同时作者每次有新改动都会同步上去,你不做任何修改就可以直接反映到你的博客内。当然也可以直接giteement下载使用。 *

例子

主题landscape中使用

修改themes/landscape/layout/index.ejs

修改themes/landscape/layout/_partial/article.ejs

增加themes/landscape/layout/_partial/comment.ejs

<% if (!index && post.comments && theme.giteement.enable){ %>
<div id="giteementDiv"></div>
<link rel="stylesheet" href="https://giteement.oss-cn-beijing.aliyuncs.com/default.css">
<script src="https://giteement.oss-cn-beijing.aliyuncs.com/giteement.browser.js"></script>
<script>
var giteement = new Giteement({
  id: '<%- post.date.format('YYYYMMDDHHmmss') %>',
  owner: '<%- theme.giteement.giteeID %>',
  repo: '<%- theme.giteement.repo %>',
  backcall_uri: '<%- theme.giteement.redirect_uri %>',
  oauth_uri: 'https://wudong.tech/token',
  oauth: {
    client_id: '<%- theme.giteement.ClientID %>',
    client_secret: '<%- theme.giteement.ClientSecret %>'
  },
})
giteement.render('giteementDiv')
</script>
<% } %>

主题next中使用

修改themes/next/layout/index.swig

修改themes/next/layout/_partials/comments.swig

待解决问题

  1. giteement的UI是直接使用gitment的UI,不是很好看,后期准备优化。
  2. 新增文章的时候需要登录自己的gitee账号,点击评论初始化按钮。

效果图

@回复功能

相关链接

gitment
gitment介绍
giteement
giteement介绍

### Hexo集成Waline教程 #### 添加必要的配置到`_config.yml` 为了使Hexo支持sitemap功能并为后续的Waline集成做准备,需在Hexo站点根目录下的 `_config.yml` 文件中添加以下代: ```yaml # hexo sitemap 地图配置 baidusitemap: path: baidusitemap.xml ``` 此部分配置用于生成百度搜索引擎所需的网站地图文件[^1]。 --- #### 创建布局文件以加载 Waline 组件 对于 Volantis 主题或其他兼容主题,可以通过创建自定义布局来实现 Waline 的嵌入。具体操作是在 `themes/your-theme/layout/_partial` 或其他适当位置新建名为 `layout.ejs` 的文件,并填入以下内容: ```html <div id="waline"> <i class="fas fa-cog fa-spin fa-fw fa-2x"></i> </div> ``` 上述 HTML 片段会在页面底部预留一个区域供 Waline 加载其评论框组件[^2]。 --- #### 安装与初始化 Waline 脚本 完成基础设置后,需要通过 JavaScript 将 Waline 动态引入至每篇文章页脚处。编辑对应模板中的 `<script>` 块或者单独建立一个新的 `.ejs` 插件文件,加入如下代片段: ```javascript import Waline from 'https://unpkg.com/@waline/client/dist/waline.esm.js'; Waline.init({ el: '#waline', serverURL: 'https://your-waline-server-url', // 替换为你实际部署的服务地址 }); ``` 注意:这里的 `serverURL` 参数应指向已成功搭建好的 Waline 后端服务实例链接[^3]。 此外,在正式启用前还需登录 [Vercel](https://vercel.com/) 平台注册账号获取专属 App 凭证信息(包括但不限于 `AppID`, `AppKey`, 和 `MasterKey`) ,这些密钥将在稍后的服务器端环境变量声明环节被调用。 --- #### 配置 Waline 后端服务 由于 Waline 是前后分离架构设计,默认情况下仅提供前端 SDK 。因此还需要额外架设一套独立运行的支持 RESTful API 接口标准的数据存储层解决方案作为支撑点。官方推荐采用 Node.js Express 框架快速构建最小化可用版本;当然也可以选用函数形式简化运维流程。 以下是基于 Vercel 托管方式的一个典型例子说明文档结构以及关键路径映射关系: ```bash project-root/ ├── api/ │ └── waline.ts # 处理请求的核心逻辑入口 └── vercel.json # 自定义路由规则描述符 ``` 其中 `api/waline.ts` 中至少要包含类似这样的核心处理单元: ```typescript // 导入库依赖项 const { createServer } = require('@waline/server'); export default createServer({ mongoUrl: process.env.MONGO_URL, // MongoDB 数据库连接字符串 commentLimit: Number(process.env.COMMENT_LIMIT), // 单次拉取最大条目数限制 }); ``` 而对应的 `vercel.json` 则用来指定默认重定向行为模式: ```json { "version": 2, "routes": [ { "src": "/(.*)", "dest": "/api/waline" } ] } ``` 最后记得把先前取得的应用级安全令牌妥善保存进项目内的 .env.local 文件里头去以便于程序内部读取使用 : ```plaintext MONGO_URL=mongodb+srv://username:password@cluster.mongodb.net/database?retryWrites=true&w=majority COMMENT_LIMIT=100 APP_ID=<Your_App_Id_Here> APP_KEY=<Your_Secret_Key_Goes_here> MASTER_KEY=<Admin_Master_Access_Token> ``` 至此整个安装部署过程才算真正结束可以正常投入使用了! ---
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值