# 部署指南 本文档提供了企业级日报系统的详细部署指南,包括开发环境、生产环境和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. 联系技术支持团队 --- 🎉 祝您部署成功!如有问题,欢迎反馈。