前言

心血来潮,想要一个地方记录下记录个人博客的搭建过程

1、GitHub Pages

简单来说GitHub Pages 是 Github 免费给开发者提供的一款托管个人网站的产品,现在只能托管静态内容,但是博客就是静态的啊,所以非常适合用来搭博客。

2、Hexo

Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。

3、Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

正文

创建博客地址

创建一个Github Pages Repository

Github Pages Repository 跟普通的Repository一样,唯一的区别是名字必须叫做$username.github.io,创建好以后就可以访问这个域名,如果想要通过自己的域名访问也可以,这里就不详细介绍了。

构建含有Hexo博客的Docker镜像

1、基础镜像选择alpine

alpine是一个小巧、安全、简单得linux系统
Dockerfile

1
FROM alpine:latest

2、安装git和Hexo部署所需的环境

  • Hexo是基于nodejs开发的,所以需要安装nodejs,alpine的nodejs源里不包含npm,所以还要单独再安装npm

  • 提交github采用git+ssh,所以还要安装openssh
    Dockerfile

1
RUN apk --update --no-progress add git nodejs npm openssh

3、安装Hexo博客

安装好环境后就可以搭建hexo博客了,安装hexo很简单,只需要一个命令
nodejs环境

1
npm install -g hexo-cli

在Docker容器内命令
Dockerfile

1
RUN npm install -g hexo-cli

安装好hexo还需要创建静态网站,命令 hexo init .是在当前目录生成博客,也可以指定文件夹hexo init <folder>
/home下创hexo文件夹
Dockerfile

1
2
WORKDIR /home/hexo
RUN hexo init .

生成好静态网站目录后可以看到

1
2
3
4
5
6
7
├── _config.yml
├── package.json
├── scaffolds
├── source
| ├── _drafts
| └── _posts
└── themes

目录具体作用可以查阅Hexo文档,这里不做说明
安装提交github插件

1
npm install --save hexo-deployer-git

挂载外部数据卷
/home/hexo/source这里是存储文章文件夹
/home/hexo/themes这里是主题文件夹
/home/hexo/.ssh这里是存储ssh密钥文件夹
发布到github的时候 ssh 验证会在用户根目录下的.ssh文件及里查找密钥。因为我在镜像里创建了名为hexo用户,根目录就是/home/hexo
Dockerfile

1
VOLUME ["/home/hexo/source","/home/hexo/themes","/home/hexo/.ssh"]

因为hexo安装和生成博客都是在root用户权限下操作的,所以需要把\home\hexo文件夹所有人改成hexo用户
Dockerfile

1
RUN chown -R hexo .

shell脚本 在docker镜像被运行的时候执行
shell

1
2
3
4
5
6
7
8
9
10
11
#!/bin/sh

if [ "$1" = 's' ] || [ "$1" = 'server' ]; then
set -- /usr/bin/hexo s -p 4000
fi

if [ "$1" = 'd' ] || [ "$1" = 'deploy' ]; then
set -- /usr/bin/hexo cl && /usr/bin/hexo d -g
fi

exec "$@"

hexo命令说明
hexo s -p 4000hexo server 4000 启动服务并绑定$port
hexo cl && hexo d -ghexo clean && hexo deploy -g 清除静态文件并重新生成发布

github发布 地址和权限信息在 _config.yml 配置

1
2
3
4
5
6
deploy:
type: git
repo: [email protected]:$username/$username.github.io.git
branch: master
name: $username
email: $email

再切换成hexo用户
Dockerfile

1
2
3
4
5
6
7
USER hexo

COPY entrypoint.sh /entrypoint.sh

ENTRYPOINT [ "/entrypoint.sh" ]

CMD ["/bin/sh"]

结语

hexo容器构建好了,下一步就需要运行起来,下一篇文章讲讲docker容器