Hexo+Docker+NGINX搭建个人博客
方案说明
- 在Docker容器中搭建Hexo是为了环境隔离,也方便以后迁移。
- 在宿主服务器配置NGINX是因为想搭建多个站点,以后还可能会部署一些API服务,想共用NGINX。
- 使用GitHub仓库存放博客工程,方便对主题、配置的修改做记录和管理;配合GitHub Actions可以实现自动化发布和站点更新,而且支持在未配置Hexo环境的设备上更新博客,只需要能够将文件提交到GitHub仓库中。
实施步骤
安装 Docker
在Ubuntu下,使用官方脚本安装。
1 | # 获取Docker安装脚本,安装Docker |
构建 Docker Image
把宿主服务器/usr/blog
文件夹作为博客的工作目录,创建dockerfile
文件夹存放用于构建Docker Image的Dockerfile
。
1 | # 创建dockerfile文件夹 |
Dockerfile
用来配置构建镜像的基础环境、构建步骤和构建指令。目标是通过Docker镜像自动搭建好Hexo的运行环境,安装需要的组件,应用Icarus主题
,需要自动化处理的事项有:
- 安装
hexo-cli
- 初始化Hexo博客工程。
- 安装必要的 Hexo 插件。
- 应用
Icarus
主题
1 | # 使用最新的node镜像作为基础环境 |
Dockerfile说明:
- Docker容器的主工作目录为
/usr/blog
,Hexo工程和插件存放在临时工作目录为/usr/temp
,是因为后续创建容器会把宿主服务器的博客站点目录映射到容器内的/usr/blog
,需要在映射后,再将/usr/temp
的文件移动到/usr/blog
中。有些繁琐,没有想到怎么处理更方便。 - 主题使用下载源码手动配置的方式,方便后续按需要对主题进行修改。在将博客工程提交到GitHub时,准备忽略
node_modules
文件夹,主题源码放到themes
文件夹中的方式也可以更方便地记录主题代码的修改历史。
使用编辑好的Dockerfile创建Docker镜像。
1 | docker build -t hexo-icarus /usr/blog/dockerfile/ |
运行 Docker 容器
使用创建好的镜像运行Docker容器,做以下配置:
- 容器的4000端口映射到宿主服务器的4000端口。
- 宿主服务器
/usr/blog/oxygen-coder
目录映射到容器/usr/blog
目录。 - 容器命名为
oxygen-coder
。
1 | docker run -itd -p 4000:4000 -v /usr/blog/oxygen-coder/:/usr/blog --name oxygen-coder hexo-icarus |
配置 Hexo
进入Docker容器,默认会进入到容器的/usr/blog
目录。
1 | docker exec -it oxygen-coder /bin/bash |
将临时工作目录/usr/temp
中的文件移动到当前工作目录,删除临时目录。
1 | mv /usr/temp/* /usr/blog/ |
修改_config.yml
文件,进行基本的Hexo配置。
1 | # 只列出做出修改的配置项 |
启动Hexo的内置Web服务器。
1 | hexo server |
Hexo Server默认使用的端口号是4000,前面已经将宿主服务器的4000端口和Docker容器的4000端口做了映射,通过虚拟服务器的控制台,开通服务器4000端口的访问权限,就可以在浏览器中通过http://serverIP:4000
访问预览Hexo博客了。
通过Hexo生成站点静态文件。
1 | hexo clean |
站点静态文件会生成在Docker容器中的/usr/blog/public
文件夹中,按照配置的映射关系,对应的宿主服务器路径为/usr/blog/oxygen-coder/public
。
安装 NGINX
在宿主服务器上,通过APT安装NGINX。
1 | sudo apt update |
配置 NGINX 站点
NGINX相关的文件在/etc/nginx/
目录下,在sites-available
文件夹中创建和编辑站点配置文件。
1 | vim /etc/nginx/sites-available/oxygencoder.com.conf |
编辑配置文件,达到以下目标:
- 站点根目录指向Hexo生成的静态文件目录
/usr/blog/oxygen-coder/public
。 - 设置
www.oxygencoder.com
为默认域名,访问oxygencoder.com
也会自动跳转到www.oxygencoder.com
- 站点默认使用
https
,且通过http
访问域名也会自动跳转到https
。 - 使用自定义的404页面。
- 支持http2。
完整的配置文件如下。
1 | server { |
将配置文件链接到sites-enabled
文件夹内,使之生效。
1 | ln -s /etc/nginx/sites-available/oxygencoder.com.conf /etc/nginx/sites-enabled/oxygencoder.com.conf |
重启NGINX,加载新的配置。
1 | sudo service nginx stop |
在虚拟服务器控制台配置好域名解析,就可以通过域名www.oxygencoder.com访问搭建的博客了。
完成Hexo博客站点的搭建才是刚刚开始,后面还要实现Hexo博客的自动发布和更新,配置和自定义修改主题,优化站点配置,最最重要的是坚持学习、坚持记录和输出,让自己和博客一起成长,加油吧少年💪。