v0.0.3 published
This commit is contained in:
411
doc/summary/v0.0.3/PRODUCTION_DEPLOYMENT_GUIDE.md
Normal file
411
doc/summary/v0.0.3/PRODUCTION_DEPLOYMENT_GUIDE.md
Normal file
@@ -0,0 +1,411 @@
|
||||
# Hexo Blog Docker 生产部署指南
|
||||
**版本**: v0.0.3-fixed
|
||||
**更新日期**: 2025年5月29日
|
||||
**状态**: 生产就绪 ✅
|
||||
|
||||
## 📋 概述
|
||||
|
||||
此指南提供了完整的Hexo Blog Docker容器生产部署流程。容器已通过全面测试,包含所有必要的安全配置、性能优化和故障恢复机制。
|
||||
|
||||
## 🚀 快速部署
|
||||
|
||||
### 步骤1: 构建生产镜像
|
||||
```bash
|
||||
# 克隆或下载项目文件
|
||||
cd /path/to/dockerfiledir
|
||||
|
||||
# 构建生产镜像 (使用修复版Dockerfile)
|
||||
docker build -f Dockerfile_v0.0.3-fixed -t hexo-blog:v0.0.3-fixed .
|
||||
|
||||
# 验证镜像构建成功
|
||||
docker images | grep hexo-blog
|
||||
```
|
||||
|
||||
### 步骤2: 启动生产容器
|
||||
```bash
|
||||
# 生产环境启动 (自定义端口)
|
||||
docker run -d \
|
||||
--name hexo-blog-prod \
|
||||
--restart unless-stopped \
|
||||
-p 80:80 \
|
||||
-p 2022:22 \
|
||||
-v hexo-data:/home/www/hexo \
|
||||
-v hexo-git:/home/hexo/hexo.git \
|
||||
-v hexo-logs:/var/log/container \
|
||||
hexo-blog:v0.0.3-fixed
|
||||
|
||||
# 检查容器状态
|
||||
docker ps -a | grep hexo-blog-prod
|
||||
docker logs hexo-blog-prod
|
||||
```
|
||||
|
||||
### 步骤3: 配置SSH密钥访问
|
||||
```bash
|
||||
# 生成生产环境SSH密钥对
|
||||
ssh-keygen -t ed25519 -f ~/.ssh/hexo_blog_prod -C "hexo-blog-production"
|
||||
|
||||
# 部署公钥到容器
|
||||
cat ~/.ssh/hexo_blog_prod.pub | docker exec -i hexo-blog-prod bash -c "
|
||||
mkdir -p /home/hexo/.ssh &&
|
||||
cat > /home/hexo/.ssh/authorized_keys &&
|
||||
chmod 600 /home/hexo/.ssh/authorized_keys &&
|
||||
chown -R hexo:hexo /home/hexo/.ssh
|
||||
"
|
||||
|
||||
# 测试SSH连接
|
||||
ssh -i ~/.ssh/hexo_blog_prod -p 2022 hexo@YOUR_SERVER_IP "echo 'SSH连接成功'"
|
||||
```
|
||||
|
||||
### 步骤4: 配置Git部署
|
||||
```bash
|
||||
# 在本地博客项目中添加生产环境Git远程仓库
|
||||
cd /path/to/your/hexo/blog
|
||||
git remote add production ssh://hexo@YOUR_SERVER_IP:2022/home/hexo/hexo.git
|
||||
|
||||
# 配置SSH客户端使用正确的密钥
|
||||
echo "Host YOUR_SERVER_IP
|
||||
Port 2022
|
||||
User hexo
|
||||
IdentityFile ~/.ssh/hexo_blog_prod
|
||||
StrictHostKeyChecking no" >> ~/.ssh/config
|
||||
|
||||
# 部署博客内容
|
||||
git push production main # 或 master 分支
|
||||
```
|
||||
|
||||
## 🔧 生产环境配置
|
||||
|
||||
### 反向代理配置 (推荐)
|
||||
|
||||
#### Nginx反向代理
|
||||
```nginx
|
||||
# /etc/nginx/sites-available/hexo-blog
|
||||
server {
|
||||
listen 80;
|
||||
server_name yourdomain.com www.yourdomain.com;
|
||||
|
||||
location / {
|
||||
proxy_pass http://localhost; # 如果容器绑定80端口
|
||||
proxy_set_header Host $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;
|
||||
}
|
||||
|
||||
# 健康检查
|
||||
location /health {
|
||||
proxy_pass http://localhost/health;
|
||||
access_log off;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Apache反向代理
|
||||
```apache
|
||||
<VirtualHost *:80>
|
||||
ServerName yourdomain.com
|
||||
ServerAlias www.yourdomain.com
|
||||
|
||||
ProxyPreserveHost On
|
||||
ProxyPass /health http://localhost/health
|
||||
ProxyPass / http://localhost/
|
||||
ProxyPassReverse / http://localhost/
|
||||
|
||||
# 日志配置
|
||||
ErrorLog ${APACHE_LOG_DIR}/hexo-blog_error.log
|
||||
CustomLog ${APACHE_LOG_DIR}/hexo-blog_access.log combined
|
||||
</VirtualHost>
|
||||
```
|
||||
|
||||
### SSL/TLS 配置
|
||||
|
||||
#### 使用Let's Encrypt
|
||||
```bash
|
||||
# 安装Certbot
|
||||
sudo apt-get update
|
||||
sudo apt-get install certbot python3-certbot-nginx
|
||||
|
||||
# 获取SSL证书
|
||||
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
|
||||
|
||||
# 设置自动续期
|
||||
sudo crontab -e
|
||||
# 添加: 0 12 * * * /usr/bin/certbot renew --quiet
|
||||
```
|
||||
|
||||
### 防火墙配置
|
||||
```bash
|
||||
# UFW防火墙配置示例
|
||||
sudo ufw allow 22/tcp # SSH
|
||||
sudo ufw allow 80/tcp # HTTP
|
||||
sudo ufw allow 443/tcp # HTTPS
|
||||
sudo ufw allow 2022/tcp # Hexo Blog SSH (生产)
|
||||
sudo ufw enable
|
||||
```
|
||||
|
||||
## 📊 监控与日志
|
||||
|
||||
### 容器监控
|
||||
```bash
|
||||
# 创建监控脚本
|
||||
cat > /usr/local/bin/hexo-monitor.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
CONTAINER_NAME="hexo-blog-prod"
|
||||
|
||||
# 检查容器健康状态
|
||||
HEALTH=$(docker inspect --format='{{.State.Health.Status}}' $CONTAINER_NAME 2>/dev/null)
|
||||
if [ "$HEALTH" != "healthy" ]; then
|
||||
echo "[$(date)] 警告: 容器健康检查失败 - $HEALTH"
|
||||
# 发送告警通知 (可集成邮件、Slack等)
|
||||
fi
|
||||
|
||||
# 检查磁盘使用
|
||||
DISK_USAGE=$(df /var/lib/docker | awk 'NR==2 {print $5}' | sed 's/%//')
|
||||
if [ $DISK_USAGE -gt 80 ]; then
|
||||
echo "[$(date)] 警告: 磁盘使用率过高 - ${DISK_USAGE}%"
|
||||
fi
|
||||
EOF
|
||||
|
||||
chmod +x /usr/local/bin/hexo-monitor.sh
|
||||
|
||||
# 添加到定时任务
|
||||
echo "*/5 * * * * /usr/local/bin/hexo-monitor.sh >> /var/log/hexo-monitor.log 2>&1" | crontab -
|
||||
```
|
||||
|
||||
### 日志轮转配置
|
||||
```bash
|
||||
# 创建logrotate配置
|
||||
sudo tee /etc/logrotate.d/hexo-blog << 'EOF'
|
||||
/var/log/container/*.log {
|
||||
daily
|
||||
missingok
|
||||
rotate 30
|
||||
compress
|
||||
notifempty
|
||||
create 644 root root
|
||||
postrotate
|
||||
docker kill -s USR1 hexo-blog-prod
|
||||
endscript
|
||||
}
|
||||
EOF
|
||||
```
|
||||
|
||||
### Prometheus监控 (可选)
|
||||
```yaml
|
||||
# docker-compose.monitoring.yml
|
||||
version: '3.8'
|
||||
services:
|
||||
prometheus:
|
||||
image: prom/prometheus
|
||||
ports:
|
||||
- "9090:9090"
|
||||
volumes:
|
||||
- ./prometheus.yml:/etc/prometheus/prometheus.yml
|
||||
|
||||
grafana:
|
||||
image: grafana/grafana
|
||||
ports:
|
||||
- "3000:3000"
|
||||
environment:
|
||||
- GF_SECURITY_ADMIN_PASSWORD=admin123
|
||||
```
|
||||
|
||||
## 🔄 备份与恢复
|
||||
|
||||
### 自动备份脚本
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# /usr/local/bin/hexo-backup.sh
|
||||
|
||||
BACKUP_DIR="/backup/hexo-blog"
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
CONTAINER_NAME="hexo-blog-prod"
|
||||
|
||||
mkdir -p $BACKUP_DIR
|
||||
|
||||
# 备份Git仓库
|
||||
docker exec $CONTAINER_NAME tar -czf - -C /home/hexo hexo.git > \
|
||||
$BACKUP_DIR/hexo-git-$DATE.tar.gz
|
||||
|
||||
# 备份Web内容
|
||||
docker exec $CONTAINER_NAME tar -czf - -C /home/www hexo > \
|
||||
$BACKUP_DIR/hexo-www-$DATE.tar.gz
|
||||
|
||||
# 备份配置文件
|
||||
docker exec $CONTAINER_NAME tar -czf - -C /etc/container templates > \
|
||||
$BACKUP_DIR/hexo-config-$DATE.tar.gz
|
||||
|
||||
# 保留最近30天的备份
|
||||
find $BACKUP_DIR -name "hexo-*-*.tar.gz" -mtime +30 -delete
|
||||
|
||||
echo "[$(date)] 备份完成: $BACKUP_DIR"
|
||||
```
|
||||
|
||||
### 恢复过程
|
||||
```bash
|
||||
# 恢复Git仓库
|
||||
docker exec -i hexo-blog-prod tar -xzf - -C /home/hexo < \
|
||||
/backup/hexo-blog/hexo-git-YYYYMMDD_HHMMSS.tar.gz
|
||||
|
||||
# 恢复Web内容
|
||||
docker exec -i hexo-blog-prod tar -xzf - -C /home/www < \
|
||||
/backup/hexo-blog/hexo-www-YYYYMMDD_HHMMSS.tar.gz
|
||||
|
||||
# 修复权限
|
||||
docker exec hexo-blog-prod chown -R hexo:hexo /home/hexo /home/www
|
||||
```
|
||||
|
||||
## 🚨 故障排除
|
||||
|
||||
### 常见问题及解决方案
|
||||
|
||||
#### 1. 容器无法启动
|
||||
```bash
|
||||
# 检查日志
|
||||
docker logs hexo-blog-prod
|
||||
|
||||
# 常见原因:
|
||||
# - 端口冲突: 更改主机端口映射
|
||||
# - 权限问题: 检查Docker daemon权限
|
||||
# - 资源不足: 检查内存和磁盘空间
|
||||
```
|
||||
|
||||
#### 2. SSH连接失败
|
||||
```bash
|
||||
# 检查SSH服务状态
|
||||
docker exec hexo-blog-prod systemctl status ssh
|
||||
|
||||
# 检查SSH配置
|
||||
docker exec hexo-blog-prod cat /etc/ssh/sshd_config
|
||||
|
||||
# 重启SSH服务
|
||||
docker exec hexo-blog-prod systemctl restart ssh
|
||||
```
|
||||
|
||||
#### 3. Git推送失败
|
||||
```bash
|
||||
# 检查Git仓库权限
|
||||
docker exec hexo-blog-prod ls -la /home/hexo/hexo.git
|
||||
|
||||
# 检查post-receive钩子
|
||||
docker exec hexo-blog-prod cat /home/hexo/hexo.git/hooks/post-receive
|
||||
|
||||
# 手动修复权限
|
||||
docker exec hexo-blog-prod chown -R hexo:hexo /home/hexo/hexo.git
|
||||
```
|
||||
|
||||
#### 4. Web页面无法访问
|
||||
```bash
|
||||
# 检查Nginx状态
|
||||
docker exec hexo-blog-prod nginx -t
|
||||
docker exec hexo-blog-prod systemctl status nginx
|
||||
|
||||
# 检查Web根目录
|
||||
docker exec hexo-blog-prod ls -la /home/www/hexo
|
||||
|
||||
# 重启Nginx
|
||||
docker exec hexo-blog-prod systemctl reload nginx
|
||||
```
|
||||
|
||||
## 🔐 安全加固
|
||||
|
||||
### 定期安全更新
|
||||
```bash
|
||||
# 创建安全更新脚本
|
||||
cat > /usr/local/bin/hexo-security-update.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
CONTAINER_NAME="hexo-blog-prod"
|
||||
|
||||
echo "[$(date)] 开始安全更新..."
|
||||
|
||||
# 更新容器内的包
|
||||
docker exec $CONTAINER_NAME apt-get update
|
||||
docker exec $CONTAINER_NAME apt-get upgrade -y
|
||||
|
||||
# 重启服务
|
||||
docker exec $CONTAINER_NAME systemctl restart ssh
|
||||
docker exec $CONTAINER_NAME systemctl reload nginx
|
||||
|
||||
echo "[$(date)] 安全更新完成"
|
||||
EOF
|
||||
|
||||
# 每月第一个周日凌晨3点执行安全更新
|
||||
echo "0 3 1-7 * 0 [ \$(date +\%w) -eq 0 ] && /usr/local/bin/hexo-security-update.sh" | crontab -
|
||||
```
|
||||
|
||||
### SSH安全加固
|
||||
```bash
|
||||
# 禁用root SSH登录并限制用户
|
||||
docker exec hexo-blog-prod bash -c "
|
||||
echo 'PermitRootLogin no' >> /etc/ssh/sshd_config
|
||||
echo 'AllowUsers hexo' >> /etc/ssh/sshd_config
|
||||
echo 'MaxAuthTries 3' >> /etc/ssh/sshd_config
|
||||
echo 'MaxStartups 2' >> /etc/ssh/sshd_config
|
||||
systemctl restart ssh
|
||||
"
|
||||
```
|
||||
|
||||
## 📈 性能优化
|
||||
|
||||
### Docker资源限制
|
||||
```bash
|
||||
# 启动容器时设置资源限制
|
||||
docker run -d \
|
||||
--name hexo-blog-prod \
|
||||
--restart unless-stopped \
|
||||
--memory=512m \
|
||||
--cpus=1.0 \
|
||||
--memory-swap=1g \
|
||||
-p 80:80 -p 2022:22 \
|
||||
hexo-blog:v0.0.3-fixed
|
||||
```
|
||||
|
||||
### 缓存优化
|
||||
```bash
|
||||
# 在反向代理中启用缓存
|
||||
# Nginx示例:
|
||||
location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ {
|
||||
proxy_pass http://localhost;
|
||||
proxy_cache_valid 200 1d;
|
||||
add_header X-Cache-Status $upstream_cache_status;
|
||||
}
|
||||
```
|
||||
|
||||
## 📞 支持与维护
|
||||
|
||||
### 联系信息
|
||||
- **技术支持**: 通过GitHub Issues报告问题
|
||||
- **文档更新**: 随版本更新自动同步
|
||||
- **社区讨论**: 加入相关技术论坛
|
||||
|
||||
### 维护计划
|
||||
- **日常监控**: 自动化健康检查和日志分析
|
||||
- **周期更新**: 每月安全补丁,每季度功能更新
|
||||
- **备份验证**: 每周备份完整性测试
|
||||
|
||||
## 🎯 版本路线图
|
||||
|
||||
### v0.0.4 (计划中)
|
||||
- [ ] 自动SSL证书管理
|
||||
- [ ] 增强的监控仪表盘
|
||||
- [ ] 多站点支持
|
||||
- [ ] 自动化CI/CD集成
|
||||
|
||||
### v0.1.0 (长期目标)
|
||||
- [ ] 集群部署支持
|
||||
- [ ] CDN集成
|
||||
- [ ] 高可用配置
|
||||
- [ ] 企业级安全特性
|
||||
|
||||
---
|
||||
|
||||
**部署成功指标**:
|
||||
- ✅ 容器健康状态: healthy
|
||||
- ✅ Web服务响应: HTTP 200
|
||||
- ✅ SSH连接正常: 密钥认证成功
|
||||
- ✅ Git部署功能: 推送自动部署
|
||||
- ✅ 监控告警: 正常运行
|
||||
- ✅ 备份恢复: 定期验证
|
||||
|
||||
**维护联系**: GitHub Copilot AI Assistant
|
||||
**最后更新**: 2025年5月29日 23:50 (CST)
|
||||
Reference in New Issue
Block a user