使用 docker-compose 搭建 Hexo
距离上次写博客差不多两年了。大三了,不仅要准备实习和秋招的事,也该考虑将来的事了。现在打算不定期更新博客,起码将来有个能拿得出手的技术博客。
这次借着重新搭建博客的环境,改用 docker-compose 实现。
docker-compose 实现了多个容器的编排,大大简化大型项目的部署工程。
编写 Dockerfile
1 | FROM node |
新版 docker 取消了 MAINTAINER
命令,使用 LABEL maintainer
作为替代。宿主机内的 docker-entrypoint.sh
可能没有执行权限,因此复制到容器后手动赋予执行权限。使用 ENTRYPOINT
执行容器启动前的准备工作。
编写 docker-entrypoint.sh
1 |
|
执行自动化处理,把 Hexo 环境和博客数据分离,镜像(环境)随时升级而数据不会丢失。但是博客的 Hexo 组件仍需手动更新。
第一个 if
中,如果没有检测到站点配置文件 _config.yml
则初始化目录,前提是 WORKDIR
为空。
第二个 if
中,如果没有检测到主题配置文件 themes/next/_config.yml
则下载指定版本的 NexT 主题,版本从 Dockerfile
的 ENV
获取。
最后启动 Hexo 服务。
编写 docker-compose.yaml
1 | version: '3' |
强大的 docker-compose 来了,虽然这次的博客只用到了一个组件,体现不了其强大之处。
使用 image
指定创建的镜像的名称和标签。使用 volumes
绑定宿主机中的指定目录(当前 docker-compose.yaml
目录下的 Hexo
文件夹)到容器的挂载目录(/blog
)。
BUG?
在 Docker 18.03.1-ce-mac65 (24312) 中,这样部署的 Hexo 无法实时追踪文件和即时解析。每次更改配置文件或修改博文后,无法即时预览,需要重启容器。
原本想添加 RSS(简易信息聚合) 和 Algolia(站内搜索) 支持,但是执行 npm install --save hexo-generator-feed
和 npm install --save hexo-algolia
后,却提示安装了 1 个包和删除了 100+ 个包,导致 Hexo 基础组件被删,还得重新 npm install
重新下载,不是很明白 npm 的逻辑。