# 【记录】在 GitHub 上 搭建 Hexo

Last updated on October 9, 2024 pm

## 安装 Hexo

- 安装 node 环境

    1
    2
    3
    4
    5

    conda activate node
    npm i hexo-cli -g
    hexo -v
    hexo init
    npm install

## 配置 hexo-deployer-git

1. `npm install hexo-deployer-git --save`
2. `echo hexo.limour.top > source/CNAME`
3. 建立 `<github usrname>.github.io` 的仓库
4. 仓库新建 `gh-pages` 分支
5. 修改 `settings/pages` 中的设置如下
6. 搭建 GitHub 文件加速
7. 按 hexo-deployer-git 的指引获取 token
8. 编辑 `_config.yml`，添加内容如下

    1
    2
    3
    4
    5
    6
    7

    deploy:
      type: git
      repo: https://oauth2:ghp_xxxxx@xxx.limour.top/xxx/https://github.com/limour-blog/limour-blog.github.io.git
      branch: gh-pages
      token: ghp_xxxxx
      name: xxx@limour.top # 注册 Github 的邮箱
      email: xxx@limour.top # 注册 Github 的邮箱

## 配置 butterfly 主题

    1
    2
    3

    npm install hexo-theme-butterfly --save
    npm install hexo-renderer-pug hexo-renderer-stylus --save
    mkdir scripts && touch scripts/CDN.js

- 编辑 `_config.yml`，修改内容如下

    1

    theme: butterfly

- 搭建 jsDelivr 反代
- 编辑 `scripts/CDN.js`，内容如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    'use strict';
    const { filter } = hexo.extend;

    // 替换 CDN
    filter.register('before_generate', () => {
        const { asset } = hexo.theme.config;
        for (const name in asset) {
            asset[name] = asset[name]
                .replace('//cdn.jsdelivr.net/', '//你自己的反代/');
        }
    }, 99);

- 更多文档

## 生成网页并推送

- `rm -rf .deploy_git && hexo c && hexo g && hexo d`

## 国内反代加速

- 搭建反代服务器

## 备份博客

- 编辑 `.gitignore`，添加 `_config.yml`

    1
    2
    3

    git init && git branch -m main
    git remote add origin https://oauth2:ghp_xxxxx@xxx.limour.top/xxx/https://github.com/limour-blog/limour-blog.github.io.git
    git add . && git commit -m 'backup' && git push -u origin +main

## 演示地址

- https://limour-blog.github.io
- https://hexo.limour.top

## 附加 Waline 换 MongoDB

1. MongoDB 官网 新建免费的 M0 数据库，地区选新加坡，放行 `0.0.0.0/0`
2. Vercel 上的 Waline 项目，Settings/Functions 里更改 Region 到新加坡
3. MongoDB 连接里记录下连接信息，选项如下
4. 选择 Drivers 作为连接方式，Driver 为 Node.js，Version为 `2.2.12 or later`
5. 进入 Waline 管理后台，导出数据
6. Vercel 里删除 LEAN 相关的环境变量，按 说明 添加 MongoDB 的连接信息
7. Vercel/Deployments 里选择合适的分支，点旁边的三个点，选择 Redeploy
8. 进入 Waline 管理后台，重新注册后，导入数据

## 附加 外链转内链

- 项目地址: Github; 说明

    1

    npm i hexo-filter-links --save

- 去 `_config.yml` 添加配置

    1
    2
    3
    4
    5
    6

    links:
      enable: true
      field: "post"
      exclude:
        - "limour.top"
        - "*.limour.top" #1.0.4及以上版本支持

## 附加 部署到本地服务器

    1
    2

    cd ~/base/NGPM/data
    git clone --depth=1 -b gh-pages --single-branch https://github.com/limour-blog/limour-blog.github.io.git

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    location / {
        gzip on;
        gzip_min_length 256;
        gzip_comp_level 6;
        gzip_types text/plain text/xml application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml;
        gzip_vary on;
        gzip_buffers 32 4k;
        root /data/limour-blog.github.io;
        try_files $uri $uri.html $uri/index.html =404;
        error_page 404 /404.html;
    }

- 后续更新

    1
    2

    cd ~/base/NGPM/data/limour-blog.github.io
    git fetch --depth=1 -f && git reset --hard origin/gh-pages

## 附加 添加本地搜索功能

- 为Hexo博客Yilia主题添加本地站内搜索功能 by 码农半亩地
- 修改`node_modules/hexo-theme-fluid/scripts/generators/local-search.js`文件

    1
    2
    3
    4

    env.addFilter('noControlChars', function(str) {
      // eslint-disable-next-line no-control-regex
      return str && str.replace(/[\x00-\x1F\x7F]/g, '').replace(/<figure class="highlight.*?<\/figure>/ig, '').replace(/(<([^>]+)>)/ig, '').replace(/(https?:\/\/[^\s]+)/ig, '');
    });

    1
    2
    3
    4
    5
    6
    7

    env.addFilter('urlJoin', function(str) {
      const base = str[0];
      const relative = str[1].replace(/\.html$/g, '');
      return relative
        ? base.replace(/\/+$/, '') + '/' + relative.replace(/^\/+/, '')
        : base;
    });

## 附加 首选网页

- 编辑 `scripts/custom.js`, 内容如下

    1
    2
    3
    4
    5
    6
    7
    8

    // 首选网页 canonical
    hexo.extend.helper.register('autoCanonical', function (config, page) {
      var base_url = config.url;
      if (config.url.charAt(config.url.length - 1) !== '/') base_url += '/';
      base_url += page.canonical_path

      return '<link rel="canonical" href="' + base_url.replace('/index.html', '/').replace(/\.html$/g, '') + '"/>';
    });

- 编辑 `node_modules/hexo-theme-fluid/layout/_partials/head.ejs`, 内容如下

    1
    2
    3

    // ....
    <%- autoCanonical(config, page) %>
    </head>

## 附加 memos

- 反向代理服务

    1
    2

    mkdir -p ~/app/memos && cd ~/app/memos && touch .env && nano docker-compose.yml
    sudo docker-compose up -d

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    version: '3.6'

    services:
      memos:
        image: neosmemo/memos:stable
        restart: always
        env_file:
          - .env
        volumes:
          - ./memos:/var/opt/memos
          - /etc/localtime:/etc/localtime:ro

    networks:
      default:
        external: true
        name: ngpm

#Github #hexo
【记录】在 GitHub 上 搭建 Hexo
https://hexo.limour.top/-ji-lu--zai-GitHub-shang-da-jian-Hexo
Author
Limour
Posted on
August 30, 2023
Updated on
October 9, 2024
Licensed under
【记录】阿里云函数计算搭建个人主页 Previous
【记录】TTRSS 使用 Supabase 做数据库 Next

#### Search

Keyword