nginx+uwsgi部署Django项目

本文详细介绍了如何部署Django项目,包括创建Django工程并测试、安装uWSGI及测试、安装Nginx、配置Nginx与uWSGI的连接,并最终实现通过Nginx+uWSGI运行Django项目的过程。

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

首先要明白整个部署过程的核心,请看下图
在这里插入图片描述

  • 发起请求者发送http等协议的请求到nginx服务器
  • nginx服务器判断是静态资源请求还是动态请求,静态请求直接将静态文件数据发给请求端
  • 动态请求会传给uwsgi服务器,uwsgi服务器在将请求以wsgi协议发给django项目的app处理请求,最后将数据返回给上一端

创建Django工程并测试

我的工程就建在了 /home/pi/Videos/ 目录下
  1. 创建工程django-admin startproject myweb

  2. 测试工程

    python manage.py migrate
    python manage.py runserver 8000

  3. 访问http://192.168.123.209:8000看页面显示是否成功

安装uwsgi并测试

  1. pip安装uwsgi pip install uwsgi
  2. 测试
    新建test.py文件并写入
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"] # python3
    #return ["Hello World"] # python2
运行uwsgi:
(这段命令的意思是 使用http协议 端口为8000 加载指定的wsgi文件 tset.py)

uwsgi --http :8000 --wsgi-file test.py
成功的话会得到hello world

安装nginx,配置并测试

1.安装nginx sudo apt-get install nginx
2. 启动nginx sudo /etc/init.d/nginx start
3.测试 访问http://192.168.123.209/ 显示成功安装页面
4.确保你的nginx目录里面有uwsgi_params文件,(我的就有)没有的话新建文件uwsgi_params这里 将内容复制到文件里,并将其放到nginx安装目录(即/etc/nignx/uwsgi_params)
5.创建myweb_nginx.conf文件写入以下内容:


# the upstream component nginx needs to connect to
upstream django {
    # server unix:///path/to/your/mysite/mysite.sock; 
    server 127.0.0.1:8001; 
}

# server配置
server {
    # web站点端口
    listen      8000;
    server_name 192.168.123.209;
    charset     utf-8;
    
    client_max_body_size 75M;   

    location /media  {
        alias /path/to/your/mysite/media;  # 媒体文件路径
    }

    location /static {
        alias /home/pi/Videos/myweb/static; # 静态文件路径
    }

    location / {
        uwsgi_pass  django;
        include     /etc/nginx/uwsgi_params; # uwsgi_params 文件路径
    }
}

6.最后将这个文件链接到/etc/nginx/sites-enabled
sudo ln -s ~/home/pi/Videos/myweb/myweb_nginx.conf /etc/nginx/sites-enabled/
7.在django项目设置里面(myweb/settings.py中添加)设置静态文件部署

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

回到项目根目录执行命令python manage.py collectstatic
8.重启nginxsudo /etc/init.d/nginx restart

nginx+uwsgi连接并测试

1.nginx+uwsgi+test.py
uwsgi --socket :8001 --wsgi-file test.py

访问http://192.168.123.209:8000/ 会出现hello world
解释:使用uwsgi协议端口为8001
事实上使用Unix socket会比端口更好(开销更少)所以我们选择使用Unix socket

  • 编辑myweb_nginx.conf
  • 将下面这段改为
upstream django {
    server unix:///home/pi/Videos/myweb/myweb.sock; 
    # server 127.0.0.1:8001; 
}

修改之后重启nginx,再次运行uwsgi
uwsgi --socket myweb.sock --wsgi-file test.py --chmod-socket=666
解释:加上权限,不然报错

2.uwsgi+nginx+django项目

这里我们只需要使用以下命令运行即可
uwsgi --socket myweb.sock --module myweb.wsgi --chmod-socket=666

3.更方便的运行django项目

使用很长的命令实在是太不方便了,这里我们只需要将创建一个uwsgi配置文件,运行时用这个配置文件会更好
创建myweb_uwsgi.ini文件

[uwsgi]
#绝对路径
chdir = /home/pi/Videos/myweb

#django wsgi 文件
module = myweb.wsgi


#进程设置
master = true
#最大工作进程数
processes = 10

#socket
socket = /home/pi/Videos/myweb/myweb.socket

#权限
chmod-socket = 666

运行uwsgi配置文件来运行整个项目

uwsgi --ini myweb_uwsgi.ini

运行项目

经过以上操作只需运行uwsgi --ini myweb_uwsgi.ini即可运行django项目了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值