目录

Hugo系列(2) - 远程部署到Pages服务

远程部署到Pages服务

Hugo和Hexo一样是静态站点生成工具,不需要服务器即可进行部署运行,为了可以在网络上也访问到我们的博客,需要将静态博客部署到某些网站的pages服务上,借用人家的服务器进行托管。

常用的Pages服务有GitHub pages、Coding pages等,由于暂时没有找到好用的Hugo的远程部署插件,所以这里使用Git命令来进行远程部署。

注意,所谓的远程部署,其实就是把hugo命令生成的public目录里的所有文件push到远程库,然后启用Pages服务进行静态网站的部署。这样,当有人访问静态站点的主页时,Pages服务就会去读取根目录下的index.html

本文以部署到GitHub Pages为例。

安装Git

首先要安装Git,Git是一个版本控制工具,可以用来帮忙管理我们的博客,直接前往官网下载安装包即可。

下载链接

在安装的时候会问你是否安装git的cmd工具,把这个也一起安装了后就可以不需要配置环境变量了。这样就可以直接在cmd窗口里运行Git命令,如git version

当然也可以直接使用安装时自带的Git Bash,个人更喜欢用Git Bash。

在GitHub上创建一个仓库

首先在GitHub上创建一个仓库,仓库的名字格式为<username>.github.io。比如我的GitHub用户名是lewky,那么这个仓库就命名为lewky.github.io

之所以这样规定命名,是因为GitHub默认会把<username>.github.io的master分支的内容部署到GitHub Pages站点上。

SSH key的创建与配置

因为要使用SSH的方式来和GitHub仓库进行交互,我们需要生成一对密钥对,然后将公钥配置到GitHub账号上。关于SSH key的创建与配置到GitHub,可以看我的另一篇文章的一个小章节:#四、SSH key的创建与配置 的4.1 ~ 4.3的部分。

在本地关联GitHub的站点仓库

在本地创建一个新的文件夹,比如名为hugo-deploy。首先是初始化该文件夹为Git项目,命令如下:

1
git init

然后把本地的Hugo博客通过hugo命令生成的public目录下的所有文件都复制到这个新建的文件夹hugo-deploy里,然后用Git命令把这些复制过来的文件添加到本地仓库:

1
git add .

接着是提交修改,命令如下:

1
git commit -m "第一次提交"

-m参数代表提交信息,用于说明本次提交的目的,比如你发布了什么文章、修改了什么样式之类的信息说明。该参数不可以省略,不然会报错,另外要注意这里的双引号是英文的双引号

接着把刚刚在GitHub上创建的仓库的SSH地址复制下来:点击GitHub仓库的Code绿色按钮,点击SSH就可以看到该仓库的SSH地址,然后点击地址后面的复制按钮即可。

用Git命令把这个SSH地址添加到我们的本地仓库,这样这个GitHub仓库就将作为我们的远程仓库,然后就可以通过Git命令把站点文件部署到GitHub上:

1
git remote add origin git@github.com:lewky/lewky.github.io.git

这里的origin是远程库的别名,后面是要关联的远程库SSH地址。

然后就是最后一步了,把我们刚刚提交到本地库的文件给推送到远程库。由于远程库刚刚创建,还不存在本地的分支(默认是master分支),所以第一次提交的命令要加是一个-u参数:

1
git push -u origin master

这样GitHub远程库上会创建出对应的master分支,以后推送文件的时候,就不需要再加上该参数了:

1
git push origin master

启用GitHub Pages服务

通过master分支来启用GitHub Pages

现在我们的GitHub仓库里已经有站点的文件了,接下来点击Settings进入该仓库的设置页面,找到Github Pages这一项,选择以master分支作为Source,然后保存;接下来这个仓库就会被部署到https://{username}.github.io/{仓库名}

你会发现这里的url里多了子路径,但是如果仓库名是{username}.github.io的格式,那该url就会被简化为https://{username}.github.io/,这样就不需要在url后边添加上仓库名来访问个人站点了。

通过gh-pages分支来启用GitHub Pages

还有一种启用的方式是给仓库创建一个名为gh-pages的分支,然后把该分支设置为Source,同样可以让该仓库使用到GitHub Pages服务。

这种启用方式是只有当存在多个项目都要使用GitHub Pages才使用的,因为目前GitHub只允许一个仓库可以通过master分支来启用GitHub Pages。如果其他仓库也要使用GitHub Pages,就需要创建gh-pages分支来部署。

怎么同时部署到两个不同的Pages服务

进入本地仓库的目录,打开隐藏文件夹.git下的config文件,多添加一行url = xxx,如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
[core]
	repositoryformatversion = 0
	filemode = false
	bare = false
	logallrefupdates = true
	symlinks = false
	ignorecase = true
[remote "origin"]
	url = git@github.com:lewky/lewky.github.io.git
	url = git@e.coding.net:lewky/hugo-deploy/hugo-deploy.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[pull]
	rebase = true
[branch "master"]
	remote = origin
	merge = refs/heads/master

此后只需要git push origin master就可以同时推送到多个远程库。

参考链接