Hexo Docker Image

_N.x Blog

Docker 初始化 Hexo 镜像

1. 构建 Docker 镜像

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
29
30
31
32
33
34
35
36
37
38
#!/bin/sh

# 1. 处理 SSH 密钥权限 (关键步骤)
# 我们将挂载进来的 key 复制一份,确保拥有 600 权限,否则 SSH 会拒绝使用
if [ -f "/root/.ssh_mount/id_rsa" ]; then
mkdir -p /root/.ssh
cp /root/.ssh_mount/id_rsa /root/.ssh/id_rsa
chmod 600 /root/.ssh/id_rsa
# 跳过指纹验证,防止卡在 "Are you sure..."
echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> /root/.ssh/config
else
echo "Error: id_rsa not found. Please mount it to /root/.ssh_mount/id_rsa"
exit 1
fi

# 2. 配置 Git 用户信息
git config --global user.name "zengy"
git config --global user.email i@zengy.win

# 3. 初始化或更新仓库
# 如果当前目录下没有 .git 文件夹,说明是第一次运行或空目录
if [ ! -d ".git" ]; then
echo "Initializing git repository..."
git init
git remote add origin git@github.com:zengycn/vercel.git
# 第一次拉取
echo "Pulling from master..."
git pull origin master
else
# 如果已经存在仓库,直接拉取更新
echo "Repository exists. Pulling latest changes..."
# 重新设置 remote 防止 url 变化
git remote set-url origin git@github.com:zengycn/vercel.git
git pull origin master
fi

# 4. 执行后续命令 (如果有)
# exec "$@"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FROM alpine:latest

# 替换源并安装 git 和 openssh
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
apk add --no-cache git openssh

# 设置工作目录
WORKDIR /usr/src/hexo

# 复制启动脚本
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

# 设置容器启动时执行脚本
ENTRYPOINT ["/entrypoint.sh"]

2. 运行容器

首先需创建两个挂载点 👀

  • 代码目录:挂载宿主机的目录到 /usr/src/hexo

  • SSH 密钥:挂载宿主机的私钥到容器内指定位置

1
2
3
4
docker run --rm \
-v /path/to/your/local/hexo:/usr/src/hexo \
-v ~/.ssh/id_rsa:/root/.ssh_mount/id_rsa \
registry.cn-hangzhou.aliyuncs.com/z-z/hexo-init:github

注意将 /path/to/your/local/hexo 替换为你宿主机上想要保存代码的实际路径

Docker 运行 Hexo 镜像

1. 构建 Docker 镜像

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/bin/sh

# ----------- 1. SSH 配置 -----------
# 检查是否挂载了 SSH 私钥
if [ -f "/root/.ssh_mount/id_rsa" ]; then
echo "Found mounted SSH key, configuring..."
mkdir -p /root/.ssh
cp /root/.ssh_mount/id_rsa /root/.ssh/id_rsa
chmod 600 /root/.ssh/id_rsa
# 自动接受 GitHub 指纹,避免交互式确认
echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> /root/.ssh/config
else
echo "Warning: No SSH key mounted at /root/.ssh_mount/id_rsa"
echo "Git operations might fail if the repo is private."
fi

# ----------- 2. Git 配置与拉取 -----------
# 配置用户信息
git config --global user.name "zengy"
git config --global user.email i@zengy.win

# 判断当前目录是否为 git 仓库
if [ ! -d ".git" ]; then
echo "Directory is empty or not a git repo. Initializing..."
git init
git remote add origin git@github.com:zengycn/vercel.git
echo "Pulling latest code from master..."
git pull origin master
else
echo "Git repo detected. Updating..."
# 强制修正远程地址(防止配置漂移)
git remote set-url origin git@github.com:zengycn/vercel.git
git pull origin master
fi

# ----------- 3. 依赖安装 -----------
echo "Checking dependencies..."
if [ -f "package.json" ]; then
echo "Installing/Updating npm packages..."
npm install
else
echo "Warning: package.json not found!"
fi

# ----------- 4. 启动服务 -----------
# 执行 CMD 传入的命令,默认是 hexo server
echo "Starting application..."
exec "$@"
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
29
30
31
32
33
34
# node环境镜像
FROM node:lts-alpine

# 设置时区变量
ENV TZ=Asia/Shanghai

# 安装基础工具
# 注意:apk add tzdata 用于支持时区设置
# git 和 openssh 用于代码拉取
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
apk add --no-cache git openssh tzdata

# 配置时区
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 设置工作目录
WORKDIR /usr/src/hexo

# 全局安装 hexo-cli
RUN npm install hexo-cli -g

# 复制启动脚本并赋予权限
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

# 暴露端口
EXPOSE 4000

# 设置入口点为脚本
ENTRYPOINT ["/entrypoint.sh"]

# 默认启动命令
# 注意:Hexo 默认只监听 localhost,在 Docker 中必须指定 -i 0.0.0.0 才能被外部访问
CMD ["hexo", "server", "-i", "0.0.0.0"]

2. 运行容器

同样挂载 代码目录SSH密钥

1
2
3
4
5
6
docker run -d \
--name hexo \
-p 4000:4000 \
-v /path/to/your/local/hexo:/usr/src/hexo \
-v ~/.ssh/id_rsa:/root/.ssh_mount/id_rsa \
registry.cn-hangzhou.aliyuncs.com/z-z/hexo-theme-redefine:github
  • Title: Hexo Docker Image
  • Author: _N.x Blog
  • Created at : 2026-01-05 15:45:05
  • Updated at : 2026-01-12 06:06:58
  • Link: https://zengy.win/2026/01/05/Hexo-Docker-Image/
  • License: This work is licensed under CC BY-NC-SA 4.0.