插件窝 干货文章 centos+nginx+uwsgi部署django项目上线的方法

centos+nginx+uwsgi部署django项目上线的方法

myproject uWSGI Nginx 配置 378    来源:    2025-04-25

CentOS + Nginx + uWSGI 部署 Django 项目完整指南

1. 准备工作

1.1 系统环境要求

  • CentOS 7/8
  • Python 3.6+ (推荐使用Python 3.8+)
  • Django 2.2+
  • Nginx
  • uWSGI

1.2 安装必要软件包

sudo yum update -y
sudo yum install -y epel-release
sudo yum install -y python3 python3-devel gcc nginx

2. 创建Python虚拟环境

sudo pip3 install virtualenv
mkdir ~/myproject
cd ~/myproject
python3 -m venv myenv
source myenv/bin/activate

3. 安装Django和uWSGI

pip install django uwsgi

4. 配置Django项目

4.1 基本设置

确保在settings.py中设置以下内容:

DEBUG = False

ALLOWED_HOSTS = ['yourdomain.com', 'localhost', '127.0.0.1']

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

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

4.2 收集静态文件

python manage.py collectstatic

5. 配置uWSGI

5.1 创建uWSGI配置文件

在项目目录下创建myproject_uwsgi.ini

[uwsgi]
project = myproject
base = /home/username/myproject

chdir = %(base)
home = %(base)/myenv
module = %(project).wsgi:application

master = true
processes = 5

socket = %(base)/%(project).sock
chmod-socket = 660
vacuum = true

logto = %(base)/uwsgi.log

5.2 测试uWSGI配置

uwsgi --ini myproject_uwsgi.ini

6. 配置Nginx

6.1 创建Nginx配置文件

/etc/nginx/conf.d/下创建myproject.conf

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;

    location = /favicon.ico { access_log off; log_not_found off; }

    location /static/ {
        root /home/username/myproject;
    }

    location /media/ {
        root /home/username/myproject;
    }

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/home/username/myproject/myproject.sock;
    }
}

6.2 测试并重启Nginx

sudo nginx -t
sudo systemctl restart nginx

7. 设置uWSGI为系统服务

7.1 创建systemd服务文件

创建/etc/systemd/system/myproject.service

[Unit]
Description=uWSGI instance to serve myproject
After=network.target

[Service]
User=username
Group=nginx
WorkingDirectory=/home/username/myproject
Environment="PATH=/home/username/myproject/myenv/bin"
ExecStart=/home/username/myproject/myenv/bin/uwsgi --ini myproject_uwsgi.ini

[Install]
WantedBy=multi-user.target

7.2 启动并启用服务

sudo systemctl start myproject
sudo systemctl enable myproject

8. 防火墙设置

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

9. 验证部署

访问你的域名或服务器IP,应该能看到Django应用正常运行。

10. 常见问题解决

10.1 502 Bad Gateway错误

  • 检查uWSGI服务是否运行:sudo systemctl status myproject
  • 检查socket文件权限是否正确
  • 查看uWSGI日志:cat /home/username/myproject/uwsgi.log

10.2 静态文件不加载

  • 确保执行了collectstatic
  • 检查Nginx配置中的静态文件路径是否正确
  • 确保静态文件目录有正确的权限

10.3 数据库连接问题

  • 检查数据库服务是否运行
  • 验证Django设置中的数据库配置
  • 确保数据库用户有正确的权限

11. 高级配置

11.1 使用HTTPS

可以使用Let's Encrypt免费证书:

sudo yum install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

11.2 性能调优

  • 调整uWSGI的processesthreads参数
  • 配置Nginx缓存
  • 启用Gzip压缩

通过以上步骤,你的Django应用应该已经成功部署在CentOS服务器上,并通过Nginx和uWSGI提供服务。