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

基于ubuntu如何通过Nginx部署Django

Gunicorn project Nginx Django 493    来源:    2025-04-26

在Ubuntu上通过Nginx部署Django应用

下面是一个完整的指南,介绍如何在Ubuntu系统上使用Nginx和Gunicorn部署Django应用。

前提条件

  • Ubuntu服务器(18.04/20.04/22.04)
  • 已安装Python和pip
  • 已安装Django项目
  • 服务器SSH访问权限
  • 域名(可选)

1. 安装必要组件

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

2. 创建Python虚拟环境

cd /path/to/your/django/project
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt  # 如果有requirements.txt
pip install django gunicorn

3. 配置Gunicorn

测试Gunicorn

gunicorn --bind 0.0.0.0:8000 your_project.wsgi:application

如果一切正常,你应该能够通过http://your-server-ip:8000访问你的Django应用。

创建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.com www.your_domain.com;  # 如果没有域名,使用服务器IP

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        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中:

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

然后运行:

python manage.py collectstatic

6. 防火墙设置(如果启用)

sudo ufw allow 'Nginx Full'

7. 完成

现在你应该可以通过服务器的IP地址或配置的域名访问你的Django应用了。

常见问题解决

  1. 502 Bad Gateway错误

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

    • 确保STATIC_ROOT设置正确
    • 确保Nginx配置中的静态文件路径正确
    • 确保运行了collectstatic命令
  3. 权限问题

    • 确保Nginx用户(www-data)有项目目录的读取权限
    • 可能需要:sudo chown -R www-data:www-data /path/to/your/project

如需HTTPS支持,可以考虑使用Let's Encrypt和Certbot配置SSL证书。