将 Docusaurus 部署到 GitHub Pages
官方文档 Deployment
我的方案
配置Git
生成静态文件
- npm
- yarn
npm run build
yarn run build
运行后将在 /build 目录中生成静态文件
可以将站点部署到 GitHub Pages 上
在部署前,先在本地测试
- npm
- yarn
npm run serve
yarn run serve
部署到GitHub Pages
Docusaurus 提供了一种发布到 GitHub Pages 的简便方法
修改 docusaurus.config.js 中的相关配置
url: 'https://github.com/username/projectName/',
baseUrl: '/projectName/',
organizationName: 'username', // Usually your GitHub org/user name.
projectName: 'projectName', // Usually your repo name.
| 名称 | 描述 |
|---|---|
organizationName | GitHub用户名 |
projectName | GitHub存储库的名称 |
url | GitHub页面的URL |
baseUrl | 项目的基本URL,填 /projectName/ |
tip
这里 projectName 的储存库一般为 username.github.io,如果你有自己的域名,可以去仓库的 settings 里设置 GitHub Pages 的自定义域名,记得在自己的域名控制台添加一条解析规则
都配置好之后,就可以将 Docusaurus 部署到 GitHub Pages 上了,执行
GIT_USER=<GITHUB_USERNAME> yarn deploy
等待运行完成就部署完成了,就可以通过你配置好的 url 访问你的页面了
这里有一些可选参数
| 名称 | 描述 |
|---|---|
USE_SSH | 设置为true使用SSH而不是默认的HTTPS来连接到GitHub存储库。 |
DEPLOYMENT_BRANCH | 网站将被部署到的分支,默认是gh-pages分支,存储库github.io以结尾的默认为master分支 |
CURRENT_BRANCH | 包含将部署的最新文档更改的分支。通常为master,但它可以是除gh-pages之外的任何分支。如果此变量未设置任何内容,则将使用当前分支。 |
GIT_PASS | GIT_USER的密码(或令牌) |
利用 Git Action 实现自动部署
GitHub Actions 允许在存储库中自动化,自定义和执行软件开发工作流程
假设我们的源文件储存在仓库的 master 分支中,而页面部署在 gh-pages 分支,可以参考如下操作
- 生成一个新的 SSH key
ssh-keygen -t rsa -C "user@email.com"- 输入后终端提示你选择
SSH key的保存路径,默认为~/.ssh/id_rsa,建议将id_rsa修改为其他名称,例如~/.ssh/id_rsa_action,接下来两个提示回车默认即可 - 这里不用默认名称是为了不与默认的全局SSH key冲突,具体问题参考👉这里
- 输入后终端提示你选择
将生成的
id_rsa_action.pub添加到你仓库的settings -> Deploy keys- 记得勾选
Allow write access,不然会出现公钥只读的错误
- 记得勾选
将生成的
id_rsa_action添加到你仓库的settings -> Secrets- 将
Name设置为GH_PAGES_DEPLOY
- 将
在你源文件的跟目录下创建
.github/workflows/这个目录,在目录中创建一个.yml文件- 这里创建为
doc-action.yml
- 这里创建为
在文件中写入如下内容
doc-action.ymlname: doc-action
on:
pull_request:
branches: [master]
push:
branches: [master]
jobs:
checks:
if: github.event_name != 'push'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '14.x'
- name: Test Build
run: |
if [ -e yarn.lock ]; then
yarn install --frozen-lockfile
elif [ -e package-lock.json ]; then
npm ci
else
npm i
fi
npm run build
gh-release:
if: github.event_name != 'pull_request'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '14.x'
- name: Add key to allow access to repository
env:
SSH_AUTH_SOCK: /tmp/ssh_agent.sock
run: |
mkdir -p ~/.ssh
ssh-keyscan github.com >> ~/.ssh/known_hosts
echo "${{ secrets.GH_PAGES_DEPLOY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
cat <<EOT >> ~/.ssh/config
Host github.com
HostName github.com
IdentityFile ~/.ssh/id_rsa
EOT
- name: Release to GitHub Pages
env:
USE_SSH: true
GIT_USER: user
run: |
git config --global user.email "user@email.com"
git config --global user.name "user"
if [ -e yarn.lock ]; then
yarn install --frozen-lockfile
elif [ -e package-lock.json ]; then
npm ci
else
npm i
fi
npx docusaurus deploy
- 有几个地方要修改
GIT_USER: user中的user修改为你GitHub的用户名git config --global user.email "user@email.com"修改为你GitHub的邮箱git config --global user.name "user"中的user修改为你GitHub的用户名
设置完毕后,当master 分支有新的拉取请求,会自动确保 Docusaurus 构建成功
每当有新的内容被推送到 master 分支,将会自动构建并且部署到 gh-pages
等待 Git Action 执行完毕,就可以在网页上看到你的站点了