博客hexo云服务器Hexo 博客部署到云服务器完整教程
W W详细记录 Hexo 博客从本地开发环境到云服务器自动化部署的完整过程,包括环境配置、Git 钩子设置和 Nginx 服务器配置。
技术方案概述
为什么选择 Hexo
目前搭建博客的主流框架有 WordPress、VuePress、Hugo、Hexo 等等,我主要是感觉 Hexo 好看的主题比较多,生态完善,所以选择了这个静态博客框架。
整体部署架构
采用 Git 钩子自动化部署 方案,实现一键部署:
1 2 3 4 5
| graph LR A[本地 Hexo] -->|hexo deploy| B[远程 Git 仓库] B -->|Git 钩子触发| C[自动部署脚本] C -->|复制文件| D[Nginx 网站目录] D -->|访问| E[用户浏览器]
|
核心流程:
- 🏠 本地推送:执行
hexo deploy
将生成的静态文件推送到远程 Git 仓库
- 🔄 自动触发:Git 仓库配置钩子脚本,接收推送后自动执行部署
- 📂 文件同步:将最新的静态文件强制覆盖到 Nginx 指定的工作目录
- 🌐 对外服务:Nginx 服务器配置访问根路径指向该工作目录
本地环境准备
基础环境安装
1. Node.js 和 Git 环境验证
这两个工具是 Hexo 开发的基础依赖,确保已正确安装:
1 2 3 4 5 6 7
| C:\Users\gzl>node -v v18.16.1
C:\Users\gzl>git --version git version 2.39.0.windows.2
|
验证要点:
- ✅ Node.js 版本建议 14.0 以上
- ✅ Git 安装后右键菜单会出现 “Git Bash Here”
- ✅ 确保 npm 命令可用
2. Hexo 框架安装与初始化
第一步:创建项目目录
1 2 3
| mkdir E:\MyBlog cd E:\MyBlog
|
第二步:安装 Hexo 脚手架
1 2
| npm install -g hexo-cli
|
第三步:初始化 Hexo 项目
1 2 3 4 5 6
| hexo init myblogs cd myblogs
npm install
|
项目结构说明:
1 2 3 4 5 6 7 8 9
| myblogs/ ├── _config.yml # 站点配置文件 ├── package.json # 依赖管理文件 ├── scaffolds/ # 文章模板目录 ├── source/ # 源文件目录 │ ├── _posts/ # 文章目录 │ └── ... ├── themes/ # 主题目录 └── public/ # 生成的静态文件目录
|
第四步:本地测试运行
看到 Hexo 默认页面说明本地环境配置成功! 🎉
部署插件安装
1 2 3 4 5
| npm install hexo-deployer-git --save
npm install hexo-server --save
|
云服务器环境配置
Nginx 服务器配置
1. 安装 Nginx
1 2 3 4 5
| yum install nginx
nginx -v
|
2. 创建部署目录
3. 配置 Nginx 主配置文件
编辑 /etc/nginx/nginx.conf
:
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
| user nginx; worker_processes auto;
error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid;
events { worker_connections 1024; }
http { include /etc/nginx/mime.types; default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on; keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf; }
|
4. 配置站点虚拟主机
编辑 /etc/nginx/conf.d/default.conf
:
场景一:仅使用 IP 访问
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| server { listen 80; listen [::]:80; server_name 你的公网IP;
location / { root /data/hexo; index index.html index.htm; }
error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
|
场景二:域名 + SSL 证书(推荐)
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
| server { listen 80; listen [::]:80; server_name 你的域名;
rewrite ^(.*)$ https://${server_name}$1 permanent; }
server { listen 443 ssl; server_name 你的域名;
ssl_certificate /path/to/your/cert.pem; ssl_certificate_key /path/to/your/private.key;
ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; root /data/hexo; index index.html index.htm; }
error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
|
5. 启动 Nginx 服务
1 2 3 4 5 6 7 8
| nginx
nginx -s reload
nginx -s stop
|
Node.js 环境配置
1 2 3 4 5 6 7 8 9 10
| cd ~
curl -sL https://rpm.nodesource.com/setup_16.x | bash - yum install -y nodejs
node -v npm -v
|
Git 服务器配置
1. 安装 Git
1 2 3 4 5
| yum install git
git --version
|
2. 创建 Git 专用用户
1 2 3 4 5 6 7 8
| adduser git
chmod 740 /etc/sudoers
vim /etc/sudoers
|
在 root ALL=(ALL) ALL
下方添加:
1 2 3 4 5
| chmod 400 /etc/sudoers
sudo passwd git
|
3. SSH 免密登录配置
服务器端操作:
1 2 3 4 5 6
| su git
cd ~ mkdir .ssh
|
本地端操作:
1 2 3 4 5 6 7
| cd ~/.ssh ssh-keygen
chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa
|
上传公钥到服务器:
将本地的 id_rsa.pub
文件上传到服务器的 /home/git/.ssh/
目录
服务器端配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| su git cd ~/.ssh
cp id_rsa.pub authorized_keys cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys chmod 700 ~/.ssh
restorecon -Rv ~/.ssh
|
测试免密登录:
看到成功连接说明 SSH 配置正确! ✅
4. 创建 Git 裸仓库
1 2 3 4 5 6 7 8 9
| su git cd ~
git init --bare hexo.git
vim ~/hexo.git/hooks/post-receive
|
钩子脚本内容:
1 2
| #!/bin/bash git --work-tree=/data/hexo --git-dir=/home/git/hexo.git checkout -f
|
设置钩子权限:
1 2 3 4 5
| chmod +x ~/hexo.git/hooks/post-receive
sudo chmod -R 777 /data/hexo
|
本地项目配置与部署
配置部署参数
编辑本地 Hexo 项目的 _config.yml
文件:
1 2 3 4 5
| deploy: type: git repo: git@你的服务器IP:/home/git/hexo.git branch: master
|
配置 Git 全局变量
1 2 3
| git config --global user.email "your-email@example.com" git config --global user.name "your-name"
|
执行部署命令
1 2 3 4 5 6 7 8
| hexo clean
hexo generate
hexo deploy
|
部署流程详解
完整部署流程
1 2 3 4 5 6 7 8
| hexo clean
hexo g
hexo d
|
Git 钩子工作原理
当执行 hexo deploy
时:
- 本地推送:Hexo 将
public/
目录中的静态文件推送到服务器的 Git 仓库
- 钩子触发:服务器接收到推送后,自动执行
post-receive
钩子
- 文件部署:钩子脚本将文件检出到
/data/hexo
目录
- 服务生效:Nginx 立即提供新的静态文件服务
部署成功验证
访问你的域名或服务器 IP,看到 Hexo 博客页面说明部署成功! 🎊
常见问题与解决方案
1. SSH 连接失败
问题现象:
1
| ssh: connect to host xxx.xxx.xxx.xxx port 22: Connection refused
|
解决方案:
1 2 3 4 5 6 7 8
| systemctl status sshd
systemctl start sshd
firewall-cmd --list-all
|
2. Git 钩子无执行权限
问题现象:部署时没有错误,但文件未更新
解决方案:
1 2 3 4 5
| ls -la ~/hexo.git/hooks/post-receive
chmod +x ~/hexo.git/hooks/post-receive
|
3. Nginx 403 权限错误
问题现象:访问网站出现 403 Forbidden
解决方案:
1 2 3 4 5 6 7 8 9 10 11
| ls -la /data/
sudo chmod -R 755 /data/hexo
getenforce
setenforce 0
|
4. 端口被占用
问题现象:Nginx 启动失败,端口 80/443 被占用
解决方案:
1 2 3 4 5 6 7 8
| netstat -tulnp | grep :80
kill -9 进程ID
vim /etc/nginx/conf.d/default.conf
|
高级优化建议
1. 自动化脚本优化
创建更智能的部署钩子 /home/git/hexo.git/hooks/post-receive
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #!/bin/bash
WORK_TREE="/data/hexo" GIT_DIR="/home/git/hexo.git"
echo "开始部署: $(date)" >> /var/log/hexo-deploy.log
git --work-tree=$WORK_TREE --git-dir=$GIT_DIR checkout -f
chown -R nginx:nginx $WORK_TREE chmod -R 755 $WORK_TREE
nginx -s reload
echo "部署完成: $(date)" >> /var/log/hexo-deploy.log echo "----------------------------------------" >> /var/log/hexo-deploy.log
|
2. 备份策略
1 2
| vim /home/git/backup-hexo.sh
|
1 2 3 4 5 6 7 8 9
| #!/bin/bash BACKUP_DIR="/backup/hexo" DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR tar -czf $BACKUP_DIR/hexo_backup_$DATE.tar.gz /data/hexo
find $BACKUP_DIR -name "hexo_backup_*.tar.gz" -mtime +7 -delete
|
3. 监控与日志
1 2 3 4 5 6 7 8
| tail -f /var/log/nginx/access.log
tail -f /var/log/hexo-deploy.log
watch -n 1 'ls -la /data/hexo'
|
4. 性能优化
Nginx 性能调优:
1 2 3 4 5 6 7 8 9 10 11
| gzip on; gzip_vary on; gzip_min_length 1024; gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 1y; add_header Cache-Control "public, immutable"; }
|
总结
通过本教程,我们成功实现了 Hexo 博客的自动化云服务器部署方案。这个方案的核心优势包括:
技术特点
- 自动化程度高:一次配置,终身受益
- 部署速度快:Git 钩子秒级部署
- 稳定性强:基于成熟的 Git + Nginx 技术栈
- 扩展性好:可轻松添加多环境部署支持
关键收益
- 🚀 开发效率提升:本地写作,一键部署
- 🔒 安全性保障:SSH 免密 + Git 版本控制
- 📈 性能优化:静态文件 + Nginx 高性能服务
- 🛠️ 运维简化:自动化部署减少人工干预
这套方案不仅解决了 Hexo 博客的部署问题,还为后续的博客运维和扩展奠定了坚实的基础。无论是个人博客还是团队文档站点,都可以基于这个方案进行定制和优化。