--- title: 部署 teedoc 生成的网站到 github pages keywords: teedoc, 部署 desc: teedoc 生成的网站部署到 github pages 服务, 使用 github 的免费服务器部署网站 --- 因为 `github` 提供免费的 `pages` 服务, 我们只需要将`html`页面提交到`gh-pages`分支, 然后在项目设置里面开启`pages`服务即可. 同时, 我们也将页面构建和推送做了自动化, 每次向仓库提交代码/文档, 都会触发`github action`自动构建并推送到`gh-pages`页面, 十分简单方便可靠! ## 克隆模板仓库 这里使用 teedoc 官网的源码作为模板, 访问 [https://github.com/teedoc/template](https://github.com/teedoc/template) 或者 [https://github.com/teedoc/teedoc.github.io](https://github.com/teedoc/teedoc.github.io) 点击 `Use this template` ![github use template](../../assets/images/github_use_template.jpg) 然后填写新的仓库名称(如果你不准备自定义域名,则仓库名字最好是`teedoc.github.io`将`teedoc`替换成你的用户名或者组织名)和描述,基于这个仓库新建一个你自己的仓库,现在你获得了和 `teedoc`官网一模一样的仓库了 > 会发现有一个`.github/workflows`的目录,这个就是`github action`的配置文件,我们利用这个功能来实现: > 当我们更新仓库的源文件时, `github action`自动根据这个配置文件的命令构建生成静态网页,然后推送到这个仓库的`gh-pages`分支 > 其中`sync_code_to_gitee.yml` 和 `sync_pages_to_gitee.yml` 是用来将代码同步到 `gitee` 的, 可以将他们删除, 需要时请自行研究 ## 自动触发构建 仓库每提交一次修改,会自动触发构建,构建完成后`gh-pages`分支就会出现生成的`html`页面, 可以在`Actions`栏看到进度和日志 如果是绿色的勾, 就代表成功了,否则就是失败了,可以点进去看构建日志报了什么错,一般都是前面的值填错了 ![](../../assets/images/github_action.jpg) ## 设置 pages 服务 然后在设置里面找到 `pages` 服务设置,打开即可,然后访问对应的域名,可以勾选 `Enforce HTTPS`来使能`HTTPS`(推荐) 比如这里是`https://teedoc.github.io/` >! 注意如果根路径不是`/`,而且没有自定义域名(自定义域名见后面的介绍),比如`https://teedoc.github.io/my_site/`, 则需要在`site_config.json`中配置`"site_root_url":"/my_site/"` ![](../../assets/images/github_pages.jpg) ## Pages 服务自定义域名 部署好后会有一个默认的域名,比如`teedoc.github.io`, 如果想使用自己的域名,比如`teedoc.neucrack.com`,即需要自定义域名。 在`site_config.json`文件中设置了网站根目录映射的文件目录,比如这里是`pages/index/zh`目录: ```json "pages": { "/": "pages/index/zh", "/en/": "pages/index/en" }, ``` 在这个目录新建一个文件,取名`CNAME`注意没有后缀,然后写入自定义的域名比如`teedoc.neucrack.com`保存文件,提交即可 > 你可能在设置里面看到了`custom domain`的设置,但是需要像这里说的设置`CNAME`文件才能保持一直生效,不然下次提交自定义域名就失效了 ## 自动构建进阶配置 在`.github/workflows/publish.yml` 文件中配置了构建的流程, 主要包含了构建文档, 和推送文档到`gh-pages`分支, 可以根据情况修改脚本. 推送文档到`gh-pages`分支用了, [github-pages-deploy-action](https://github.com/JamesIves/github-pages-deploy-action) 这个 `github actioin` 插件, 更多进阶的用法请阅读这个插件的文档 一般用上面的方式就足够了, 甚至不用配置任何参数就可以使用, 另外, `publish.yml` 底部提供了不用插件的推送写法, 如果你需要, 可以复制到上面使用, 使用时可能需要用到以下知识点: * 生成 ssh 密钥 在本地生成一对`key`(windows下需要先安装相关软件,请自行安装(安装git就会有)) ``` ssh-keygen -t rsa -f key.txt ``` 得到了`key.txt`和 `key.key.pub`两个文件 * 设置密钥 到文档项目的设置里面设置`ssh`密钥, 添加一个`ssh`密钥, 拷贝 `key.txt.pub` 中的内容,注意是`pub`文件,即公钥,选中**允许写入权限**, 名字随便取 ![](../../assets/images/github_deploy_key.jpg) 然后点击`Secrets`,设置秘密键值对, 需要设置的变量有: * `ACCESS_KEY`: 复制`key.txt`中的内容 * `GIT_EMAIL`: 设置一个`git`提交邮箱,设置你的`github`邮箱即可 * `GIT_NAME`: 设置一个`git`提交名字,设置你的`github`名字即可 * `REPO`: 仓库地址, 设置为`组织名/仓库名`或者`用户名/仓库名`,比如`teedoc/teedoc.github.io`即可 ![](../../assets/images/github_secrets.jpg) 当然, 这些变量也可以通过优化脚本直接从提交记录中获得(除了`ACCESS_KEY`), 有兴趣可以优化, 也欢迎提交 PR