uWSGI部署Django项目

本文详述了如何使用uWSGI和Nginx部署Django项目,包括虚拟环境搭建、uWSGI配置与测试、Django项目的uwsgi.ini配置以及Nginx配置文件的创建与连接。通过解决Python版本问题和配置文件的调整,最终实现项目成功运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、准备工作:

1,搭建虚拟环境,使用virtualenv,没有安装的需要安装

$ apt-get install virtualenv  # 安装

创建虚拟环境:

$ virtualenv webvenv  # 虚拟环境名为webvenv


启动虚拟环境(注意:如果切换目录的话,webvenv前需要加相对路径):

$ source webvenv/bin/activate

2,虚拟环境内安装uWSGI,

(webvenv)$ pip install uwsgi

3,虚拟环境安装Django,

(webvenv)$ pip install django

4,安装Nginx

$ apt-get install nginx

5,Django项目结构

mysite

├── db.sqlite3
├── manage.py
├── mysite
│   ├── __init__.py
│   ├── __pycache__
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── polls
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── __pycache__
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── test.py
└── uwsgi.ini
test.py为创建的测试文件,uwsgi.ini是创建的配置文件,下面会说。

二、配置uwsgi

测试uwsgi;项目根目录下创建test.py文件,内容如下;

# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return "Hello World"

在mysite文件夹下,运行:

(webvenv)mysite $ uwsgi --http 127.0.0.1:9090 --wsgi-file test.py 

打开浏览器,输入127.0.0.1:9090,如果出现hello world,则证明uWSGI安装成功!

部署Django:

 

 运行 uwsgi,

uwsgi --http 127.0.0.1:9090 --wsgi-file mysite/wsgi.py

 报错,No module named django.core.wsgi,

 

搜索了多个博客文章,试了几种方案全部失败,和我遇到的场景不同,退出虚拟环境,运行成功,进入虚拟环境,依然失败,逐步排后发现问题,是虚拟环境中python版本的问题,python2没有安装Django,无法导入模块,python3可以,而创建虚拟环境时,默认安装python2版本,

重新创建虚拟环境,创建时指定python3版本, 进入新的虚拟环境,

$ virtualenv -p /usr/bin/python3 webvenvs

重新运行uwsgi --http 127.0.0.1:9090 --wsgi-file mysite/wsgi.py 命令,成功!

(注意:如果使用root用户运行命令,会有警告信息)

Ctrl + C 停止uwsgi服务,(如果是后台启动,有配置pidfile选项,可以用uwsgi --stop uwsgi.pid来停止服务,

没有配置pidfile,可以kill进程停止服务:pkill -f uwsgi -9

配置uwsgi.ini,使用配置文件启动uwsgi服务

项目根目录下创建uwsgi.ini文件

[uwsgi]  # 这个一定不能少哦,否则会一直警告:WARNING: Can't find section "uwsgi" in INI configuration file uwsgi.ini

socket =  :8080
# 端口(使用nginx连接时,使用socket,直接做web服务器,使用http)
#http=127.0.0.1:8081

# 项目目录
chdir = /home/dongdong/mysite/

# 指定项目的application
module = mysite.wsgi

# 启用主进程
master=true

# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true

# 序列化接受的内容,如果可能的话
thunder-lock=true

# 设置启动用户
uid=xxx

# 进程数
processes=4

# 线程
threads=2

# pidfile文件
#pidfile=%(chdir)uwsgi.pid

# 记录日志
#daemonize=%(chdir)uswgi.log

只保留了关键的配置,其他的可以后期再添加。

进入mysite文件夹,执行命令

uwsgi  --ini uwsgi.ini 

启动成功(这时候我的Nginx也是处于启动状态的,如果和我的有些不同的话,要自行对照了,配置里开启日志记录后,这些启动信息会记录在日志里,不会打印到终端了) 

 

三、配置Nginx文件

进入/etc/nginx/目录下,复制uwsgi_params文件到mysite目录下,

在mysite文件夹下创建配置文件,mysite_nginx.conf,内容如下

server {
    # the port your site will be served on
    listen      8099;
    # the domain name it will serve for
    server_name 127.0.0.1; # substitute your machine's IP address or FQDN
    charset     utf-8;

    root /var/www/example;

    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8080;
        uwsgi_read_timeout 2;
}
    # Django media
#    location /media  {
#        alias /home/dongdong/mysite/media;  # your Django project's media files - amend as required
#    }
# 
    location /static {
        expires 30d;
        autoindex on; 
        add_header Cache-Control private;
        alias /home/dongdong/mysite/static; # your Django project's static files - amend as required
    }
}

使用了自定义的配置文件,就不用配置Nginx.conf文件了,

创建软连接,把自定义的配置文件,添加到/etc/nginx/sites-enabled/文件夹下

ln -s /home/dongdong/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/

此处有个坑,要使用绝对路径,否则会报错,还要删除默认的default软连接,否则配置会冲突

启动Nginx:

sudo /usr/sbin/nginx

查看版本:

sudo sbin/nginx -v

重新启动Nginx命令:

sudo /usr/sbin/nginx -s reload

停止Nginx命令:

sudo sbin/nginx -s stop

浏览器访问127.0.0.1:8099(注意:如果Django项目配置了路由的话,要加上)

 完成时的项目结构:

mysite

├── db.sqlite3
├── index.html
├── manage.py
├── media
├── mysite
│   ├── __init__.py
│   ├── __pycache__
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── mysite_nginx.conf
├── polls
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── __pycache__
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── static
├── templates
├── test.py
├── uwsgi.ini
└── uwsgi_params

成功,可以根据需要,去添加更多功能的配置了。(我是部署成功后才回头做的总结,有些地方可能写的不够详细,如有疑问,可以留言交流)

参考资料: 通过Nginx部署Django(基于ubuntu)  (这篇文章给我很多帮助,几个不理解的配置看了文章才明白)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值