搭建个人博客主要有三种方式:
- 使用Medium、简书之类的平台,适合专注于写文的人;
- 基于Ghost、WordPress等搭建动态独立博客,功能
臃肿丰富强大,适合喜欢折腾比较专业的人; - 通过
Hugo/Hexo生成静态网页,免费托管到Github Pages/Coding Pages,适合我这种小白;
入门
Hugo基于Go语言而Hexo基于Node.js,相比之下Hugo安装部署更为简单,基本不依赖环境,而且生成速度较快。google了一下关键词“Hugo Hexo”后首页好几篇都是讲Hexo迁移到Hugo的,最终坚定信念选择Hugo。
在Win10下载解压Hugo后只有一个hugo.exe可执行文件,将该文件路径添加到环境变量,就可以用cmd操作了。接着按照官方入门文档,即可轻松生成一个带主题的静态示例网页并可在本地运行和访问。
命令行操作
Hugo的命令行操作很简单,常用的有以下三条:
# 以archetypes文件夹下的defaul.md为模板,生成filename.md存放在content\post目录下
hugo new post/filename.md
# 编译并生成public文件夹存放静态网页结果
hugo
# -大写D,将头部信息设置为'draft: true'的草稿文件也参与编译并运行
hugo server -D托管
托管的最佳实践是将静态博客同步托管在Github Pages和Coding Pages上,买一个域名,用 DNSPod 做国内外分流,国内访问走 Coding Pages,国外走GitHub Pages,可解决Github在国内不稳定、访问慢、被百度蜘蛛屏蔽等问题。目前只是托管在Github Pages,其他以后再折腾。
Github Pages分两种:
- User/Organization Pages (
https://<USERNAME|ORGANIZATION>.github.io/),一个账户只能有一个,只需要建一个名字为<USERNAME>.github.io的repo,将public文件夹内容push到origin/master,每次push后Github Pages都会将origin/master下的静态网页自动部署 - Project Pages (
https://<USERNAME|ORGANIZATION>.github.io/<PROJECT>/),一个Project(repo)都可以对应建立一个,但是步骤相对复杂,下面展开说明
Project Pages的托管
不同于User/Organization Pages单独作为一个repo来管理,Project Pages必须作为某个Project(repo)的分支,而且名字必须是gh-pages,博客的源文件和生成的静态网页要分别放在master和gh-pages下,一般的分支是办不到的,所以具体步骤如下:
- 新建一个存放博客源文件的repo
- 将
public加入.gitignore - 建立名字为
gh-pages的孤儿分支git checkout --orphan gh-pages,并push到远程 - 利用Git2.6以上提供的
worktree工具,在public路径创建gh-pages分支的工作目录,此时看起来就像master和gh-pages作为两个独立的repo同时存在,在public工作目录下即可将生成的静态网页commit&push到origin/gh-pages,每次push后Github Pages都会将origin/gh-pages下的静态网页自动部署
# Step4
echo "Deleting old publication"
rm -rf public
mkdir public
git worktree prune
rm -rf .git/worktrees/public/
echo "Checking out gh-pages branch into public"
git worktree add -B gh-pages public origin/gh-pages
echo "Removing existing files"
rm -rf public/*
echo "Generating site"
hugo
echo "Updating gh-pages branch"
cd public && git add --all && git commit -m "Publishing to gh-pages (publish.sh)"
git push origin gh-pages
read -p "Done,Press any key to continue." var工作流程
在本地运行服务器hugo server -D,编写Markdown文档并保存时,网页会自动重新加载,即可实时看到最终发布的样式,到一定阶段后push备份,运行Project Pages的托管Step4的脚本完成自动部署。
总结
使用Hugo生成静态网页确实简单方便速度快,按照官方文档即可。难点在于部署和托管,在摸索过程中还认识了Git worktree、Git submodule、Git subtree等指令,感觉在涉及到多个repo同步的大项目中很有应用的必要,在此挖坑要单独学习并整理出博文。