插件窝 干货文章 基于ubuntu怎么通过Nginx部署Django

基于ubuntu怎么通过Nginx部署Django

gunicorn Nginx project Django 620    来源:    2025-04-24

在Ubuntu上通过Nginx部署Django的完整指南

前提条件

  • 运行Ubuntu的服务器(18.04/20.04/22.04均可)
  • 已安装Python和Django项目
  • 服务器上的sudo权限

部署步骤

1. 安装必要软件包

sudo apt update
sudo apt install nginx python3-pip python3-venv

2. 设置Python虚拟环境

# 进入你的Django项目目录
cd /path/to/your/django/project

# 创建虚拟环境
python3 -m venv venv

# 激活虚拟环境
source venv/bin/activate

# 安装项目依赖
pip install -r requirements.txt
pip install gunicorn  # 如果requirements.txt中没有

3. 配置Gunicorn

创建Gunicorn服务文件:

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

添加以下内容(根据你的项目调整路径):

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=your_username
Group=www-data
WorkingDirectory=/path/to/your/django/project
ExecStart=/path/to/your/django/project/venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/path/to/your/django/project/project.sock your_project.wsgi:application

[Install]
WantedBy=multi-user.target

启动并启用Gunicorn服务:

sudo systemctl start gunicorn
sudo systemctl enable gunicorn

4. 配置Nginx

创建Nginx配置文件:

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

添加以下配置(根据实际情况修改):

server {
    listen 80;
    server_name your_domain_or_IP;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /path/to/your/django/project;
    }

    location /media/ {
        root /path/to/your/django/project;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/path/to/your/django/project/project.sock;
    }
}

启用配置并测试Nginx:

sudo ln -s /etc/nginx/sites-available/your_project /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx

5. 配置Django设置

确保settings.py中有以下配置:

DEBUG = False

ALLOWED_HOSTS = ['your_domain_or_IP', 'localhost']

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')

收集静态文件:

python manage.py collectstatic

6. 防火墙设置(如有需要)

sudo ufw allow 'Nginx Full'

常见问题解决

  1. 502 Bad Gateway错误

    • 检查Gunicorn是否运行:sudo systemctl status gunicorn
    • 检查socket文件权限
    • 查看日志:sudo journalctl -u gunicorn
  2. 静态文件无法加载

    • 确保STATIC_ROOT设置正确
    • 确认Nginx有权限访问静态文件目录
    • 运行collectstatic命令后重启Nginx
  3. 权限问题

    sudo chown -R www-data:www-data /path/to/your/django/project
    sudo chmod -R 755 /path/to/your/django/project
    

后续维护

  • 更新代码后需要重启Gunicorn:sudo systemctl restart gunicorn
  • 查看Nginx错误日志:sudo tail -f /var/log/nginx/error.log
  • 查看Gunicorn日志:sudo journalctl -u gunicorn

这样你的Django项目就应该通过Nginx成功部署了!