大家好!今天咱们来聊一个能极大提升效率的话题——如何使用 Docker 来搭建和管理你的 Hexo 博客。如果你还在为本地 Node.js 版本冲突、环境配置复杂而头疼,那这篇文章就是你的救星。我们将一步步带你从零开始,实现一个干净、隔离、可移植的 Hexo 环境。
为什么选择 Docker?它到底是个啥?
简单来说,Docker 就像一个超轻量级的虚拟机。它能把你的应用程序(比如 Hexo)连同它需要的所有运行库、环境打包到一个“集装箱”里。
- 轻量高效:与 Vmware 这种重量级虚拟机不同,Docker 直接共享主机的操作系统内核,只隔离运行库和程序本身。性能损失微乎其微,启动速度飞快。
- 环境隔离:你可以在主机上同时运行需要不同 Node.js 版本的多个项目,它们在各自的 Docker 容器里互不干扰。再也不用担心把主机的环境搞得一团糟了!
- 一键部署:环境配置好了,打包成一个镜像,就可以在任何安装了 Docker 的机器上一键运行,完美复现。
准备工作:先给你的机器装上 Docker
在开始我们的 Hexo 之旅前,你的电脑或服务器上需要先安装好 Docker 环境。这就像做饭前得先有口锅一样。
Centos 系统安装 Docker
对于使用 X86 架构的 Centos 系统,官方提供了一键安装脚本,非常方便:
curl -sSL https://get.docker.com/ | sh
对于 Arm 架构的 Centos(比如在某些云服务器或树莓派上),步骤会多几步:
- 安装必要的工具:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 - 添加 Docker 的软件仓库:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo - 安装 Docker 引擎:
sudo yum install docker-ce docker-ce-cli containerd.io - 启动 Docker 服务:
sudo systemctl start docker
QNAP (威联通) NAS 安装 Docker
如果用的是 QNAP,直接在系统应用 AppCenter 中找到 Container Station (容器工作站),点击安装即可。
Synology (群晖) NAS 安装 Docker
同样地,如果你的群晖是 x86 平台的,可以在“套件中心”里找到 Docker 套件并直接安装。(注意:ARM 架构的群晖不支持 Docker 哦)
Docker 版 Hexo 环境一键部署
环境就绪!接下来就是见证奇迹的时刻。这里使用一个已经打包好的 Hexo Docker 镜像,它集成了最新版的 Node.js 和 Hexo,让你省去所有环境配置的烦恼。
执行下面这条命令,你的 Hexo 容器就创建并运行起来了!
docker create --name=hexo \
-e HEXO_SERVER_PORT=4000 \
-e GIT_USER="your-git-username" \
-e GIT_EMAIL="[email protected]" \
-v /path/to/your/blog:/app \
-p 4000:4000 \
bloodstar/hexo
代码解析:
-
docker create --name=hexo:创建一个名为hexo的容器。 -
-e HEXO_SERVER_PORT=4000:设置环境变量,指定 Hexo 服务的端口为 4000。 -
-e GIT_USER="your-git-username":设置你的 Git 用户名,用于hexo deploy。 -
-e GIT_EMAIL="[email protected]":设置你的 Git 邮箱。 -
-v /path/to/your/blog:/app:这是最关键的一步! 它将你主机上的一个目录(比如/mnt/myblog)挂载到容器内的/app目录。这样,所有 Hexo 的源文件都保存在你的主机上,即使容器删除了,你的博客文章也不会丢失。请务必将/path/to/your/blog替换成你自己的真实路径。 -
-p 4000:4000:将主机的 4000 端口映射到容器的 4000 端口。这样你就可以通过访问http://主机IP:4000来预览你的博客了。 -
bloodstar/hexo:指定使用的 Docker 镜像。
拥有一个炫酷的 Web 写作后台
每次都用命令行写文章?太麻烦了!我们可以给 Hexo 装上一个后台管理插件 hexo-admin,让你像用 WordPress 一样在网页上写文章、管理文章。
1. 进入 Docker 容器
首先,我们需要进入正在运行的 hexo 容器内部来执行命令。
docker exec -it hexo /bin/bash
执行后,你就进入到了容器的命令行环境,可以像在普通 Linux 系统里一样操作了。
2. 安装并配置 hexo-admin
在容器内,执行安装命令(假设你已经 cd /app):
npm install --save hexo-admin
然后,编辑你博客根目录下的 _config.yml 文件,添加 admin 的配置:
# Hexo Admin- Interface
admin:
username: youradmin # 设置你的登录用户名
password_hash: be121740bf988b2225a313fa1f107ca1 # 这是'password'的bcrypt哈希值, 请替换成你自己的密码哈希
secret: a secret something # 用于cookie加密的密钥,随便写一串复杂的字符串
deployCommand: '/app/tools/cide.sh' # 点击后台的Deploy按钮时执行的部署脚本
提示:
password_hash需要使用 bcrypt 加密生成。你可以找一个在线工具生成,或者在容器里用npm install -g bcrypt然后用 node 命令生成。
配置完成后,重启你的 Docker 容器 (docker restart hexo)。现在,访问 http://主机IP:4000/admin 就可以看到登录界面了!
实现自动化部署:配置 SSH Key
要在后台或者命令行通过 hexo deploy 推送博客到 Github 等平台,你需要让 Docker 容器拥有访问你代码仓库的权限。这通常通过 SSH Key 来实现。
获取容器内的公钥:这个 Docker 镜像在启动时会自动在
/app/.ssh目录下生成一对 SSH 密钥。我们先进入容器:docker exec -it hexo /bin/bash查看并复制公钥:
cat /app/.ssh/id_rsa.pub复制输出的全部内容(以
ssh-rsa开头)。添加到 Github:
- 登录 Github,点击右上角的头像 ->
Settings。 - 在左侧菜单选择
SSH and GPG keys。 - 点击
New SSH key或Add SSH key。 -
Title随便填,Key粘贴你刚刚复制的公钥内容,然后保存。
- 登录 Github,点击右上角的头像 ->
搞定!现在你的容器就可以免密推送到你的 Github 仓库了。
高级玩法:使用 Nginx 反向代理
每次都用 IP:端口 的方式访问博客,是不是觉得有点 low?而且没法用 HTTPS。我们可以用 Nginx 作为反向代理,实现通过域名(如 blog.17lai.fun)来访问,并且还能轻松加上 SSL 证书。
我们同样使用 Docker 来运行 Nginx。
1. Docker Compose 配置
创建一个 docker-compose.yml 文件,把 Nginx 和 Hexo 放在一起管理,会更方便。
version: '3'
services:
hexo:
image: bloodstar/hexo
container_name: hexo
environment:
- GIT_USER="your-git-username"
- GIT_EMAIL="your-git-[email protected]"
volumes:
- /path/to/your/blog:/app
# 这里不需要 ports 映射了,因为 Nginx 直接和它内部通信
nginxweb:
image: bloodstar/nginx-purge
container_name: "nginxweb"
ports:
- "80:80"
- "443:443"
restart: always
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d:ro # Nginx 网站配置
- ./nginx/certs:/etc/nginx/certs:ro # SSL 证书
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro # Nginx 主配置
depends_on:
- hexo
2. Nginx 配置
在 docker-compose.yml 同级目录下创建 nginx/conf.d 文件夹,并新建一个 blog.conf 文件:
upstream blog {
# 'hexo' 是上面 docker-compose.yml 文件里定义的 hexo 服务的名字
server hexo:4000;
}
server {
listen 80;
server_name blog.17lai.fun;
# 如果要启用 SSL,请取消下面的注释
# listen 443 ssl http2;
# ssl_certificate /etc/nginx/certs/your_cert.pem;
# ssl_certificate_key /etc/nginx/certs/your_key.key;
access_log /var/log/nginx/blog.access.log;
error_log /var/log/nginx/blog.error.log;
location / {
proxy_pass http://blog;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
3. 本地测试:修改 Hosts 文件
为了让你的电脑知道 blog.17lai.fun 这个域名指向你的 Docker 主机,需要修改一下 hosts 文件。
Windows: 文件路径是
C:\Windows\System32\drivers\etc\HOSTS。需要用管理员权限的记事本打开,在末尾添加一行:127.0.0.1 blog.17lai.fun(如果 Docker 运行在其他机器,请把
127.0.0.1换成那台机器的 IP)Linux/Mac: 文件路径是
/etc/hosts。使用sudo vim /etc/hosts编辑,同样在末尾添加上面那行。
现在,在 docker-compose.yml 所在目录运行 docker-compose up -d,然后直接在浏览器里输入 http://blog.17lai.fun,就可以访问你的博客了!是不是非常酷?
结语
通过 Docker,我们不仅快速搭建了一个稳定、纯净的 Hexo 运行环境,还学会了如何使用后台、配置自动部署以及通过 Nginx 实现域名访问。整个过程下来,你会发现,折腾环境的时间大大减少,可以更专注于内容创作本身。快来试试吧,享受 Docker 带来的丝滑体验!