环境准备

1. 安装必要软件

1
2
3
4
5
6
7
8
9
10
11
12
# 更新系统
sudo apt update && sudo apt upgrade -y

# 安装 Node.js 和 npm
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs

# 安装 PM2(进程管理器)
sudo npm install -g pm2

# 安装 Git
sudo apt install git -y

2. 克隆仓库和设置目录

1
2
3
4
5
6
7
8
9
10
11
# 创建项目目录
sudo mkdir -p /var/www/blog
sudo chown $USER:$USER /var/www/blog

# 克隆文档仓库
git clone https://github.com/your-username/your-docs-repo.git /home/$USER/docs

# 克隆或创建 Hexo 博客
git clone https://github.com/your-username/your-hexo-blog.git /home/$USER/hexo-blog
# 或初始化新的 Hexo 博客
cd /home/$USER && npx hexo init hexo-blog

3. 配置 Hexo

1
2
3
4
5
cd /home/$USER/hexo-blog
npm install

# 安装常用插件
npm install hexo-generator-sitemap hexo-generator-feed --save

部署步骤

1. 部署 Webhook 服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 复制脚本文件到服务器
scp deploy-scripts/* user@your-server:/home/user/deploy/

# 在服务器上安装依赖
cd /home/$USER/deploy
npm install

# 修改配置文件中的路径
nano auto-deploy.sh # 修改路径配置
nano webhook-server.js # 修改路径配置
nano ecosystem.config.js # 修改环境变量

# 设置脚本权限
chmod +x auto-deploy.sh

# 启动 PM2 服务
npm run pm2:start

2. 配置 Nginx(可选)

1
2
3
4
5
# 安装 Nginx
sudo apt install nginx -y

# 配置反向代理
sudo nano /etc/nginx/sites-available/blog

Nginx 配置内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {
listen 80;
server_name your-domain.com;

# 博客静态文件
location / {
root /var/www/html/blog;
index index.html;
try_files $uri $uri/ =404;
}

# Webhook 端点
location /webhook {
proxy_pass http://localhost:3001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
1
2
3
4
# 启用站点
sudo ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

3. 配置 Git Webhook

GitHub 设置:

  1. 进入仓库 Settings > Webhooks
  2. 添加新的 Webhook:
    • Payload URL: http://your-server-ip:3001/webhook
    • Content type: application/json
    • Secret: 与环境变量中的相同
    • Events: 选择 “Just the push event”

GitLab 设置:

  1. 进入项目 Settings > Webhooks
  2. 添加 webhook:
    • URL: http://your-server-ip:3001/webhook
    • Secret Token: 与环境变量中的相同
    • Trigger: Push events

测试部署

1. 手动测试

1
2
3
4
5
6
# 手动运行部署脚本
cd /home/$USER/deploy
./auto-deploy.sh

# 检查日志
tail -f /var/log/hexo-deploy.log

2. 测试 Webhook

1
2
3
4
5
6
# 检查 PM2 状态
pm2 status
pm2 logs hexo-webhook

# 测试 webhook 端点
curl -X POST http://localhost:3001/health

3. 从本地推送测试

1
2
3
4
# 在本地修改任意 Markdown 文件后推送
git add .
git commit -m "test auto deploy"
git push origin main

故障排查

常见问题

  1. 权限问题
1
2
3
# 检查文件权限
ls -la /home/$USER/deploy/
sudo chown -R $USER:$USER /home/$USER/deploy/
  1. 端口被占用
1
2
3
4
# 检查端口使用情况
sudo netstat -tulpn | grep 3001
# 或使用 lsof
sudo lsof -i :3001
  1. Git 权限问题
1
2
3
4
# 配置 Git 凭证
git config --global credential.helper store
git config --global user.name "Your Name"
git config --global user.email "your-email@example.com"
  1. Hexo 生成错误
1
2
3
4
5
# 检查 Hexo 依赖
cd /home/$USER/hexo-blog
npm install
npx hexo clean
npx hexo generate --debug

日志查看

1
2
3
4
5
6
7
8
9
# 查看部署日志
tail -f /var/log/hexo-deploy.log

# 查看 PM2 日志
pm2 logs hexo-webhook

# 查看 Nginx 日志
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log

优化建议

1. 安全配置

  • 使用 HTTPS(Let’s Encrypt)
  • 配置防火墙规则
  • 定期更新系统和依赖

2. 性能优化

  • 启用 Nginx 压缩
  • 配置缓存策略
  • 使用 CDN 加速

3. 监控和备份

  • 设置系统监控
  • 定期备份博客数据
  • 配置错误通知