Write by lyc at 2021-4-22

一、Hexo 迁移到 docker image

参考博文 Docker 部署Hexo

1.原 Hexo目录结构优化

1
2
3
4
5
$ tree .
/data/root/www.lyc7456.com
├── data # 存放hexo根目录下所有内容
├── source # 存放hexo的source文件夹下的内容
└── themes # 存放hexo主题

为什么要把 source目录和 themes目录分离出来?

目的是为了 docker挂载数据卷。

因为docker container本身是无状态的,而我们的博客文章、主题是持久化的数据,需要映射到宿主机上。

未来我们更新文章、主题样式只需要更新宿主机的挂载目录,再重启容器即可完成文章的加载更新。

2.Hexo 制作成 docker image

2.1 服务器上登陆你的 docker hub账号

1
2
3
4
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username:
Password:

2.2 Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
$ vim /data/wwwroot/www.lyc7456.com/data/Dockerfile
FROM node:14.15.4

WORKDIR /data
COPY package*.json ./
RUN npm config set registry http://registry.npm.taobao.org/ \
&& npm install hexo-cli -g \
&& npm install
COPY . .

EXPOSE 4000
ENTRYPOINT ["hexo","clean"]
ENTRYPOINT ["hexo","server"]

FROM node:14.15.4 根据你所使用的node版本来调整。

2.3 docker bulid

1
2
3
4
$ cd /data/wwwroot/www.lyc7456.com/data/
$ docker image bulid -t lyc7456/Hexo:1.0.1 -t lyc7456/Hexo:latest .
$ docker push lyc7456/Hexo:1.0.1
$ docker push lyc7456/Hexo:latest

lyc7456/Hexo:1.0.1 用户名/仓库:TAG 根据自己的docker hub账号来调整。

2.4 本地测试 docker 容器

可以参考以下 docker-compose,或者直接使用 docker rum,拉起一个容器,再访问其 4000 端口进行测试。

1
2
3
4
5
6
7
8
9
10
11
12
13
$ cat /data/wwwroot/www.lyc7456.com/docker-compose.yml
version: '3'
services:
www.lyc7456.com:
container_name: www.lyc7456.com
image: lyc7456/hexo:latest
restart: always
privileged: true
ports:
- '4000:4000'
volumes:
- /data/wwwroot/www.lyc7456.com/source:/data/source
- /data/wwwroot/www.lyc7456.com/themes:/data/themes

至此 Hexo docker 镜像封装完毕。

二、群晖Nas部署docker

1.群晖Nas获取root权限

首先获取群晖Nas root权限,控制面板配置 ssh启用。

1
2
3
4
5
6
7
8
$ sudo -i
$ cd /etc/ssh
$ chmod 755 sshd_config
$ vim /etc/ssh/sshd_config
PermitRootLogin yes

$ synoservicectl --restart sshd
$ synouser --setpw root $NEW_ROOT_PASSWORD

2.安装 docker 套件

3.root登陆bash 获取镜像

直接从 bash 获取docker镜像,不要尝试在群晖控制台获取,控制台无法获取。

1
$ docker pull lyc7456/Hexo:latest

4.启动docker容器

又镜像启动容器

高级设置“卷”,这里就需要参考 docker-compose.yml ,把 source目录和 themes目录挂载到容器内部。当然,前提是这两个目录已经在群晖 File Staton 上创建好,并且传入你个人的博文和主题。

暴露端口 4000:4000

最后启动容器。

内网环境下,可以先直接用浏览器测试 http://nas:4000/

三、端口映射

在路由器上将nas:4000端口映射到外网即可通过 http://DDNS域名:4000 公网访问到 nas上docker Hexo站点了。

由于我们家用的宽带默认已被运营商封锁80,443端口,所以想要访问必须是指定其他的外网端口号。

那么我们可以通过公网另外一台Nginx服务器的七层反向代理将域名转发到自己的 DDNS域名:4000 即可实现域名80与443。

推荐直接用 CDN带端口回源,既获得了加速,又可以隐藏了真实服务器地址。

四、关于博文发布

我是通过Python检索本地要发布的文档 -> DS Drive 双向同步到 nas挂载的 source目录 -> Python ssh命令重启 nas docker container

可以充分发挥想象力,只要把 .md 文档提交到 nas挂载的 source目录,再重启 docker容器即可。

后期通过绘制一张图来描述。