使用docker搭建Hexo

闲话

我不想在宿主机上安装Nodejs,于是就有了这篇文章。本文的目的就在于让写作的人只专注于写作这件事本身,而无需关注写作平台的构建。以后我也会逐渐将各种中间件使用docker的方式构建,让runtime开箱即用,让Coding也成为纯粹的Coding,在Coding时无需花时间在运行环境的配置。

使用dockerfile构建镜像

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
FROM node:15.7.0-alpine3.10
MAINTAINER wanf3ng <wanf3ng@gmail.com>

WORKDIR /usr/blog

# 切换中科大源
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
# 安装bash git openssh 以及c的编译工具
RUN apk add bash git openssh

# 设置容器时区为上海,不然发布文章的时间是国际时间,也就是比我们晚8个小时
RUN apk add tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone \
&& apk del tzdata

# 安装hexo
RUN \
npm config set registry https://registry.npm.taobao.org \
&&npm install \
&&npm install hexo-cli -g \
&& npm install hexo-server --save \
&& npm install hexo-asset-image --save \
&& npm install hexo-wordcount --save \
&& npm install hexo-generator-sitemap --save \
&& npm install hexo-generator-baidu-sitemap --save \
&& npm install hexo-deployer-git --save

EXPOSE 4000

构建完image后也可以push到dockerhub方便以后使用,以后只需pull即可,如:

1
docker pull wanf3ng/blog

启动容器

将容器内的/usr/blog映射到本地D:\myblog\

1
2
# 设置本地的外挂文件夹
docker run -d -ti -p 4000:4000 -v d:\myblog\:/usr/blog/ blog /bin/bash

进入容器内验证是否安装完成

1
2
3
4
5
6
7
8
# 进入容器
docker exec -it [container ID] /bin/bash
# 初始化博客
hexo init
# 生成静态文件
hexo g
# 启动hexo预览服务器
hexo s

设置主题

1
npm install --save hexo-theme-fluid

然后在博客目录下创建 _config.fluid.yml,将主题的 _config.yml (opens new window)内容复制过去。

配置git一键发布

ssh-keygen命令生成ssh key,将~/.ssh/id_rsa.pub里的内容复制到Github

1
2
3
4
# 生成ssh key
ssh-keygen -t rsa -C "youremail@example.com" # 全程回车
git config --global user.name "你用github用户名"
git config --global user.email "你的github邮箱地址"

配置_config.yml文件

1
2
3
4
5
deploy:
type: git
repo: git@github.com:wanf3ng/wanf3ng.github.io.git
branch: master # 设置提交到的分支
message: Site updated at {{ now("YYYY-MM-DD HH:mm:ss") }} # 设置我们提交的信息

最后使用hexo g -d就可以一键部署了,如果要在宿主机上一键部署,只需输入以下命令即可,也可以写成脚本文件执行

1
docker exec -it [container ID] /bin/bash -c 'cd /usr/blog && hexo g -d'

注:如果安装了hexo-all-minifier用来压缩生成文件,需要额外安装c程序的编译工具

1
apk add libtool automake autoconf nasm gcc g++ make

在使用npm安装完后需要把node_module删掉,用yarn重新编译一下。因为在容器里npm不编译hexo-all-minifier的一些C++依赖包,rebuild也没用。而yarn会编译,所以是个挺奇怪的bug。


使用docker搭建Hexo
https://wanf3ng.github.io/2021/01/29/使用docker搭建Hexo/
作者
wanf3ng
发布于
2021年1月29日
许可协议