用 Docker 部署 Hitokoto API,让你的 Hexo 主题更酷!

用 Docker 部署 Hitokoto API,让你的 Hexo 主题更酷!

  1. 高能分享
  2. 2021.06.12
  3. 5 min read

cover.webp

前言

最近使用的 Hexo 主题 hexo-theme-anzhiyu 默认的随机一言接口被限流了, 根据官方文档在家里的服务器上搭建了一个, 目前用于我的博客.

部署

根据 官方文档 使用 docker-compose 部署:

services:
  hitokoto_api:
    image: hitokoto/api:release
    container_name: hitokoto_api
    hostname: hitokoto_api
    environment:
      NODE_ENV: production
      url: https://你的域名
      api_name: blog
      redis.host: 你的 redis ip
      redis.port: 你的 redis 端口
      redis.password: 你的 redis 密码
      redis.database: 你的 redis 数据库
    ports:
      - 8888:8000
    restart: unless-stopped
    volumes:
      - ./data:/usr/src/app/data

配置文件:

name: "hitokoto" # 服务名称,例如:hitokoto
url: "https://v1.hitokoto.cn" # 服务地址,例如:https://v1.hitokoto.cn
api_name: "demo_prprpr" # 服务标识,取个好区分的标识吧,例如:cd-01-demo
server: # 配置 HTTP 服务的信息
  host: 127.0.0.1 # 监听的地址
  port: 8000 # 监听的端口
  compress_body: true # 是否使用 GZIP 压缩
redis: # 配置 Redis
  host: 127.0.0.1 # Redis 主机名
  port: 6379 # Redis 端口
  password: "" # Redis 密码
  database: 0 # Redis 数据库
sentences_ab_switcher: # 本节是服务 AB 异步更新的配置,如果您不知道这个是什么意思,请保持默认
  a: 1 # a 状态对应的 redis 数据库
  b: 2 # b 状态对应的 redis 数据库
remote_sentences_url: https://cdn.jsdelivr.net/gh/hitokoto-osc/sentences-bundle@latest/ # 语句库地址,通常默认即可。如果您想使用您自己打包部署的语句库,您可以修改此项
workers: 1 # 启动 Worker 数目。0 表示启动和 CPU 核心数相同数量的 Worker
extensions: # 控制扩展
  netease: true # 网易云音乐接口
requests:
  enabled: false # 是否启用请求数目统计
  hosts: # 需要单独统计的主机名
    - sslapi.hitokoto.cn
telemetry: # 遥测服务
  performance: false # 性能监控
  error: false # 错误报告
  usage: false # 使用报告
  debug: false # 是否启用调试模式(该模式会让遥测服务打印调试信息)

上面官方的配置文件我只将 requeststelemetry 关闭了, 因为我并不需要这些功能.

部署后自己访问 ip:port 测试是否正常:

保存
{
    "id": 9241,
    "uuid": "a444bb92-9800-4b8e-a3ab-054ade2e78a2",
    "hitokoto": "生活和漫画里面的那种热血还是不一样的。",
    "type": "h",
    "from": "影视飓风",
    "from_who": "Tim",
    "creator": "wssb",
    "creator_uid": 14374,
    "reviewer": 4756,
    "commit_from": "web",
    "created_at": "1679128135",
    "length": 19
}

如果没问题就是域名配置了, 这部分就忽略了

Hexo 配置

安知鱼有 2 个地方会用到随机一言:

# Footer Settings
footer:
  list:
    enable: true
    ...
    subTitle:
      enable: true
      ...
      # source 调用第三方服务
      # source: false 关闭调用
      # source: 1  调用一言网的一句话(简体) https://hitokoto.cn/
      # source: 2  调用一句网(简体) http://yijuzhan.com/
      # source: 3  调用今日诗词(简体) https://www.jinrishici.com/
      # source: 4  调用一言网的一句话(简体) https://api.dong4j.site/hitokoto
      # subtitle 会先显示 source , 再显示 sub 的内容
      source: 4
      ...
# the subtitle on homepage (主页subtitle)
subtitle:
  enable: true
  # source 调用第三方服务
  # source: false 关闭调用
  # source: 1  调用一言网的一句话(简体) https://hitokoto.cn/
  # source: 2  调用一句网(简体) http://yijuzhan.com/
  # source: 3  调用今日诗词(简体) https://www.jinrishici.com/
  # source: 4  调用一言网的一句话(简体) https://api.dong4j.site/hitokoto
  # subtitle 会先显示 source , 再显示 sub 的内容
  source: 4
  ...

原来配置的 source 只有 3 个选择, 这里新增一个, 然后修改 themes/anzhiyu/layout/includes/third-party/footerBarSubtitle.pug 文件:

直接拷贝下面的代码到指定位置即可:

when 4
    script.
      function subtitleType () {
        fetch('https://你绑定的域名')
          .then(response => response.json())
          .then(data => {
            if (!{effect}) {
              const from = '出自 ' + data.from
              const sub = !{JSON.stringify(subContent)}
              sub.unshift(data.hitokoto, from)
              window.typed = new Typed('#footer-type-tips', {
                strings: sub,
                startDelay: !{startDelay},
                typeSpeed: !{typeSpeed},
                loop: !{loop},
                backSpeed: !{backSpeed},
              })
            } else {
              document.getElementById('footer-type-tips').innerHTML = data.hitokoto
            }
          })
      }

      if (!{effect}) {
        if (typeof Typed === 'function') {
          subtitleType()
        } else {
          getScript('!{url_for(theme.asset.typed)}').then(subtitleType)
        }
      } else {
        subtitleType()
      }

最后 Hexo 三连击即可显示效果, 比官方的快的多.

Hexo Docker 学习笔记