Chance favors the prepared mind.
✨ Live Preview:https://www.eallion.com ✨
https://gitlab.com/eallion/eallion.com
https://codeberg.org/eallion/eallion.com
https://git.eallion.com/eallion/eallion.com
Tip
Remote url 传递 id:token 免输各个 git 仓库的账号密码
git remote set-url --add --push origin https://id:token@github.com/eallion/eallion.com.git
$ git remote -v
origin git@github.com:eallion/eallion.com.git (fetch)
origin git@github.com:eallion/eallion.com.git (push)
origin git@gitlab.com:eallion/eallion.com.git (push)
origin git@codeberg.org:eallion/eallion.com.git (push)
origin git@git.eallion.com:eallion/eallion.com.git (push)- 国内、境外:统一部署至腾讯云 EdgeOne Pages
Ghost Admin API → ghost-fetch-*.js → Markdown (content/blog/) → Hugo → Pagefind → Deploy- Ghost 6 作为 Headless CMS 管理文章内容
scripts/ghost-fetch-posts.js通过 Admin API 拉取文章,转换为 Hugo Markdownscripts/ghost-fetch-pages.js拉取页面(about、links、stats 等)scripts/fetch-stats.js聚合外部 API 数据(Mastodon、Steam、NeoDB、Penta、GitHub)scripts/generate-llms.js生成LLMs.txt供 AI 工具使用- Hugo 构建静态站点,Pagefind 构建搜索索引
# 完整构建
pnpm build
# 仅拉取 Ghost 内容 + 构建
pnpm run fetch:ghost && pnpm run gen:llms && pnpm run build:hugo && pnpm run build:pagefind# 拉取所有文章+页面+统计数据
pnpm run fetch:ghost
# 仅文章
pnpm run fetch:ghost:posts
# 仅页面
pnpm run fetch:ghost:pages
# 仅统计数据
pnpm run fetch:stats两个抓取脚本支持 CLI 参数:
node scripts/ghost-fetch-posts.js --slug=chrome-extensions,italians --dry-run
node scripts/ghost-fetch-posts.js --limit=3
node scripts/ghost-fetch-pages.js --slug=about --dry-run| 参数 | 简写 | 说明 |
|---|---|---|
--slug <s> |
-s <s> |
按 slug 过滤,逗号分隔多个 |
--limit <n> |
-n <n> |
限制获取数量 |
--dry-run |
— | 仅预览,不写文件 |
# TailwindCSS
pnpm build:css
# Chroma 代码高亮 CSS
pnpm build:chroma
# Hugo 静态站点
pnpm build:hugo
# Pagefind 搜索索引
pnpm build:pagefind
# LLMs.txt
pnpm gen:llms# Tailwind 监听 + Hugo server
pnpm dev
# 本地搜索预览
pnpm dev:pagefindpnpm clean# 首次初始化子模块
pnpm theme:init
# 更新子模块
pnpm theme:update- 必须使用 Admin API(非 Content API)—— 导入的文章
visibility: paid,Content API 不返回正文 - 分页:
?page=N&limit=50,响应含meta.pagination - 格式:
?formats=html,lexical,同时拉取 HTML 和 Lexical JSON - Lexical Markdown card:
{ root: { children: [{ type: 'markdown', version: 1, markdown: "..." }] } } - 脚本自动处理 Lexical 扁平索引和 Markdown card 提取,回退到 Turndown HTML→Markdown 转换
博客使用主题 Pehe,通过 git submodule 引入。
- Tailwind CSS 入口:
assets/css/input.css - 自定义样式:
assets/css/custom.css - 代码高亮:
assets/css/chroma.css(pnpm build:chroma生成) - 自定义模板:
layouts/_default/(嘀咕页、统计页等) - 页面数据:
assets/data/(书影音、友情链接等)
嘀咕页面 /mastodon 展示 Mastodon 个人实例 e5n.cc/@eallion 的数据。
博客评论系统也基于 Mastodon,通过 Mastodon API 拉取嘟文回复作为文章评论。
在 Ghost 后台 撰写文章,保存发布后运行:
pnpm run fetch:ghost:posts
# 或完整构建
pnpm build抓取脚本会从 Ghost Admin API 拉取文章,自动处理 Lexical Markdown 转换,并给 CDN 图片 URL 追加 stylename(!hugo.webp,代码块内不处理)。
复制 .env.example 为 .env.local:
cp .env.example .env.local| 变量 | 说明 |
|---|---|
GHOST_ADMIN_API_KEY |
Ghost Admin API 密钥 |
GHOST_ADMIN_API_URL |
Ghost API 地址 |
STEAM_WEB_API_KEY |
Steam API 密钥 |
NEODB_ACCESS_TOKEN |
NeoDB API 访问令牌 |
DEEPSEEK_API_KEY |
DeepSeek API 密钥 |
通过 Ghost 后台的图片上传功能上传,文章中直接引用图片 CDN URL。如果没有设置题图,可在 config/params.toml 中提供默认图片。
- 图床:先上传到图床,获取 URL 后插入文章内容
pnpm build:chroma等同于:
hugo gen chromastyles --style=github | sed 's/\./html:not(.dark) ./' >> assets/css/chroma.css
hugo gen chromastyles --style=github-dark | sed 's/\./html.dark ./' >> assets/css/chroma.cssThis project is licensed under GLWTPL
Hugo is licensed under Apache License 2.0
Theme Pehe is licensed under MIT
GLWT(Good Luck With That,祝你好运)公共许可证
版权所有© 除作者外的所有人
任何人都被允许复制、分发、修改、合并、销售、出版、再授权
或任何其它行为,但风险自负。
作者对这个项目中的代码的行为一无所知。
代码处于可用或不可用状态,没有第三种可能
祝你好运公共许可证
复制、分发和修改的条款和条件
0. 只要你永远不要留下任何可以追踪到原作者的线索,
你就可以随心所欲地做任何事,因此,不能因此责怪或追究
原作者的责任。
在任何情况下,作者均不对因使用或与本软件有关的合同诉讼、
侵权或其他方式产生的任何索赔、损害或其他责任负责。
自求多福吧。
