使用 Hexo 在十分钟内创建项目官网

使用 Hexo 在十分钟内创建项目官网

前言

蛇年春节在即,在这里祝大家蛇年大吉,财源广进!!!🧨🧨🧨

博主就乘着节前还有点业余时间继续搞一搞开源项目,背景是大概在 2025 年元旦,我使用 Cursor + DeepSeek V3 快速的写完了一个开源项目的核心功能,也就是 LiberSonora - 一个 AI 赋能的、强大的、开源有声书工具集

但这个项目的相关介绍、愿景、功能、API 接口文档等等信息很长,放在 README 里边非常不雅观,放 Wiki 里边又觉得不够好看,所以还是决定给这个项目搞一个官网,把 README 里边冗杂的各种信息分门别类都放到项目官网里,以及未来的更新日志都可以在官网中以博客的方式体现。

想到这里,做一个项目官网需要的核心功能就出来了:

  • 简单明了,主页不能直接是一个文章列表,主要的视觉集中处需要有充足的内容空间介绍项目情况
  • 侧边栏菜单需要支持独立页
  • 需要支持友情链接配置
  • 支持点击放大图片
  • 移动端访问友好
  • 支持接入 Google Analysis 等分析工具
  • 展示网站访问 PV UV

项目官网预览:libersonora.github.io/
官网开源地址:github.com/LiberSonora/libersonora...

完全配置好的展示效果如下,且在文章更新做提交动作后会自动打包内容更新网站:

image

技术选型

由于目前并不打算为这个开源项目单独申请域名,所以在部署上就打算使用 Github Pages 和自带的 github.io 域名。

Github Pages 本身是内置支持 Jekyll 的,Jekyll 是一个静态网站生成器,可以把 Markdown 文档转换为静态网站 html,进而在 Github Pages 中部署。

这个工具本身没有问题,用的人比较多,但在 Github Pages 中内置支持的模板比较少,可以再这个链接中查看,我挨个点进去看了,都只适合做博客,不适合做项目官网。

image

如果跳出内置的主题,用自定义 actions 打包的话,就不用限定在 Jekyll 这一个静态网站生成器上。

最后经过手工挑选+Deepseek R1 的推荐,最终选择了 Hexo + NexT 主题来完成这个功能

image

Hexo 文档:hexo.io/zh-cn/docs/

Hexo NexT 主题文档:theme-next.js.org/docs/

操作记录

整体思路如下:

  • 创建一个 github pages 仓库
  • 安装 hexo 、hexo-next 主题
  • 调整 hexo 和主题配置

Github Pages 配置

跟着这个指引 Quickstart for GitHub Pages 就可以初始化好一个网站仓库,接下来往这个仓库填充内容就好了。

创建一个新的仓库​

image

仓库名称为 [project/username].github.io

需要注意的是,如果项目名称是驼峰的,在创建仓库的时候需要都转为小写,比如我的开源项目组织名字为 LiberSonora,在创建仓库时只能写 libersonora.github.io,访问地址同样也都只能是小写 https://libersonora.github.io

image

设置里边打开 Pages 的支持,注意这里的构建 Source 要选 github actions,如果有自己的域名可以在输入框内填写并配置解析

image

把仓库克隆到本地,运行如下命令进行初始化

进入到仓库目录后

npm i -g hexonpx hexo init web-appcd web-app

进入到项目目录后,跟踪为刚才新建的远程仓库

git initgit remote add origin https://github.com/LiberSonora/libersonora.github.io.git

配置 github workflow

把如下 pages.yml 放到 .github/workflows/​ 下

name: Pages

on:
  push:
    branches:
      - main # default branch

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          # If your repository depends on submodule, please see: https://github.com/actions/checkout
          submodules: recursive
      - name: Use Node.js 20
        uses: actions/setup-node@v4
        with:
          # Examples: 20, 18.19, >=16.20.2, lts/Iron, lts/Hydrogen, *, latest, current, node
          # Ref: https://github.com/actions/setup-node#supported-version-syntax
          node-version: "20"
      - name: Install Yarn
        run: npm install --global yarn
      - name: Cache Yarn dependencies
        uses: actions/cache@v4
        with:
          path: ~/.yarn/cache
          key: ${{ runner.OS }}-yarn-cache
          restore-keys: |
            ${{ runner.OS }}-yarn-cache
      - name: Install Dependencies
        run: yarn install
      - name: Build
        run: yarn build
      - name: Upload Pages artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: ./public
  deploy:
    needs: build
    permissions:
      pages: write
      id-token: write
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4

本地运行项目

yarn installyarn server

如果一切正常,那么访问 http://localhost:4000​ 可以看到一个默认的 Hello World 页面

image

推送到远程,观察 Actions,一个正常的 Action 可以参考:github.com/LiberSonora/libersonora...,然后就可以在 [name].github.io 上访问到刚才配置的网站了

git add .git push origin main

image

Hexo 配置

在网站整体跑通的情况下,下一步就是 hexo 和 hexo-next 的配置了

首先执行如下命令安装 next 主题

yarn add hexo-theme-next

然后复制一份配置模板到项目目录

cp node_modules/hexo-theme-next/_config.yml _config.next.yml

Hexo 中本身有一个 _config.yml​,只需配置一下 Site 、URL、Theme 相关的属性,成品配置参考 _config.yml

# Site
title: LiberSonora
subtitle: '一个 AI 赋能的、强大的、开源有声书工具集'
description: 'LiberSonora 寓意“自由的声音”,是一个 AI 赋能的、强大的、开源有声书工具集,包含智能字幕提取、AI标题生成、多语言翻译等功能,支持 GPU 加速、批量离线处理'
keywords: 'subtitle,audio-books,subtitles-generator,llm,ollama,translate,deepseek'
author: LiberSonora
language: zh-CN
timezone: 'Asia/Shanghai'
# URL
## Set your site url here. For example, if you use GitHub Page, set url as 'https://username.github.io/project'
url: https://libersonora.github.io/
# ...
theme: next
# ...

然后是 next 主题的配置,可以参考他家的官方文档 theme-settings 一步步的调试,成品配置参考 _config.next.yml

比较重要的几个配置列举如下,realfavicongenerator.net 可以做 favicon,不过里边的 16x16 32x32 多尺寸的 favcion 得在 resize.com 中二次处理下

scheme: Gemini # Gemini 主题比较适合做项目官网
# favicon 得去 https://realfavicongenerator.net/ 做一下
favicon:
  small: /favicon/favicon-16x16.png
  medium: /favicon/favicon-32x32.png
  apple_touch_icon: /favicon/apple-touch-icon.png
  safari_pinned_tab: /favicon/favicon.svg
  android_manifest: favicon//manifest.json

# Custom Logo (Warning: Do not support scheme Mist)
custom_logo: /images/logo-head.jpg
# Menu 是左侧的菜单,需要先建好单页再继续
menu:
  home: / || fa fa-home
  快速开始: /quick-start/ || fa fa-rocket
  转换示例: /demo/ || fa fa-laptop-code
  语言支持和兼容性: /support/ || fa fa-life-ring
  界面功能展示: /pages/ || fa fa-file-alt
  API 接口: /api/ || fa fa-code
  系统要求和性能测试: /system-requirement/ || fa fa-server
# 友链
links:
  作者个人博客: https://blog.wj2015.com
  项目 Github: https://github.com/LiberSonora/LiberSonora
  官网 Github: https://github.com/LiberSonora/libersonora.github.io
# 打赏功能
reward_settings:
  # If true, a donate button will be displayed in every article by default.
  enable: true
  animation: true
reward:
  wechatpay: /images/wechatpay.png
# 支持点击打开图片
fancybox: true
# 谷歌分析的配置
google_analytics:
  tracking_id: # <app_id>
# 访客统计功能
busuanzi_count:
  enable: true

创建单页的命令是 npx hexo new page [page-router]​,创建完成后在 source/[page-router]/index.md​ 中修改页面即可

置顶文章

可以使用 npx hexo new post "文章标题"​ 创建文章,也可以直接在 source/_posts​ 中新建 [router].md​,然后手动填充如下头部信息

  • title 是文章标题
  • sticky 是置顶配置,普通文章不需要,sticky 越大越靠前(这个点在文档里边没找到,翻了源代码才确认这个逻辑,所以单独拧出来提一下)
  • date 是选填的,默认会取文件的创建时间,不过我对这个系统维护的文件时间不太信任,不嫌麻烦还是自己硬编码一下比较好
---
title: 欢迎使用 LiberSnora
sticky: 1
date: "2025-01-26"
---

而在 next 主题中,设置了 sticky 的文章会被完整的展示到首页,所以特别适合把项目情况、愿景等重要信息放到这里,就像下面这样。

image

其他发版 blog、项目进展 blog 就按照同样的方法创建文章,只不过不需要配置 sticky

所有配置都完成后,再次提交到 github 并等待 actions 完成,整个网站就部署完了,还可以随个人喜好,加入评论系统、本地搜索、聊天等等功能,可以跟随 Next 主题文档按需配置,Comment System

如果考虑国内用户访问更加友好,或者希望从 WordPress 导入文章,以及希望加上文章分类、标签等功能,以及展示的更个性一点,也可以参考我的个人博客搭建总结《Hexo 博客迁移》

总结

现在的静态网站搭建工具很完善,搭一个静态网站的时间成本很低,虽然我梳理需求、找主题、准备内容、调整模板等等事情加起来搞了一下午,但单纯上一个自己的个人站确实可以 10分钟左右搞定,Enjoy!

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!