Files
central-task/DEPLOYMENT.md
2025-12-05 14:37:43 +08:00

6.7 KiB
Raw Permalink Blame History

Ubuntu部署方案Nginx + Gunicorn

本文档详细说明如何在Ubuntu服务器上部署任务中心管理系统使用Nginx作为反向代理Gunicorn作为WSGI服务器并将服务注册为系统服务。

环境要求

  • Ubuntu 20.04+
  • Python 3.8+
  • Nginx 1.18+
  • Gunicorn 20.0+

1. 服务器准备

1.1 系统更新

sudo apt update && sudo apt upgrade -y

1.2 安装必要依赖

sudo apt install -y python3-pip python3-venv python3-dev \
    build-essential libpq-dev nginx \
    git curl wget

2. 项目部署

2.1 创建项目目录

sudo mkdir -p /var/www/task_center
cd /var/www/task_center

2.2 克隆项目

git clone <repository-url> .

2.3 创建虚拟环境

python3 -m venv venv
source venv/bin/activate

2.4 安装项目依赖

pip install --upgrade pip
pip install -r requirements.txt

如果没有requirements.txt文件

pip install django djangorestframework gunicorn

2.5 配置环境变量

创建.env文件

cat > .env << EOF
SECRET_KEY=your-secret-key
DEBUG=False
ALLOWED_HOSTS=your-domain.com,www.your-domain.com
DATABASE_URL=sqlite:///db.sqlite3
EOF

2.6 配置Django设置

修改task_center/settings.py

# 从.env文件加载配置
import os
from dotenv import load_dotenv

load_dotenv()

SECRET_KEY = os.getenv('SECRET_KEY')
DEBUG = os.getenv('DEBUG') == 'True'
ALLOWED_HOSTS = os.getenv('ALLOWED_HOSTS').split(',')

安装python-dotenv

pip install python-dotenv

2.7 初始化数据库

python manage.py makemigrations
python manage.py migrate

2.8 创建超级用户

python manage.py createsuperuser

2.9 收集静态文件

python manage.py collectstatic

3. Gunicorn配置

3.1 测试Gunicorn

cd /var/www/task_center
venv/bin/gunicorn --bind 0.0.0.0:8000 task_center.wsgi:application

访问 http://your-server-ip:8000 测试是否正常运行然后按Ctrl+C停止。

3.2 创建Gunicorn服务文件

sudo nano /etc/systemd/system/task_center.service

配置内容:

[Unit]
Description=Gunicorn instance to serve task_center
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/task_center
Environment="PATH=/var/www/task_center/venv/bin"
ExecStart=/var/www/task_center/venv/bin/gunicorn --workers 3 --bind unix:/var/www/task_center/task_center.sock task_center.wsgi:application

[Install]
WantedBy=multi-user.target

3.3 启动和启用Gunicorn服务

sudo systemctl start task_center
sudo systemctl enable task_center

3.4 检查Gunicorn服务状态

sudo systemctl status task_center

4. Nginx配置

4.1 创建Nginx配置文件

sudo nano /etc/nginx/sites-available/task_center

配置内容:

server {
    listen 80;
    server_name your-domain.com www.your-domain.com;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /var/www/task_center;
    }

    location /media/ {
        root /var/www/task_center;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/var/www/task_center/task_center.sock;
    }
}

4.2 启用Nginx配置

sudo ln -s /etc/nginx/sites-available/task_center /etc/nginx/sites-enabled/

4.3 测试Nginx配置

sudo nginx -t

4.4 重启Nginx服务

sudo systemctl restart nginx

4.5 配置防火墙

sudo ufw allow 'Nginx Full'
sudo ufw allow ssh
sudo ufw enable

5. SSL证书配置可选

5.1 安装Certbot

sudo apt install -y certbot python3-certbot-nginx

5.2 获取SSL证书

sudo certbot --nginx -d your-domain.com -d www.your-domain.com

5.3 自动更新证书

sudo systemctl status certbot.timer

6. 配置媒体文件权限

sudo chown -R www-data:www-data /var/www/task_center/media
sudo chmod -R 755 /var/www/task_center/media

7. 配置定时任务

7.1 添加任务超时检查命令

sudo crontab -e

添加以下内容(每小时执行一次):

0 * * * * cd /var/www/task_center && /var/www/task_center/venv/bin/python manage.py check_task_timeouts

8. 监控和维护

8.1 查看Gunicorn日志

sudo journalctl -u task_center

8.2 查看Nginx日志

sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log

8.3 重启服务

sudo systemctl restart task_center
sudo systemctl restart nginx

8.4 部署更新

cd /var/www/task_center
git pull
source venv/bin/activate
pip install -r requirements.txt
python manage.py migrate
python manage.py collectstatic --noinput
deactivate
sudo systemctl restart task_center
sudo systemctl restart nginx

9. 常见问题排查

9.1 502 Bad Gateway

  • 检查Gunicorn服务状态sudo systemctl status task_center
  • 检查socket文件权限ls -l /var/www/task_center/task_center.sock
  • 确保www-data用户有访问权限

9.2 静态文件404

  • 检查STATIC_ROOT配置
  • 确保执行了collectstatic命令
  • 检查Nginx静态文件路径配置

9.3 媒体文件上传失败

  • 检查媒体文件目录权限
  • 确保www-data用户有写入权限

10. 系统架构

用户请求 → Nginx (80/443) → Gunicorn (Unix Socket) → Django应用
                                 ↓
                         静态文件 → Nginx直接服务
                                 ↓
                         媒体文件 → Nginx直接服务

11. 性能优化建议

  1. Gunicorn工作进程根据CPU核心数调整workers数量建议为 CPU核心数 * 2 + 1
  2. 数据库优化生产环境建议使用PostgreSQL
  3. 缓存配置使用Redis或Memcached缓存
  4. 文件存储使用云存储如S3存储媒体文件
  5. 监控系统添加Prometheus + Grafana监控
  6. 日志管理配置ELK Stack或其他日志管理系统

12. 安全建议

  1. 定期更新系统和依赖
  2. 使用强密码
  3. 配置防火墙
  4. 启用HTTPS
  5. 限制SSH访问
  6. 定期备份数据库
  7. 使用最小权限原则

访问地址

总结

本部署方案已完成以下内容:

  1. 系统环境配置
  2. 项目部署和依赖安装
  3. Gunicorn服务配置和注册
  4. Nginx反向代理配置
  5. SSL证书配置可选
  6. 定时任务配置
  7. 监控和维护指南

任务中心管理系统已成功部署在Ubuntu服务器上可以通过域名访问和使用。