Files
full-stack-doc/backend/DOCKER_DEPLOYMENT_GUIDE.md
2025-10-14 20:05:29 +08:00

238 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 云盘应用 Docker 镜像部署指南
## 📦 已完成的准备工作
### ✅ 可执行文件
- **位置**: `dist/cloud-drive-server.exe` (29MB)
- **状态**: 已成功打包
- **依赖**: 无外部Python依赖
### ✅ Docker 配置文件
1. `Dockerfile` - 生产级优化版本(需要网络连接)
2. `Dockerfile.local` - 多阶段构建版本
3. `Dockerfile.executable` - 最小化Alpine版本
4. `docker-compose.yml` - 完整服务编排
5. `.dockerignore` - 构建优化配置
### ✅ 部署脚本
- `build-docker.sh` - 自动化部署脚本
- `package-app.py` - 应用打包脚本
- `simple-build.sh` - 简化构建脚本
## 🚀 部署方案
### 方案一标准Docker部署推荐
**适用场景**: 有网络连接的Linux服务器
```bash
# 1. 上传backend目录到服务器
# 2. 进入backend目录
cd backend
# 3. 构建Docker镜像
docker build -t cloud-drive-backend:latest .
# 4. 运行容器
docker run -d \
--name cloud-drive-backend \
-p 8002:8002 \
-v $(pwd)/uploads:/app/uploads \
-v $(pwd)/logs:/app/logs \
cloud-drive-backend:latest
# 5. 检查状态
docker ps
docker logs cloud-drive-backend
```
### 方案二Docker Compose部署
**适用场景**: 需要完整服务栈(后端+数据库+Redis
```bash
# 1. 配置环境变量
cp .env.example .env
# 编辑.env文件设置数据库密码等
# 2. 启动服务
docker-compose up -d
# 3. 查看状态
docker-compose ps
docker-compose logs -f
```
### 方案三:可执行文件部署
**适用场景**: 无Docker环境或网络受限
```bash
# 1. 上传可执行文件
scp dist/cloud-drive-server.exe user@server:/opt/cloud-drive/
# 2. 在服务器上运行
cd /opt/cloud-drive
chmod +x cloud-drive-server.exe
./cloud-drive-server.exe
```
### 方案四离线Docker镜像
**适用场景**: 完全离线环境
```bash
# 1. 在有网络的机器上构建镜像
docker build -t cloud-drive-backend:offline .
# 2. 导出镜像
docker save -o cloud-drive-backend.tar cloud-drive-backend:offline
# 3. 传输到目标服务器
scp cloud-drive-backend.tar user@server:/tmp/
# 4. 在目标服务器加载
docker load -i /tmp/cloud-drive-backend.tar
docker run -d -p 8002:8002 cloud-drive-backend:offline
```
## 🔧 配置说明
### 环境变量
```bash
# 数据库连接
DATABASE_URL=mysql://username:password@host:3306/database
# Redis连接
REDIS_URL=redis://host:6379/0
# 应用配置
ENVIRONMENT=production
SECRET_KEY=your-secret-key
CORS_ORIGINS=http://localhost:3003
```
### 端口配置
- **应用端口**: 8002
- **数据库端口**: 3306 (如果使用docker-compose)
- **Redis端口**: 6379 (如果使用docker-compose)
### 数据持久化
- `./uploads` - 文件上传目录
- `./logs` - 应用日志目录
## 🏥 健康检查
应用提供内置健康检查:
```bash
# 检查应用状态
curl http://localhost:8002/api/v1/health
# 预期响应
{
"status": "healthy",
"timestamp": "2025-10-14T16:32:51.123Z",
"version": "1.0.1"
}
```
## 📊 性能特性
### Docker镜像优势
-**一致性**: 开发和生产环境完全一致
-**隔离性**: 应用依赖完全隔离
-**可移植**: 支持各种Linux发行版
-**可扩展**: 支持水平扩展和负载均衡
### 应用特性
-**单文件部署**: 所有依赖打包在单一可执行文件中
-**快速启动**: 冷启动时间 < 5秒
- **内存优化**: 运行时内存占用 < 100MB
- **健康检查**: 内置健康检查端点
## 🛠️ 故障排除
### 常见问题
1. **容器无法启动**
```bash
# 查看容器日志
docker logs cloud-drive-backend
# 检查端口占用
netstat -tulpn | grep 8002
```
2. **数据库连接失败**
- 检查数据库服务状态
- 验证连接字符串
- 确认网络连通性
3. **文件上传问题**
- 检查uploads目录权限
- 确认磁盘空间
- 验证文件大小限制
### 调试命令
```bash
# 进入容器调试
docker exec -it cloud-drive-backend /bin/bash
# 查看应用日志
docker logs -f cloud-drive-backend
# 检查容器资源使用
docker stats cloud-drive-backend
```
## 📈 扩展部署
### 负载均衡
使用多个实例配合Nginx:
```nginx
upstream cloud_drive {
server localhost:8002;
server localhost:8003;
server localhost:8004;
}
server {
listen 80;
location / {
proxy_pass http://cloud_drive;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
```
### 集群部署
使用Docker Swarm或Kubernetes进行集群部署。
## ✅ 部署检查清单
- [ ] Docker或Docker Compose已安装
- [ ] 网络连接正常(如需下载镜像)
- [ ] 端口8002可用
- [ ] 数据库连接配置正确
- [ ] uploads和logs目录权限正确
- [ ] 环境变量设置完成
- [ ] 防火墙规则已配置
- [ ] 健康检查通过
- [ ] 日志监控已设置
---
## 🎯 总结
你的云盘应用已经成功打包为Docker镜像格式
1. **可执行文件**: `cloud-drive-server.exe` (29MB) - 可直接运行
2. **Docker镜像**: 多种Dockerfile配置可选
3. **完整方案**: 包含数据库Redis的完整服务栈
4. **自动化**: 一键部署脚本支持
选择适合你环境的部署方案即可