2021-04-22hugo生成博客托管在github使用cloudflare page发布

Hugo


   作为一个非专业的小白,非常希望自己能有机会机会搭建一个自己的博客,wordpress虽然有现成的可以租用,免维护,但是,还是希望把所有的控制权都把握在自己手里,最终,通过hugo生成博客,生成了html静态网页,存放在github上,可以使用gitpage发布,如果想添加自己的域名可以使用cloudflare page 发布。

Hugo 安装 / 更新

   hugo是使用Go语言开发的静态站点生成器。不过无需准备 Go 语言环境,可以直接通过二进制编译包进行跨平台部署。

以下均以 debian 10 为例

   前往github下载最新版本,这里我们下载hugo_extended_0.82.1_Linux-64bit.deb 由于我们使用academic的主题,需要hugo的扩展版本。

安装hugo

dpkg -i hugo_extended_0.82.1_Linux-64bit.deb

同时,需要安装go环境

常用命令

hugo:编译项目生成静态网站,默认位置在项目的 public 目录下 hugo server: 启动你的网站服务,可以通过浏览器访问 http://127.0.0.1:1313/ 访问站点 hugo new {folder}/{name}.md: 创建新文章,使用 markdown 进行排版,一般默认放在 post 文件夹下 一般情况下用这三个命令就够了

Academic 安装 / 更新

Academic 是一个 Hugo 主题,从名字就可以知道这个主题比较学院派,适合科研 / 学术人员发布个人信息 / 介绍科研项目,当然,拿来做个人博客也是没问题的

安装

通过 git 安装的话,首先建议你在 GitHub 上 fork 成你自己的项目,默认的话,通过 git clone https://github.com/your_repo/academic-kickstart.git My_Website 将代码克隆到本地文件夹 My_Website

进入文件夹,初始化项目:

git submodule update --init --recursive

完成安装

自动更新

说是自动,还是需要手动执行一条命令:

git submodule update --remote --merge

这么做的前提条件是你是 install 的,也就是 git submodule update –init –recursive 过的,而不是直接把 academic 给 clone 到 themes 文件夹

部署到 Github Pages

原理 网上介绍的办法很多,但核心其实就一句:

将 hugo 命令生成的 public 文件夹上传到 GitHub pages 项目下。

public 文件夹相当于编译完成的静态网站,你在本地打开其实就能看。换句话说,你每次手动将这个目录下的内容上传到你的 GitHub page 项目也是可以的。

然后为了达到这个目的,Academic 给出的做法是利用 git submodule 将你的 GitHub page 项目作为 My_Website 项目的子模块存放到 public 目录。那么当你更新你的文章之后,只提交 public 文件夹内的变更到 GitHub page 项目即可。 images

官方教程 (缩减版) 原教程 看这里;

在 GitHub 上创建两个项目,一个是 fork 的 academic-kickstart,也就是你前面 clone 到本地的 My_Website,另一个即是以你用户名 / 组织名开头、以 .github.io 结尾的 GitHub page 项目。

在 My_Website 目录下执行 git submodule update –init –recursive 将子模块更新到最新状态;

将 config.toml 中的 baseurl 设置为你的 GitHub page 地址;

(实质) 删除 public 文件夹 (如果有的话),将 GitHub page 项目添加为子模块:git submodule add -f -b master https://github.com//.github.io.git public;

这时候你的 My_Website 项目实际上有两个子模块:作为主题依赖的 themes/academic 和作为网站的 .github.io;

有意思的是一般是子模块 themes/academic 更新了之后,你更新主项目 My_Website 的依赖;

而你更新主项目 My_Website 的文章之后,再会手动的更新子模块 .github.io,刚好反过来。

新增 / 编辑文章后,更新 academic-kickstart 项目:

git add .
git commit -m "Initial commit"
git push -u origin master

更新 GitHub page 项目:

cd public
git add .
git commit -m "Build website"
git push origin master

当然,如果你换一台机器,你更新项目时候,别忘了子项目的更新

cd public
git clone --recurse-submodules https://github.com/your_repo/your_repo.github.io.git .
git submodule update --remote
git add .
git commit -m "git submodule updated"

这样,子模块里边的和仓库是同步的

如果在其他机器想编辑博客

git pull
git merge