安装

首先需要安装Hugo。Hugo的安装很简单,官方安装教程:Install Hugo。 Mac下安装可以直接选择Homebrew。

1
brew install hugo

Hugo程序安装以后,需要初始化博客目录。比如要创建一个目录名为Blog的博客目录

1
hugo new site Blog

执行后会提示:

Congratulations! Your new Hugo site is created in /Users/urzz/Blog1. Just a few more steps and you’re ready to go:

  1. Download a theme into the same-named folder. Choose a theme from https://themes.gohugo.io/ or create your own with the “hugo new theme ” command.
  2. Perhaps you want to add some content. You can add single files with “hugo new /.”.
  3. Start the built-in live server via “hugo server”. Visit https://gohugo.io/ for quickstart guide and full documentation.

同时,会在命令执行目录下新建Blog文件夹,这个文件夹里面会生成一些配置文件夹。还有一个config.toml文件,这个文件是博客的主配置文件。 archetypes: default.md是后续新增博文的模板 content: markdown文章目录 static: 存放静态文件,后续需要用到的静态文件比如图片,github page的自定义域名需要的CNAME文件,都可以放在这里面,这里的文件会原封不动复制到public的目录下 themes: 文件夹则是存放博客主题的。

配置

安装主题

Hugo的主题有很多,可以去这里自己选择。我用的是even主题: olOwOlo/hugo-theme-even

首先下载主题到当前博客目录下的themes目录,然后复制博客目录下的配置文件到博客根目录。

1
2
git clone https://github.com/olOwOlo/hugo-theme-even themes/even
cp -f themes/even/exampleSite/config.toml ./config.toml

这样,博客主题安装已经成功了,运行hugo -t even就可以生成博客静态文件到public文件夹

博客配置

1
2
3
4
5
6
7
8
baseURL = "https://urzz.xyz/" # 这个设置会影响博客中的部分跳转链接,比如sitemap.xml
languageCode = "zh-cn"
defaultContentLanguage = "zh-cn" 
title = "破壳"
  
[params]
  since = "2015" # 最下面脚注的时间展示
  logoTitle = "FookSky" # 网站左上角的大标题

除了这些基本配置以外,config.toml中还有很多其他配置,可以参考各行配置后面的注释有选择得修改。

评论系统

我这里没有考虑迁移hexo之前使用的评论系统的数据,因此直接忽略了迁移.

hugo支持的评论系统有不少,这里选用了utterances。因为它和gitment一样,基于github的issues来实现评论功能,使用比较方便,而且需要的权限更少,更安全。

首先需要新建一个repo,比如我这里新建的是urzz/hugo-comments。

even主题也集成了utterances的配置,只需要修改部分配置:

1
2
3
4
# 配置评论系统
[params.utterances]       # https://utteranc.es/
    owner = "urzz"              # Your GitHub ID
    repo = "hugo-comments"

这样,评论系统也就ok了。

hexo数据迁移

首先迁移博客文档数据,even主题的博文markdown在content/post目录下,所以需要在content下新建文件夹post,然后复制hexo中source/_posts下的markdown文件到这个文件夹中。

做到这里,其实博客基本迁移就完成了。不过我hexo中博客都会指定固定链接,而hugo默认是/year/month/day/filename这样的格式,为了使原文章中设置的固定链接生效,需要做以下几个改动。

首先在config.toml中新增固定连接格式设置

1
2
[permalinks]
  post = "/:year/:month/:day/:slug/"

hexo中的固定链接设置是在文章md文件的最顶端设置permalink,指定固定连接,而hugo中可以设置url属性指定文章路由。比如url: /test,那访问路径就是https://urzz.xyz/test,那就需要每篇文章都改,工作量比较大了。

回头看上面配置文件的改动其实也可以发现,hugo可以使用slug属性来配置固链。这样就只需要将各文章中原先permalink改为slug就可以了。

1
2
3
4
# 这个脚本仅适用于mac,mac的sed命令会与linux有所区别
cd content/post
# 功能:查找当前目录下.md结尾的文件,替换文件中permalink为slug
find . -name "*.md" -exec sed -i '' 's/permalink/slug/g' '{}' +;

部署

因为是从hexo迁移,所以相关repo已经创建好了。这里略过了github pages的配置

hugo博客的部署其实跟hexo没太大区别,只不过它没有支持git deploy。 为了同时支持部署到vps和github,这里新增了一个部署脚本。脚本参考: Host on GitHub

 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
!/bin/bash

echo -e "\033[0;32mDeploying updates...\033[0m"

# Build the project.
hugo -t even # if using a theme, replace with `hugo -t <YOURTHEME>`

echo -e "Uploading To VPS..."
rsync -avz --delete public/ username@host:$remote_dir

# Go To Public folder
cd public

# Add changes to git.
git add .

# Commit changes.
msg="rebuilding site `date`"
if [ $# -eq 1 ]
  then msg="$1"
fi
git commit -m "$msg"

# Push source and build repos.
git push upstream master

# Come Back up to the Project Root
cd ..

该脚本用rsync来同步生成的静态博客到vps上,另外,首次同步到github时,需要git push -f来强制更新github pages所在repo。