510 lines
9.7 KiB
Markdown
510 lines
9.7 KiB
Markdown
![]() |
# 部署指南
|
|||
|
|
|||
|
本文档提供了企业级日报系统的详细部署指南,包括开发环境、生产环境和Docker部署方式。
|
|||
|
|
|||
|
## 📋 系统要求
|
|||
|
|
|||
|
### 最低要求
|
|||
|
- **操作系统**: Linux, macOS, Windows
|
|||
|
- **Python**: 3.8+
|
|||
|
- **Node.js**: 16+
|
|||
|
- **内存**: 2GB+
|
|||
|
- **存储**: 10GB+
|
|||
|
|
|||
|
### 推荐配置
|
|||
|
- **操作系统**: Ubuntu 20.04 LTS / CentOS 8
|
|||
|
- **Python**: 3.11
|
|||
|
- **Node.js**: 18 LTS
|
|||
|
- **内存**: 4GB+
|
|||
|
- **存储**: 20GB+
|
|||
|
- **数据库**: PostgreSQL 15+
|
|||
|
|
|||
|
## 🚀 快速部署
|
|||
|
|
|||
|
### 方式一:自动部署脚本
|
|||
|
|
|||
|
#### 后端部署
|
|||
|
```bash
|
|||
|
cd backend
|
|||
|
python deploy.py
|
|||
|
```
|
|||
|
|
|||
|
#### 前端部署
|
|||
|
```bash
|
|||
|
cd frontend
|
|||
|
node deploy.js
|
|||
|
```
|
|||
|
|
|||
|
### 方式二:Docker部署(推荐)
|
|||
|
|
|||
|
```bash
|
|||
|
# 克隆项目
|
|||
|
git clone <项目地址>
|
|||
|
cd daily-report-system
|
|||
|
|
|||
|
# 启动所有服务
|
|||
|
docker-compose up -d
|
|||
|
|
|||
|
# 查看服务状态
|
|||
|
docker-compose ps
|
|||
|
|
|||
|
# 查看日志
|
|||
|
docker-compose logs -f
|
|||
|
```
|
|||
|
|
|||
|
## 🔧 手动部署
|
|||
|
|
|||
|
### 1. 环境准备
|
|||
|
|
|||
|
#### 安装Python环境
|
|||
|
```bash
|
|||
|
# Ubuntu/Debian
|
|||
|
sudo apt update
|
|||
|
sudo apt install python3 python3-pip python3-venv
|
|||
|
|
|||
|
# CentOS/RHEL
|
|||
|
sudo yum install python3 python3-pip
|
|||
|
|
|||
|
# macOS
|
|||
|
brew install python3
|
|||
|
```
|
|||
|
|
|||
|
#### 安装Node.js环境
|
|||
|
```bash
|
|||
|
# Ubuntu/Debian
|
|||
|
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
|
|||
|
sudo apt-get install -y nodejs
|
|||
|
|
|||
|
# CentOS/RHEL
|
|||
|
curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
|
|||
|
sudo yum install nodejs npm
|
|||
|
|
|||
|
# macOS
|
|||
|
brew install node
|
|||
|
```
|
|||
|
|
|||
|
### 2. 后端部署
|
|||
|
|
|||
|
#### 创建虚拟环境
|
|||
|
```bash
|
|||
|
cd backend
|
|||
|
python3 -m venv venv
|
|||
|
|
|||
|
# 激活虚拟环境
|
|||
|
# Linux/Mac
|
|||
|
source venv/bin/activate
|
|||
|
# Windows
|
|||
|
venv\Scripts\activate
|
|||
|
```
|
|||
|
|
|||
|
#### 安装依赖
|
|||
|
```bash
|
|||
|
pip install --upgrade pip
|
|||
|
pip install -r requirements.txt
|
|||
|
```
|
|||
|
|
|||
|
#### 环境配置
|
|||
|
```bash
|
|||
|
# 复制环境变量文件
|
|||
|
cp env.example .env
|
|||
|
|
|||
|
# 编辑环境变量
|
|||
|
vim .env
|
|||
|
```
|
|||
|
|
|||
|
环境变量配置:
|
|||
|
```bash
|
|||
|
# 基础配置
|
|||
|
SECRET_KEY=your-very-secret-key-here-change-in-production
|
|||
|
DEBUG=False
|
|||
|
ALLOWED_HOSTS=your-domain.com,localhost,127.0.0.1
|
|||
|
|
|||
|
# 数据库配置(生产环境推荐PostgreSQL)
|
|||
|
DATABASE_URL=postgresql://username:password@localhost:5432/daily_report
|
|||
|
|
|||
|
# 跨域配置
|
|||
|
CORS_ALLOWED_ORIGINS=https://your-domain.com,http://localhost:3000
|
|||
|
|
|||
|
# 邮件配置(可选)
|
|||
|
EMAIL_HOST=smtp.gmail.com
|
|||
|
EMAIL_PORT=587
|
|||
|
EMAIL_HOST_USER=your-email@gmail.com
|
|||
|
EMAIL_HOST_PASSWORD=your-app-password
|
|||
|
EMAIL_USE_TLS=True
|
|||
|
```
|
|||
|
|
|||
|
#### 数据库设置
|
|||
|
```bash
|
|||
|
# SQLite(开发环境)
|
|||
|
python manage.py makemigrations
|
|||
|
python manage.py migrate
|
|||
|
|
|||
|
# PostgreSQL(生产环境)
|
|||
|
# 1. 安装PostgreSQL
|
|||
|
sudo apt install postgresql postgresql-contrib
|
|||
|
|
|||
|
# 2. 创建数据库和用户
|
|||
|
sudo -u postgres psql
|
|||
|
CREATE DATABASE daily_report;
|
|||
|
CREATE USER daily_report_user WITH PASSWORD 'your-password';
|
|||
|
GRANT ALL PRIVILEGES ON DATABASE daily_report TO daily_report_user;
|
|||
|
\q
|
|||
|
|
|||
|
# 3. 执行迁移
|
|||
|
python manage.py makemigrations
|
|||
|
python manage.py migrate
|
|||
|
```
|
|||
|
|
|||
|
#### 创建超级用户
|
|||
|
```bash
|
|||
|
# 方式1:交互式创建
|
|||
|
python manage.py createsuperuser
|
|||
|
|
|||
|
# 方式2:使用脚本创建(包含测试用户)
|
|||
|
python create_superuser.py
|
|||
|
```
|
|||
|
|
|||
|
#### 收集静态文件
|
|||
|
```bash
|
|||
|
python manage.py collectstatic --noinput
|
|||
|
```
|
|||
|
|
|||
|
#### 启动服务
|
|||
|
```bash
|
|||
|
# 开发环境
|
|||
|
python manage.py runserver 0.0.0.0:8000
|
|||
|
|
|||
|
# 生产环境
|
|||
|
pip install gunicorn
|
|||
|
gunicorn config.wsgi:application --bind 0.0.0.0:8000 --workers 4
|
|||
|
```
|
|||
|
|
|||
|
### 3. 前端部署
|
|||
|
|
|||
|
#### 安装依赖
|
|||
|
```bash
|
|||
|
cd frontend
|
|||
|
npm install
|
|||
|
```
|
|||
|
|
|||
|
#### 环境配置
|
|||
|
```bash
|
|||
|
# 创建环境变量文件
|
|||
|
echo "VUE_APP_BASE_API=http://your-backend-domain.com/api" > .env.production
|
|||
|
```
|
|||
|
|
|||
|
#### 开发环境启动
|
|||
|
```bash
|
|||
|
npm run serve
|
|||
|
```
|
|||
|
|
|||
|
#### 生产环境构建
|
|||
|
```bash
|
|||
|
npm run build
|
|||
|
```
|
|||
|
|
|||
|
#### Nginx配置
|
|||
|
```nginx
|
|||
|
server {
|
|||
|
listen 80;
|
|||
|
server_name your-domain.com;
|
|||
|
root /path/to/frontend/dist;
|
|||
|
index index.html;
|
|||
|
|
|||
|
# 静态资源缓存
|
|||
|
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
|
|||
|
expires 1y;
|
|||
|
add_header Cache-Control "public, immutable";
|
|||
|
}
|
|||
|
|
|||
|
# API代理
|
|||
|
location /api/ {
|
|||
|
proxy_pass http://localhost:8000;
|
|||
|
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;
|
|||
|
}
|
|||
|
|
|||
|
# SPA路由支持
|
|||
|
location / {
|
|||
|
try_files $uri $uri/ /index.html;
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
## 🐳 Docker部署详解
|
|||
|
|
|||
|
### 1. 环境准备
|
|||
|
```bash
|
|||
|
# 安装Docker
|
|||
|
curl -fsSL https://get.docker.com -o get-docker.sh
|
|||
|
sudo sh get-docker.sh
|
|||
|
|
|||
|
# 安装Docker Compose
|
|||
|
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
|||
|
sudo chmod +x /usr/local/bin/docker-compose
|
|||
|
```
|
|||
|
|
|||
|
### 2. 配置文件调整
|
|||
|
```bash
|
|||
|
# 复制并编辑Docker Compose配置
|
|||
|
cp docker-compose.yml docker-compose.prod.yml
|
|||
|
vim docker-compose.prod.yml
|
|||
|
```
|
|||
|
|
|||
|
关键配置项:
|
|||
|
```yaml
|
|||
|
services:
|
|||
|
backend:
|
|||
|
environment:
|
|||
|
- DEBUG=False
|
|||
|
- SECRET_KEY=your-production-secret-key
|
|||
|
- DATABASE_URL=postgresql://user:pass@db:5432/daily_report
|
|||
|
- ALLOWED_HOSTS=your-domain.com
|
|||
|
- CORS_ALLOWED_ORIGINS=https://your-domain.com
|
|||
|
```
|
|||
|
|
|||
|
### 3. SSL证书配置
|
|||
|
```bash
|
|||
|
# 创建SSL目录
|
|||
|
mkdir -p ssl
|
|||
|
|
|||
|
# 使用Let's Encrypt获取证书
|
|||
|
sudo apt install certbot
|
|||
|
sudo certbot certonly --standalone -d your-domain.com
|
|||
|
|
|||
|
# 复制证书到项目目录
|
|||
|
sudo cp /etc/letsencrypt/live/your-domain.com/fullchain.pem ssl/
|
|||
|
sudo cp /etc/letsencrypt/live/your-domain.com/privkey.pem ssl/
|
|||
|
sudo chown -R $USER:$USER ssl/
|
|||
|
```
|
|||
|
|
|||
|
### 4. 启动服务
|
|||
|
```bash
|
|||
|
# 启动所有服务
|
|||
|
docker-compose -f docker-compose.prod.yml up -d
|
|||
|
|
|||
|
# 查看服务状态
|
|||
|
docker-compose ps
|
|||
|
|
|||
|
# 查看日志
|
|||
|
docker-compose logs -f backend
|
|||
|
docker-compose logs -f frontend
|
|||
|
```
|
|||
|
|
|||
|
### 5. 数据备份
|
|||
|
```bash
|
|||
|
# 备份数据库
|
|||
|
docker-compose exec db pg_dump -U daily_report_user daily_report > backup_$(date +%Y%m%d_%H%M%S).sql
|
|||
|
|
|||
|
# 恢复数据库
|
|||
|
docker-compose exec -T db psql -U daily_report_user daily_report < backup.sql
|
|||
|
```
|
|||
|
|
|||
|
## 🔒 安全配置
|
|||
|
|
|||
|
### 1. 防火墙设置
|
|||
|
```bash
|
|||
|
# Ubuntu UFW
|
|||
|
sudo ufw allow ssh
|
|||
|
sudo ufw allow 80/tcp
|
|||
|
sudo ufw allow 443/tcp
|
|||
|
sudo ufw enable
|
|||
|
|
|||
|
# CentOS firewalld
|
|||
|
sudo firewall-cmd --permanent --add-service=ssh
|
|||
|
sudo firewall-cmd --permanent --add-service=http
|
|||
|
sudo firewall-cmd --permanent --add-service=https
|
|||
|
sudo firewall-cmd --reload
|
|||
|
```
|
|||
|
|
|||
|
### 2. SSL/TLS配置
|
|||
|
```bash
|
|||
|
# 自动续期证书
|
|||
|
echo "0 12 * * * /usr/bin/certbot renew --quiet" | sudo crontab -
|
|||
|
```
|
|||
|
|
|||
|
### 3. 数据库安全
|
|||
|
```bash
|
|||
|
# PostgreSQL安全配置
|
|||
|
sudo -u postgres psql
|
|||
|
ALTER USER daily_report_user WITH PASSWORD 'new-strong-password';
|
|||
|
\q
|
|||
|
|
|||
|
# 限制数据库访问
|
|||
|
sudo vim /etc/postgresql/15/main/pg_hba.conf
|
|||
|
# 添加:host daily_report daily_report_user 127.0.0.1/32 md5
|
|||
|
```
|
|||
|
|
|||
|
## 📊 监控和维护
|
|||
|
|
|||
|
### 1. 日志管理
|
|||
|
```bash
|
|||
|
# 查看应用日志
|
|||
|
tail -f /var/log/nginx/access.log
|
|||
|
tail -f /var/log/nginx/error.log
|
|||
|
|
|||
|
# Docker日志
|
|||
|
docker-compose logs -f --tail=100 backend
|
|||
|
docker-compose logs -f --tail=100 frontend
|
|||
|
```
|
|||
|
|
|||
|
### 2. 性能监控
|
|||
|
```bash
|
|||
|
# 安装监控工具
|
|||
|
pip install django-debug-toolbar # 开发环境
|
|||
|
pip install sentry-sdk # 错误监控
|
|||
|
|
|||
|
# 系统监控
|
|||
|
sudo apt install htop iotop nethogs
|
|||
|
```
|
|||
|
|
|||
|
### 3. 备份策略
|
|||
|
```bash
|
|||
|
#!/bin/bash
|
|||
|
# backup.sh - 自动备份脚本
|
|||
|
|
|||
|
DATE=$(date +%Y%m%d_%H%M%S)
|
|||
|
BACKUP_DIR="/backup/daily_report"
|
|||
|
|
|||
|
# 创建备份目录
|
|||
|
mkdir -p $BACKUP_DIR
|
|||
|
|
|||
|
# 备份数据库
|
|||
|
docker-compose exec -T db pg_dump -U daily_report_user daily_report > $BACKUP_DIR/db_$DATE.sql
|
|||
|
|
|||
|
# 备份媒体文件
|
|||
|
tar -czf $BACKUP_DIR/media_$DATE.tar.gz backend/media/
|
|||
|
|
|||
|
# 清理7天前的备份
|
|||
|
find $BACKUP_DIR -name "*.sql" -mtime +7 -delete
|
|||
|
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
|
|||
|
|
|||
|
echo "Backup completed: $DATE"
|
|||
|
```
|
|||
|
|
|||
|
### 4. 自动更新
|
|||
|
```bash
|
|||
|
#!/bin/bash
|
|||
|
# update.sh - 自动更新脚本
|
|||
|
|
|||
|
# 拉取最新代码
|
|||
|
git pull origin main
|
|||
|
|
|||
|
# 更新后端
|
|||
|
cd backend
|
|||
|
pip install -r requirements.txt
|
|||
|
python manage.py migrate
|
|||
|
python manage.py collectstatic --noinput
|
|||
|
|
|||
|
# 更新前端
|
|||
|
cd ../frontend
|
|||
|
npm install
|
|||
|
npm run build
|
|||
|
|
|||
|
# 重启服务
|
|||
|
docker-compose restart backend frontend
|
|||
|
|
|||
|
echo "Update completed"
|
|||
|
```
|
|||
|
|
|||
|
## 🚨 故障排除
|
|||
|
|
|||
|
### 常见问题
|
|||
|
|
|||
|
#### 1. 后端启动失败
|
|||
|
```bash
|
|||
|
# 检查日志
|
|||
|
python manage.py check
|
|||
|
python manage.py runserver --traceback
|
|||
|
|
|||
|
# 检查数据库连接
|
|||
|
python manage.py dbshell
|
|||
|
```
|
|||
|
|
|||
|
#### 2. 前端构建失败
|
|||
|
```bash
|
|||
|
# 清理缓存
|
|||
|
npm cache clean --force
|
|||
|
rm -rf node_modules package-lock.json
|
|||
|
npm install
|
|||
|
|
|||
|
# 检查Node.js版本
|
|||
|
node --version
|
|||
|
npm --version
|
|||
|
```
|
|||
|
|
|||
|
#### 3. Docker服务异常
|
|||
|
```bash
|
|||
|
# 查看容器状态
|
|||
|
docker ps -a
|
|||
|
|
|||
|
# 查看容器日志
|
|||
|
docker logs daily_report_backend
|
|||
|
docker logs daily_report_frontend
|
|||
|
|
|||
|
# 重启服务
|
|||
|
docker-compose restart
|
|||
|
```
|
|||
|
|
|||
|
#### 4. 数据库连接问题
|
|||
|
```bash
|
|||
|
# 检查数据库状态
|
|||
|
sudo systemctl status postgresql
|
|||
|
|
|||
|
# 检查连接
|
|||
|
psql -h localhost -U daily_report_user -d daily_report
|
|||
|
|
|||
|
# 重置数据库
|
|||
|
python manage.py flush
|
|||
|
python manage.py migrate
|
|||
|
```
|
|||
|
|
|||
|
### 性能优化
|
|||
|
|
|||
|
#### 1. 数据库优化
|
|||
|
```sql
|
|||
|
-- 创建索引
|
|||
|
CREATE INDEX idx_daily_report_date ON daily_report_dailyreport(report_date);
|
|||
|
CREATE INDEX idx_daily_report_user ON daily_report_dailyreport(user_id);
|
|||
|
CREATE INDEX idx_daily_report_created ON daily_report_dailyreport(created_at);
|
|||
|
|
|||
|
-- 分析查询性能
|
|||
|
EXPLAIN ANALYZE SELECT * FROM daily_report_dailyreport WHERE report_date >= '2024-01-01';
|
|||
|
```
|
|||
|
|
|||
|
#### 2. 缓存配置
|
|||
|
```python
|
|||
|
# settings.py
|
|||
|
CACHES = {
|
|||
|
'default': {
|
|||
|
'BACKEND': 'django_redis.cache.RedisCache',
|
|||
|
'LOCATION': 'redis://127.0.0.1:6379/1',
|
|||
|
'OPTIONS': {
|
|||
|
'CLIENT_CLASS': 'django_redis.client.DefaultClient',
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
#### 3. 静态文件优化
|
|||
|
```bash
|
|||
|
# 启用Gzip压缩
|
|||
|
# 配置CDN
|
|||
|
# 使用WebP图片格式
|
|||
|
```
|
|||
|
|
|||
|
## 📞 技术支持
|
|||
|
|
|||
|
如果在部署过程中遇到问题:
|
|||
|
|
|||
|
1. 查看 [README.md](README.md) 了解基本信息
|
|||
|
2. 检查 [CHANGELOG.md](CHANGELOG.md) 查看更新记录
|
|||
|
3. 提交 GitHub Issue
|
|||
|
4. 联系技术支持团队
|
|||
|
|
|||
|
---
|
|||
|
|
|||
|
🎉 祝您部署成功!如有问题,欢迎反馈。
|