神觉晓

@shenjuexiao

神觉晓

GitHub Pages 自定义域名使用 HTTPS

GitHub Custom Domain

📝 笔记总结

子域名最好使用 CNAME 解析,不过有的就是无法使用 Enforce HTTPS 暂时未能解决,不如部署到其他服务商更为方便。

❌ 选项 Enforce HTTPS 勾不上

GitHub Custom Domain Enforce HTTPS

错误信息通常源于DNS解析记录类型与平台要求不匹配,导致系统无法正确识别并路由站点。

docus.shenjuexiao.com is improperly configured
Your site’s DNS settings are using a custom subdomain, docus-public.shenjuexiao.com, that is set up as an A record. We recommend you change this to a CNAME record pointing to shenjuexiao.com. For more information, see documentation (InvalidARecordError).

问题原因(InvalidARecordError):域名 docus.shenjuexiao.com 当前在DNS设置中被配置为 A记录(即直接指向一个固定的IP地址)。大多数 SaaS 平台或托管服务要求自定义子域名必须使用 CNAME 记录,以便将流量指向服务商提供的特定域名(如 shenjuexiao.com)。

⚡ 解决方案

需要登录域名所在的DNS管理后台,将子域名的A记录删除,并新建一条CNAME记录。通常CNAME记录的目标值应填写为主域名或服务商提供的特定别名地址。

操作前的关键注意事项:

  • 确认目标地址:建议先检查平台后台(如 Vercel、Netlify 等)提供的具体 CNAME 目标值,以确保完全匹配。
  • 检查其他记录:如果该子域名下存在其他记录(如 TXTMX ),需要确认是否需要保留,以免影响邮件或验证功能。
  • 生效时间:DNS 修改后通常需要几分钟到几小时不等才能全球生效,请耐心等待。

GitHub Custom DNS Check Successful

如果你不清楚具体的DNS管理后台在哪里,可以查看域名注册商(如阿里云、腾讯云、GoDaddy 等)的文档;如果不确定 CNAME 的具体目标值,建议检查当前托管平台(Netlify/Vercel 等)后台的 DomainSite settings 页面。

静态代码生成器(SCG)列表

SCG (Static Code Generation) List

📝 持续更新

"静态代码生成"在当前语境下通常指向两类工具:一是用于生成网站HTML的静态站点生成器(Static Site Generator,SSG),例如Hugo、Gatsby;二是更广义的代码生成器(Code Generator),例如T4、CodeSmith,用于生成各类编程语言的源代码。本列表主要聚焦于前者,并补充了一些其他类型的代表。

💡 同步更新:github.com/shenjuexiao/SCG-list

🔍 更多查找:jamstack.org

🍎 A

Amazon CodeWhisperer

Astro

SCG GitHub withastro astro

🐈 C

CodeSmith

🐕 D

Docusaurus

SCG GitHub facebook docusaurus

🐘 E

Eleventy

技术栈:Node.js
官方网站:11ty.dev
项目地址:github.com/11ty/eleventy
模板演示:eleventy-simple.pages.dev
插件演示: fastcomments.com/commenting-system-for-11ty

SCG GitHub 11ty/buildawesome

Excalidraw (手绘风格 + AI)

🐟 F

Figma to Code (AI插件)

🐐 G

Gatsby

GitHub Copilot

🐴 H

Hexo

github.com/hexojs/hexo

Hugo

github.com/gohugoio/hugo

🃏 J

Jekyll

🥜 N

Next.js (SSG模式)

🦉 O

OpenAPI Generator

🐧 P

Pelican

🐍 S

Swagger Codegen

🐯 T

T4 (Text Template Transformation Toolkit)

tldraw (白板生成代码)

🦄 V

v0.dev (Vercel出品)

  • 技术栈:React,Tailwind CSS,AI
  • 官方网站:v0.dev
  • 项目地址:闭源商业产品
  • Demo:v0.dev (可直接在线使用)

VuePress

SCG GitHub vuejs vuepress

🦓 Z

Zola

SCG GitHub getzola zola

Idea-Note 笔记应用

GitHub Liubsyy idea-note

📝 笔记总结

安装绿色版比较方便,同步功能实用性强,对于习惯左右分栏预览来说还是有点不自在,尤其是空行不是那么明显。可能是我比较喜欢在线版的 Markdown 编辑器。

📖 内容来源

Idea Note 是一款轻量简洁的笔记应用,包含 Markdown 编辑器、文件管理器、 AI 笔记助手,支持Git远程同步,兼容 Windows、MacOS 和 Linux 平台。

⚡ 功能特性

  • Markdown 编辑器:所见即所得实时预览,支持 CommonMark + GFM、KaTeX 公式、Mermaid流程图、HTML / SVG 渲染、源码模式、多标签页和格式工具栏。
  • 文件管理:除markdown外还可编辑其他文本文件,可作为轻量级项目文件管理器。
  • AI 笔记助手:用自然语言对当前笔记进行问答、总结、润色,并通过工具直接读取、搜索、新建、编辑或删除笔记。
  • Git 同步与历史:支持自动提交、远程推拉、本地版本记录、单文件 / 全局历史和 diff 对比。
  • 内置终端:集成终端,可在应用内直接执行命令。
  • 其他特性:支持PDF导出和打印、切换主题、自定义字体字号间距。

Hexo 四种部署方式

4 Ways to Deploy Hexo

🌐 快速安装

1
2
3
4
5
6
7
8
9
10
# 安装 Node.js 版本需不低于 10.13
# 建议使用 Node.js 12.0 及以上版本
# 安装 Git
# npm 安装 Hexo
npm install -g hexo-cli

# Hexo 初始化
hexo init <folder>
cd <folder>
npm install

1️⃣ 部署本仓库 GitHub Actions (官方推荐)

在 GitHub Pages 上部署 Hexo

  • .gitignore 文件中包含一行 public/
  • 自定义域名需要在 source/ 文件夹中新增 CNAME
  • 建立 .github/workflows/pages.yml
  • 本地检查 node --version,替换版本
  • 将 main 分支 push 到远程仓库
  • 远程仓库 Settings -> Pages -> Source -> GitHub Actions

官方版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
.github/workflows/pages.yml
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: Cache NPM dependencies
uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.OS }}-npm-cache
restore-keys: |
${{ runner.OS }}-npm-cache
- name: Install Dependencies
run: npm install
- name: Build
run: npm run 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

简化版

name: simple-hexo-deploy-actions

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# .github/workflows/simple-hexo-deploy-actions.yml
name: simple-hexo-deploy-actions

on:
push:
branches: [ main ]
workflow_dispatch:

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- uses: actions/setup-node@v4
with:
node-version: \"20\"
- uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.OS }}-npm-cache
- run: npm install
- run: npm run build
- 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:
- uses: actions/deploy-pages@v4
id: deployment

2️⃣ 一键部署

一键部署

  • 安装 hexo-deployer-git
1
npm install hexo-deployer-git --save
  • 编辑 _config.yml (示例值)
1
2
3
4
5
deploy:
type: git
repo: <repository url> # https://bitbucket.org/JohnSmith/johnsmith.bitbucket.io
branch: [branch]
message: [message]

3️⃣ 部署本仓库 gh-pages

使用 Personal Access Token (PAT)

  • 步骤1:创建 Personal Access Token
    点击 GitHub 右上角头像 → Settings,左侧菜单选择 Developer settingsPersonal access tokensTokens (classic),点击 Generate new token (classic)

设置:
Note: 填写名称(如 "gh-pages-deploy")
Expiration: 选择合适的时间
Scopes: 勾选 repo(完整权限)
生成并复制 token(只显示一次,务必保存)

  • 步骤2:在仓库中添加 Secret
    进入你的仓库 SettingsSecrets and variablesActions,点击 New repository secret
    Name: PERSONAL_TOKEN
    Secret: 粘贴你复制的 token

  • 步骤3:修改 workflow 文件

1
2
3
4
5
6
7
8
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v4
with:
# 使用 PAT 而不是 GITHUB_TOKEN
personal_token: ${{ secrets.PERSONAL_TOKEN }}
# 或者你的构建输出目录
publish_dir: ./build
publish_branch: gh-pages

简化版

name: simple-hexo-deploy-pages

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# .github/workflows/simple-hexo-deploy-pages.yml
name: simple-hexo-deploy-pages

on:
push:
branches: [ main ]
workflow_dispatch:

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- uses: actions/setup-node@v4
with:
node-version: \"20\"
- uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.OS }}-npm-cache
- run: npm install
- run: npm run build
- uses: actions/upload-artifact@v4
with:
name: public
path: ${{ github.workspace }}/public
retention-days: 1

deploy:
needs: build
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
with:
name: public
path: ./public
- uses: peaceiris/actions-gh-pages@v4
with:
personal_token: ${{ secrets.PERSONAL_TOKEN }}
external_repository: ${{ github.respository }}
publish_branch: gh-pages
publish_dir: ./public
keep_files: false
force_orphan: false
commit_message: '🚀 Deploy static pages to gh-pages'
allow_empty_commit: false
cname: ${{ github.respository_owner }}.github.io/${{ github.event.respository.name }}
user_name: \"github-actions[bot]\"
user_email: \"github-actions[bot]@users.noreply.github.com\"

4️⃣ 部署其他仓库 gh-pages

使用 Personal Access Token (PAT) 方法同上

简化版

name: simple-hexo-deploy-other

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# .github/workflows/simple-hexo-deploy-other.yml
name: simple-hexo-deploy-other

on:
push:
branches: [ main ]
workflow_dispatch:

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- uses: actions/setup-node@v4
with:
node-version: \"20\"
- uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.OS }}-npm-cache
- run: npm install
- run: npm run build
- uses: actions/upload-artifact@v4
with:
name: public
path: ${{ github.workspace }}/public
retention-days: 1

deploy:
needs: build
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
with:
name: public
path: ./public
- uses: peaceiris/actions-gh-pages@v4
with:
personal_token: ${{ secrets.PERSONAL_TOKEN }}
external_repository: # 用户名/其他仓库
publish_branch: gh-pages
publish_dir: ./public
keep_files: false
force_orphan: false
commit_message: '🚀 Deploy static pages to gh-pages'
allow_empty_commit: false
cname: # 自定义
user_name: \"github-actions[bot]\"
user_email: \"github-actions[bot]@users.noreply.github.com\"

细粒度个人访问令牌

GitHub Fine-grained personal access tokens.png

📝 笔记总结

Personal access tokens (classic) 设置:
repo - Full control of private repositories
Fine-grained personal access tokens 类似设置。

📖 内容来源

🔍 简单说明

Fine-grained personal access tokens

Create a fine-grained, repository-scoped token suitable for personal API use and for using Git over HTTPS.

创建一个细粒度的、仓库范围的令牌,为个人通过 API 以及 HTTPS 使用 Git 所用。

Personal access tokens (classic)

Tokens you have generated that can be used to access the GitHub API.

你已生成的、可用于访问 GitHub API 的令牌。

🔄 复刻经典权限

repo: Full control of private repositories,确实是经典令牌(Classic PAT)中最“万能”也最危险的权限。细粒度令牌(Fine-grained PAT)中,不存在、也不允许存在一个直接等同于“Full control of private repositories”的权限选项。

要复制“Full control”的效果,核心是把“访问范围”和“数据权限”都开到最大:

仓库访问范围(Repository access)

必须选择 “All repositories”

仓库数据权限(Repository permissions)

逐个手动把所有与仓库读写相关的权限都设为 “Read and write”。关键列表如下(缺一不可):

  • Contents(代码、提交、树)
  • Pull Requests
  • Issues
  • Actions(GitHub Actions)
  • Workflows(工作流文件)
  • Administration(仓库设置、分支保护规则)
  • Metadata(元数据,这个默认就有,通常不可取消)
  • Secrets(仓库和环境的密文)
  • Deployments(部署状态)
  • Environments(环境配置)

将上述所有权限都设为读写后,这个细粒度令牌就拥有了绝大多数私有仓库的“完整控制权”。

🚫 无法复刻的部分

即使你照上面全部设置了,它依然不是真正的“Full control”,主要有两个硬性限制:

  • 组织管理权限(无法绕过):如果你是组织成员而非所有者,即使令牌给了 Administration: Write,你在细粒度令牌下无法修改组织的分支保护规则或成员权限,除非你本人是组织所有者。而经典令牌的 repo 范围直接沿用你账户的现有权限,不受此限。
  • 外部仓库权限(无法覆盖):细粒度令牌的“All repositories”仅指你创建或直接所属组织下的仓库。它无法访问外部协作者邀请你加入的仓库,除非该仓库明确被选中。而经典 repo 令牌可以访问你所有能接触到的私有仓库。

⚠️ 需要完全相同的“Full control”?

只有唯一的替代方案:继续使用经典令牌(Personal access tokens (classic)),并在创建时勾选 repo 范围。但需要注意:

  • GitHub已逐步限制经典令牌的使用(自2024年起,部分操作已不支持新建经典令牌)。
  • 如果必须使用,请务必将其视为最高级别密码,绝不要写入代码或日志,并设置极短的过期时间(如30天)。

💡 总结建议

如果你是为了给CI/CD(持续集成/持续部署)系统授权,强烈不建议追求“Full control”。请只授予该CI任务必要的单个仓库和具体权限(如只需 Contents: read 来拉代码)。

如果确因历史代码或工具限制必须使用repo全权限,那么不要尝试在细粒度令牌中寻找平替——直接创建经典令牌,但务必在风险评估后启用严格的过期和审计策略。

📋 简单案例

我现在使用 Fine-grained tokens 代替 Tokens (classic),生成例如 Repo 权限全选用于从源码仓库使用 GitHub Actions 部署博客仓库的 gh-pages。

GitHub Fine-grained tokens Permissions

Pagic Windows 降级安装

Pagic dist on http 127

📝 笔记总结

克隆仓库,修改 i18n.tsx,安装成功,但是部署中还会出现 CDN 错误。

📖 内容来源

Pagic:Deno + React 驱动的静态网站生成器

🔧 安装 Deno v1.34.1

PowerShell (Windows) (失败)

原理是将脚本内容下载后,通过管道传递给 Invoke-Expression,并使用 -ArgumentList 来指定版本号:

1
irm https://deno.land/install.ps1 | iex -ArgumentList \"v1.34.1\"

1
irm https://deno.land/install.ps1 | iex -args \"v1.34.1\"

分两步执行(成功)

1
2
3
4
# 1. 下载脚本到本地临时文件夹
Invoke-RestMethod -Uri \"https://deno.land/install.ps1\" -OutFile \"$env:TEMP\\deno_install.ps1\"
# 2. 执行脚本并传入参数
& \"$env:TEMP\\deno_install.ps1\" \"v1.34.1\"

Deno Windows deno install 1.34.1

🧩 安装后验证

安装完成后,记得关闭并重新打开你的 PowerShell 终端,然后运行以下命令来确认版本:

1
deno --version

⬆️ 安装 Pagic

安装最新版本

1
deno install --unstable --allow-read --allow-write --allow-net --allow-env --allow-run --name=pagic https://deno.land/x/pagic/mod.ts

安装指定版本

1
deno install --unstable --allow-read --allow-write --allow-net --allow-env --allow-run --name=pagic https://deno.land/x/pagic@v1.6.3/mod.ts

指定读写目录的方式

1
deno install --unstable --allow-read=/home/xcatliu/site --allow-write=/home/xcatliu/site --allow-net --allow-env --allow-run --name=pagic https://deno.land/x/pagic/mod.ts

指定读写目录的方式

1
deno install --unstable --allow-read=/home/xcatliu/site --allow-write=/home/xcatliu/site --allow-net --allow-env --allow-run --name=pagic https://deno.land/x/pagic/mod.ts

🚫 CDN 错误

1
2
3
4
5
6
7
PS D:\\git> deno install --unstable --allow-read --allow-write --allow-net --allow-env --allow-run --name=pagic https://deno.land/x/pagic/mod.ts
Warning Implicitly using latest version (v1.6.3) for https://deno.land/x/pagic/mod.ts
Sending fatal alert BadCertificatey@v0.25.7/prompt/_generic_suggestions.ts (10/57)
Sending fatal alert BadCertificate11.0/fs/mod.ts 0.40KiB/0.40KiB (15/57)
error: error sending request for url (https://cdn.pagic.org/i18next@19.8.1/esnext/i18next.js): error trying to connect: invalid peer certificate: NotValidForName
at https://deno.land/x/pagic@v1.6.3/src/plugins/i18n.tsx:4:21
PS D:\\git>

错误是由于 Deno 在下载依赖时遇到了 SSL 证书验证问题。具体是 cdn.pagic.org 这个域名的证书无效(NotValidForName 错误)。

Pagic error sending request for url

🎯 本地安装

克隆仓库

1
git clone git@github.com:xcatliu/pagic.git

修改 i18n.tsx

1
2
3
4
# pagic\\src\\plugins\\i18n.tsx
import i18next from '../../cdn.pagic.org/i18next@19.8.1/esnext/i18next.js';
import { Trans as TransComponent } from '../../cdn.pagic.org/react-i18next@11.7.3/Trans.js';

安装 Pagic

1
deno install --unstable --allow-read --allow-write --allow-net --allow-env --allow-run --name=pagic mod.ts

Pagic Successfully installed pagic

##💡初始化项目

要使用 pagic 构建静态网站,则该项目至少需要包含一个 pagic.config.ts 配置文件和一个 md/tsx 页面文件:

site/
├── pagic.config.ts
└── README.md

当然,pagic.config.ts 一开始可以只导出一个空对象:

1
export default {};

README.md 可以是一个简单的 Markdown 文件:

1
# Hello world

你可以运行以下命令一次性创建出上面的 site 项目:

1
mkdir site && cd site && echo \"export default {};\" > pagic.config.ts && echo \"# Hello world\" > README.md

📚 运行 pagic build

接下来,我们就可以在项目中使用 pagic build 命令了。它的基本用法如下:

1
2
3
4
5
# 构建静态网站
pagic build [options]
# --watch 监听文件变动以重新构建
# --serve 启动本地服务,预览静态网站
# --port 指定本地服务的端口号

不妨试试在 site 目录下运行以下代码:

1
pagic build --watch --serve

然后用浏览器打开 http://127.0.0.1:8000/ ,看看是不是显示出 Hello world 了呢?

注意,构建结果在 dist 目录中(这里隐藏了一些次要的文件):

1
2
3
4
5
site/
|── dist # 构建结果目录
| └── index.html
├── pagic.config.ts
└── README.md

一般的 Markdown 文件会被构建为同名的 HTML 文件,但是 README.md 被构建为了 index.html,这是一种人性化的处理,方便同时在 GitHub 中和静态网站中展示首页的内容。

Pagic pagic build watch serve

后面不尝试了,因为还会出现 CDN 出错,修改本地文件或许可以构建成功,但是不太顺利。

Pagic Windows 安装

Deno Windows PowerShell irm

📝 笔记总结

未安装成功,Deno 版本 2.9.4,后续发现可能是因为 Deno 版本太高了,使用 Deno 1.34.1 再次尝试。

📖 内容来源

Pagic:Deno + React 驱动的静态网站生成器

🔧 安装 Deno

1
irm https://deno.land/install.ps1 | iex

⬆️ 安装 Pagic

安装最新版本(失败)

1
deno install --unstable --allow-read --allow-write --allow-net --allow-env --allow-run --name=pagic https://deno.land/x/pagic/mod.ts

⚠️ 链接不存在:https://deno.land/x/pagic/mod.ts

安装指定版本(失败)

1
deno install --unstable --allow-read --allow-write --allow-net --allow-env --allow-run --name=pagic https://deno.land/x/pagic@v1.6.3/mod.ts

⚠️ 链接存在:https://deno.land/x/pagic@v1.6.3/mod.ts

指定读写目录的方式(未尝试)

1
deno install --unstable --allow-read=/home/xcatliu/site --allow-write=/home/xcatliu/site --allow-net --allow-env --allow-run --name=pagic https://deno.land/x/pagic/mod.ts

❓安装错误提示一

1
2
3
4
5
PS D:\\Git> deno install --unstable --allow-read --allow-write --allow-net --allow-env --allow-run --name=pagic https://deno.land/x/pagic@v1.6.3/mod.ts
error: the following required arguments were not provided:
--global

Note: Permission flags can only be used in a global setting

Deno Windows deno install error

Deno 要求在使用权限标志时,必须指定 –global 选项。正确的命令在你的命令末尾加上 –global

  • 加上 --global,Deno 1.30+ 版本,权限标志(如 --allow-read)只能全局安装使用
  • --global
  • 去掉 --unstable,Deno 2.0+ 版本不需要

正确的命令:

1
deno install --allow-read --allow-write --allow-net --allow-env --allow-run --name=pagic --global https://deno.land/x/pagic@v1.6.3/mod.ts

🪲 安装错误提示二

1
2
3
4
5
6
7
PS D:\\Git> deno install --allow-read --allow-write --allow-net --allow-env --allow-run --name=pagic --global https://deno.land/x/pagic@v1.6.3/mod.ts
✅ Granted import access to \"cdn.pagic.org:443\".
error: Import 'https://cdn.pagic.org/i18next@19.8.1/esnext/i18next.js' failed.
0: error sending request for url (https://cdn.pagic.org/i18next@19.8.1/esnext/i18next.js): client error (Connect): invalid peer certificate: certificate not valid for name \"cdn.pagic.org\"; certificate is only valid for DnsName(\"*.cdn.myqcloud.com\"), DnsName(\"*.2144.cn\"), DnsName(\"*.2144.com\"), DnsName(\"*.4399.com\"), DnsName(\"*.5054399.com\"), DnsName(\"*.58cdn.com.cn\"), DnsName(\"*.bldimg.com\"), DnsName(\"*.cdn-go.cn\"), DnsName(\"*.cntv.qcloudcdn.com\"), DnsName(\"*.danmu.com\"), DnsName(\"*.dd.cdntips.net\"), DnsName(\"*.dd.qq.com\"), DnsName(\"*.dianping.com\"), DnsName(\"*.dl.txcdns.com\"), DnsName(\"*.dlied1.cdntips.net\"), DnsName(\"*.dpfile.com\"), DnsName(\"*.ffnews.cn\"), DnsName(\"*.file.myqcloud.com\"), DnsName(\"*.flash.2144.com\"), DnsName(\"*.flash.cn\"), DnsName(\"*.geetest.com\"), DnsName(\"*.gtimg.cn\"), DnsName(\"*.gtimg.com\"), DnsName(\"*.hls.cdn.myqcloud.com\"), DnsName(\"*.image.myqcloud.com\"), DnsName(\"*.img4399.com\"), DnsName(\"*.jsbchina.cn\"), DnsName(\"*.lof3.xyz\"), DnsName(\"*.meituan.net\"), DnsName(\"*.myapp.com\"), DnsName(\"*.mykeeta.net\"), DnsName(\"*.qcloudcdn.com\"), DnsName(\"*.qpic.cn\"), DnsName(\"*.sogoucdn.com\"), DnsName(\"*.suyinwealth.com\"), DnsName(\"*.ugdtimg.com\"), DnsName(\"*.uniqlo.cn\"), DnsName(\"*.vda.v.qcloudcdn.com\"), DnsName(\"*.video.myqcloud.com\"), DnsName(\"*.vip.cdngot.com\"), DnsName(\"*.vod-qcloud.com\"), DnsName(\"*.vod.cdn.myqcloud.com\"), DnsName(\"*.vod.myqcloud.com\"), DnsName(\"*.vod2.myqcloud.com\"), DnsName(\"*.wanyabox.com\"), DnsName(\"*.weishi.qq.com\"), DnsName(\"*.wx.qq.com\"), DnsName(\"*.zhongcheng818.com\"), DnsName(\"*.zservey.net\"), DnsName(\"cdn.myqcloud.com\"), DnsName(\"flash.cn\"), DnsName(\"nitrome.com.4399.com\"), DnsName(\"www.miniclip.com.4399pk.com\"), DnsName(\"www.tencentwm.com\"), DnsName(\"www.txfund.com\") or DnsName(\"xpdl999.aiwan4399.com\")
1: client error (Connect)
2: invalid peer certificate: certificate not valid for name \"cdn.pagic.org\"; certificate is only valid for DnsName(\"*.cdn.myqcloud.com\"), DnsName(\"*.2144.cn\"), DnsName(\"*.2144.com\"), DnsName(\"*.4399.com\"), DnsName(\"*.5054399.com\"), DnsName(\"*.58cdn.com.cn\"), DnsName(\"*.bldimg.com\"), DnsName(\"*.cdn-go.cn\"), DnsName(\"*.cntv.qcloudcdn.com\"), DnsName(\"*.danmu.com\"), DnsName(\"*.dd.cdntips.net\"), DnsName(\"*.dd.qq.com\"), DnsName(\"*.dianping.com\"), DnsName(\"*.dl.txcdns.com\"), DnsName(\"*.dlied1.cdntips.net\"), DnsName(\"*.dpfile.com\"), DnsName(\"*.ffnews.cn\"), DnsName(\"*.file.myqcloud.com\"), DnsName(\"*.flash.2144.com\"), DnsName(\"*.flash.cn\"), DnsName(\"*.geetest.com\"), DnsName(\"*.gtimg.cn\"), DnsName(\"*.gtimg.com\"), DnsName(\"*.hls.cdn.myqcloud.com\"), DnsName(\"*.image.myqcloud.com\"), DnsName(\"*.img4399.com\"), DnsName(\"*.jsbchina.cn\"), DnsName(\"*.lof3.xyz\"), DnsName(\"*.meituan.net\"), DnsName(\"*.myapp.com\"), DnsName(\"*.mykeeta.net\"), DnsName(\"*.qcloudcdn.com\"), DnsName(\"*.qpic.cn\"), DnsName(\"*.sogoucdn.com\"), DnsName(\"*.suyinwealth.com\"), DnsName(\"*.ugdtimg.com\"), DnsName(\"*.uniqlo.cn\"), DnsName(\"*.vda.v.qcloudcdn.com\"), DnsName(\"*.video.myqcloud.com\"), DnsName(\"*.vip.cdngot.com\"), DnsName(\"*.vod-qcloud.com\"), DnsName(\"*.vod.cdn.myqcloud.com\"), DnsName(\"*.vod.myqcloud.com\"), DnsName(\"*.vod2.myqcloud.com\"), DnsName(\"*.wanyabox.com\"), DnsName(\"*.weishi.qq.com\"), DnsName(\"*.wx.qq.com\"), DnsName(\"*.zhongcheng818.com\"), DnsName(\"*.zservey.net\"), DnsName(\"cdn.myqcloud.com\"), DnsName(\"flash.cn\"), DnsName(\"nitrome.com.4399.com\"), DnsName(\"www.miniclip.com.4399pk.com\"), DnsName(\"www.tencentwm.com\"), DnsName(\"www.txfund.com\") or DnsName(\"xpdl999.aiwan4399.com\")
at https://deno.land/x/pagic@v1.6.3/src/plugins/i18n.tsx:4:21

Deno Windows deno install error

cdn.pagic.org DNS 被污染,解析到腾讯云 CDN 节点,但该节点证书并不是 cdn.pagic.org 的,出现证书域名不匹配,Deno HTTPS 校验直接拒绝。

🌟 待续……

⚡ 解决不掉了。😅

🧩 验证安装

安装后,确保 ~/.deno/bin 在你的系统 PATH 中,然后测试:

pagic --version
``

Deno Windows 安装

Deno Windows PowerShell irm

📝 笔记总结

PowerShell 脚本安装最方便。

1
2
irm https://deno.land/install.ps1 | iex
deno --version

📖 内容来源

Deno 是一个由 Node.js 的原始作者 Ryan Dahl 创建的 JavaScript、TypeScript 和 WebAssembly 运行时。你可以把它看作是 Node.js 的“进化版”,旨在解决 Node.js 早期设计中的一些遗憾,为现代 Web 开发提供一个更安全、更高效的开发环境

在 Windows 上安装 Deno 非常简单,有多种方法可供选择。官方推荐使用 PowerShell 脚本,因为它能提供更快的启动速度。

🔧 使用 PowerShell 脚本安装(推荐)

这是最快捷的官方安装方式。以管理员身份打开 PowerShell 并运行以下命令:

1
irm https://deno.land/install.ps1 | iex

这行代码的意思是从网上下载脚本并立即运行。

1
irm https://某个网站/脚本.ps1 | iex

这非常危险,因为你不知道脚本里写了什么,它可能会删除你的文件、窃取你的信息。除非你 100% 信任来源,并且仔细看过脚本内容,否则绝对不要执行这类命令。

执行后,Deno 会默认安装到 %USERPROFILE%\\.deno\\bin\\deno.exe,安装程序通常会自动将此路径添加到系统 PATH 环境变量中。

安装完成后,打开一个新的终端窗口,运行以下命令验证是否安装成功:

1
deno --version

如果能看到版本信息,就说明安装成功了。

📦 其他安装方式

如果你更习惯使用包管理器,这些也是不错的选择:

包管理器 命令
Winget winget install DenoLand.Deno
Scoop scoop install deno
Chocolatey choco install deno
npm npm install -g deno(启动性能略逊于官方脚本)

🖱️ 手动安装与系统要求

你也可以选择从 GitHub 的发布页面下载对应架构的 .zip 压缩包,解压后将 deno.exe 放在一个你方便管理的目录,并手动将其添加到系统 PATH 环境变量中。

系统要求:请确保你的 Windows 系统是 Windows 10 版本 1709Windows Server 2016 版本 1709 及更新的版本。

⬆️ 更新 Deno

当你需要更新到最新版本时,只需在终端中运行deno upgrade命令即可。

PicGo GitHub 图床搭建

PicGo 2.3.0 GitHub Config

📝 笔记总结

以下可以不用看,我已经卸载 PicGo。我现在使用的是直接保存图片,上传到 GitHub 仓库,然后通过链接地址引用。

例如:

https://cdn.jsdelivr.net/gh/用户名/仓库名@分支名/文件夹/图片名

或:

https://raw.githubusercontent.com/用户名/仓库名/分支名/图片名

之前的文章:GitHub raw vs cdn

当然也可以使用 PicGo 进行 GitHub 图床设置。

📖 内容来源

使用 PicGo + GitHub 图床,是一种很流行的免费方案,特别适合写博客、记笔记时管理图片。本质上是让 PicGo 这个工具,把你本地的图片自动上传到 GitHub 仓库,并生成一个在线的图片链接。

🔧 创建 GitHub 仓库与 Token

首先需要在 GitHub 上创建一个用来存放图片的“图床仓库”,并生成一个访问令牌 (Token),这是 PicGo 上传图片的“钥匙”。

1. 创建公开仓库

在 GitHub 点击右上角 + 号,选择 New repository注意:仓库的可见性必须选 Public,否则图片无法被公开访问。

2. 生成 Token

点击头像 → Settings → 左下角 Developer settingsPersonal access tokensTokens (classic)Generate new token (classic)
* Note (名称):随便填一个,比如 PicGo-image
* Expiration (过期时间)建议选 No expiration(永不过期),不然过期后需要重新生成并更新配置。
* Select scopes (权限):务必勾选 repo 这个选项,这会赋予 PicGo 读写你仓库的权限。
* 点击生成后,立即复制并妥善保存这个 Token(它只显示一次)。

⚙️ 配置 PicGo

下载安装 PicGo 后,在“图床设置”里找到 GitHub 进行配置。

配置项 填写内容 备注
设定仓库名 你的GitHub用户名/仓库名 例如:zhangsan/my-image-bed
设定分支名 main 2020年后GitHub新仓库默认分支为main
设定Token 粘贴刚才保存的Token
指定存储路径 img/ (选填) 图片将上传到仓库下的img文件夹,不填则传至根目录
设定自定义域名 https://cdn.jsdelivr.net/gh/你的用户名/仓库名@main 这是最关键的一步,使用jsDelivr CDN加速访问,国内访问更快

小提示:如果上传成功后图片无法显示,大概率是“自定义域名”配置有误。可以尝试将域名改为 https://raw.githubusercontent.com/你的用户名/仓库名/main 测试。

✍️ 与 Typora 集成(可选)

如果你用 Typora 写 Markdown,可以配置它调用 PicGo 实现“粘贴即上传”:

  1. 打开 Typora,进入 文件偏好设置图像
  2. 插入图片时:选择 上传图片
  3. 上传服务:选择 PicGo (app),并指定你 PicGo 的安装路径。
  4. 点击“验证图片上传选项”,成功后就可以在 Typora 里愉快地粘贴图片了。

⚠️ 常见问题与排错

  1. Token 过期:这是最容易被忽略的问题。如果之前能用,突然有一天上传失败,可以先检查一下你的 GitHub Token 是否已过期。建议生成时直接选 No expiration
  2. 端口占用:PicGo 默认监听端口是 36677,如果同时开启了多个 PicGo 进程或其他加速工具(如 Steam++),可能会冲突,导致上传失败。
  3. 网络与 Hosts:由于 GitHub 服务器在国外,网络波动可能影响访问。如果上传很慢或失败,可以尝试修改 Hosts 文件,将 raw.githubusercontent.com 等域名指向可用 IP。

Valaxy 部署 GitHub Pages

Valaxy Deploy to GitHub Pages

📖 内容来源

✨ VALAXY
下一代静态博客框架
简洁、强大、高性能。遇见你一直想要的现代博客框架。

⚙️ 自带的 gh-pages.yml

.github/workflows/gh-pages.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# gh-pages.yml

name: GitHub Pages

on:
push:
branches:
# The branch where the project source code resides
# 项目源代码所在的分支
- main
- master
- valaxy

jobs:
build:
runs-on: ${{ matrix.os }}

strategy:
matrix:
node-version: [lts/*]
os: [ubuntu-latest]
fail-fast: false

steps:
- uses: actions/checkout@v2

- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/

- name: 📦 Install Dependencies
run: npm i

- name: 🌌 Build Valaxy Blog
run: npm run build

- name: 🪤 Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dist
force_orphan: true

在使用 pnpm create valaxy 创建模版项目时,已内置文件 .github/workflows/gh-pages.yml 以实现 GitHub Actions 的自动部署工作流。

选择 Github Repo,打开 Settings -> Action -> General -> Workflow permissions,选择 read and write permissions
上传至 GitHub Repo,打开 Settings -> Pages,选择 gh-pages 分支。
gh-pages 已由 .github/workflows/gh-pages.yml 自动部署。

注意修改 gh-pages.yml 中的 on.push.branches 为你源代码所在的分支,默认为 main

❌ Error: Action failed

Error: Action failed with "The process ‘/usr/bin/git’ failed with exit code 128"

Valaxy Error Action failed

不知道为什么在同一个仓库使用 github_token: ${{ secrets.GITHUB_TOKEN }} 还会权限不够。

✅ 解决方案

这个错误是因为 GitHub Actions 的默认 token 权限不足,无法推送到 gh-pages 分支。以下是几种解决方案:

1:使用个人访问令牌

  • 生成 Personal Access Token

    • 前往 GitHub SettingsDeveloper settingsPersonal access tokensTokens (classic)
    • 生成新 token,勾选 repo 权限
    • 复制生成的 token
  • 在仓库中设置 Secret

    • 前往仓库 SettingsSecrets and variablesActions
    • 添加新的 secret,命名为 PERSONAL_TOKEN,值粘贴你的 token
  • 修改 workflow 文件

1
2
3
4
5
6
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
personal_token: ${{ secrets.PERSONAL_TOKEN }}
publish_dir: ./dist
# 其他配置...

2:使用 GitHub 自带的 GITHUB_TOKEN

修改 workflow 文件,添加写入权限:

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

permissions:
contents: write

jobs:
deploy:
runs-on: ubuntu-latest
steps:
# ... 其他步骤

- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dist

⚠️ 补充:关于 Node 警告的解决方案

workflow 中添加环境变量:

1
2
env:
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true

或者在部署步骤中指定:

1
2
3
4
5
6
7
8
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dist
# 在 env 中设置
env:
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true

如果以上方案都不行,请检查:

  1. 仓库是否属于组织?可能需要调整权限设置
  2. 是否启用了分支保护规则?需要临时禁用或配置允许强制推送

📝 修改后的 gh-pages.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# valaxy 自带 gh-pages.yml
# valaxy.site/zh/guide/deploy

name: GitHub Pages

on:
push:
branches:
# The branch where the project source code resides
# 项目源代码所在的分支
- main
- master
- valaxy

# 20260804
# 增加权限
permissions:
contents: write
pages: write
id-token: write

jobs:
build:
runs-on: ${{ matrix.os }}

strategy:
matrix:
node-version: [lts/*]
os: [ubuntu-latest]
fail-fast: false

steps:
- uses: actions/checkout@v2

- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/

- name: 📦 Install Dependencies
run: npm i

- name: 🌌 Build Valaxy Blog
run: npm run build

- name: 🪤 Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dist
force_orphan: true

Valaxy build lts ubuntu-lastest

0%