Linux下Nginx+uwsgi部署Django项目

Linux下Nginx+uwsgi部署Django项目

前言

Hey,大家好呀,我是码农,星期八!

通常情况下,要求不是太苛刻的,不是鸡蛋里挑骨头的需求,为了快和方便

使用Pythonweb框架Django是一个不错的选择

但是默认情况下,直接跑性能是很差的!需要借助其他方式,提高性能!

一般在Linux系统下,采用的方式为Nginx+uwsgi+Django

项目

项目已经放在了gitee上!

备份的sql文件也在上面,导入即可!

gitee地址:https://gitee.com/stark3000/luffy_crm

环境依赖

# 采用miniconda创建python环境
# conda版本为:4.8.3
# 创建的python虚拟环境版本为:python 3.6.6
# 依赖包
PyMySQL==0.9.2
Django==2.1.5

注意事项

Django在部署时,一定要修改settings.py里的俩个参数。

在这里插入图片描述

还有Mysql配置!

在这里插入图片描述

Nginx Django静态文件配置

前奏

开发情况下,我们所用到的静态文件

是可以放在每个appstatic文件夹下

项目
	app01
		static
	app02
		static
	app03
		static

但是在部署时,可不能这么玩,因为通常在只让Ngxin指定一个静态资源目录

如果在指向每个app下的static,那就太累了,而且不确定性太多!

所以,需要有一个什么办法,能将所用到的静态资源自动的收录到一个静态目录,然后Nginx直接指向它就行

配置settings.py,添加以下参数!

配置

STATIC_URL = '/static/'
# 必须的
STATIC_ROOT = os.path.join(BASE_DIR, "static")
# 不是必须的,不写就行
# STATICFILES_DIRS = (
#     os.path.join(BASE_DIR, 'static'),
# )

截图

在这里插入图片描述

别忘了在项目根目录下创建一个static文件夹!

在这里插入图片描述

迁移静态文件

还好Django提供有自动迁移命令,会将用到的静态文件自动迁移到<项目>/static下!

命令

python manage.py collectstatic

执行结果

在这里插入图片描述

<项目>/static图

在这里插入图片描述

小总结

开发的时候开启debug调试模式,每个应用app的静态文件放在各自的app目录下

部署的时候关闭debug调试模式,使用Nginx访问静态文件,但是需要提前迁移静态文件

服务端拉取项目,并且测试运行

拉取项目

git clone https://gitee.com/stark3000/luffy_crm.git

在这里插入图片描述

测试运行

python manage.py  runserver 0.0.0.0:8000

在这里插入图片描述

访问

http://42.192.79.238:8000/login/ # 登录
账号:日天,密码:123
登录后自动跳转http://42.192.79.238:8080/index/

截图

在这里插入图片描述

出现这个表示成功,目前只是没静态文件,问题不大,因为DEBUF=False

注意事项

我采用的是使用conda创建虚拟环境,,并且安装的依赖包。

如何将项目安装依赖包,如何运行,这里不作详细举例!

使用uwsgi

安装

pip install uwsgi

查看uwsgi版本

uwsgi --version

图片

在这里插入图片描述

测试uwsgi是否成功

新建一个uwsgi_test.py文件,并且内容如下

def application(env,start_response):
    start_response('200 OK',[('Content-Type','text/html')])
    return [b"hello,uwsgi"]

执行命令

uwsgi --http :8001 --wsgi-file uwsgi_test.py

执行结果

在这里插入图片描述

游览器访问http://42.192.79.238:8001/

在这里插入图片描述

返回这个表示ok,代表uwsgi问题不大!

uwsgi+Django

测试uwsgi成功之后。

那就需要想如何先把uwsgi+Django组合拳打好。

首先,在需要部署的Django项目目录下,就是和manage.py的那个目录。

新建一个uwsgi_config文件夹,用于存放uwsgi相关配置和运行日志。

在这里插入图片描述

然后cd uwsgi_config

uwsgi.ini

然后在uwsgi_config文件夹下创建一个uwsgi.ini文件,内容如下!

[uwsgi]
# 指定IP端口,ip为内网ip,如果是云服务器,是云服务器内网ip
# http可以直接访问,socket是让Nginx指定的
http = 172.17.0.3:8080
# 项目目录,和manage.py同级的目录
chdir = /root/web_project/luffy_crm
# 启动主进程,来管理其他进程
# 其它的uwsgi进程都是这个master进程的子进程
# 如果kill这个master进程,相当于重启所有的uwsgi进程
master = true
# 加载一个WSGI模块,这里加载wsgi.py这个模块
# 通常是在<django项目>/<和项目同名文件夹>/wsgi.py
# 但是如果chdir指定了项目绝对路径,只需要写<和项目同名文件夹>/wsgi.py
module = luffy_crm.wsgi
# 启动多少个进程,和核心数一样就行
processes = 1
# 每个进程最大的请求数
max_requests = 1000
# 运行的日志,通常放在 uwsgi_config 下
daemonize = /root/web_project/luffy_crm/uwsgi_config/run.log
## 自动移除unix Socket和pid文件当服务停止的时候
vacuum = true
# 如果使用的是虚拟环境, 需要指定 pythonpath
# 如果是激活的是虚拟环境,使用命令:pip show django|grep -i location 即可得到
pythonpath = /root/miniconda/envs/luffy_crm/lib/python3.6/site-packages
# 指定pid文件,用于重启和停止,通常放在 uwsgi_config 下
pidfile = /root/web_project/luffy_crm/uwsgi_config/uwsgi.pid
# 启用线程
enable-threads = true
#设置在平滑的重启(直到接收到的请求处理完才重启)一个工作子进程中,
# 等待这个工作结束的最长秒数。这个配置会使在平滑地重启工作子进程中,
# 如果工作进程结束时间超过了8秒就会被强行结束(忽略之前已经接收到的请求而直接结束)
reload-mercy = 8

参数注意事项

http 或 socket参数

第三行参数的可以是socket,也可以是http

如果只是测试uwsgi+django是否成功,可以先设置成http

如果是Nginx+uwsgi+Django,尽可能将第三行参数改成socket,好像性能更高!

上述是http,在Nginx+uwsgi时,会修改成socket,不在叙述!

ip注意事项

如果是阿里云或者腾讯云等云服务器。

第三行参数ip设置是不能设置127.0.0.1的,127.0.0.1应该替换成云服务器的内网ip。

不建议设置成0.0.0.0,可能会有风险。

在这里插入图片描述

pythonpath 参数

现在在部署时,一般采用的是虚拟环境进行环境隔离

这时候uwsgi.ini是需要指定pythonpath的。

要不然使用的是系统默认的python解释器,会有各种各样的问题。

如果需要获取当前激活的虚拟环境pythonpath

命令

pip show django|grep -i location

结果

Location就是pythonpath的值。

在这里插入图片描述

uwsgi启动项目

经过上述配置,如果不是玄学的话,是可以启动的。

uwsgi通过uwsgi.ini启动Django项目命令

uwsgi --ini uwsgi.ini

执行结果

出现这表示成功!

在这里插入图片描述

查看日志

ini文件是配置了日志的,注意看!

在这里插入图片描述

这样,表示成功!

验证

打开游览器,输入http://42.192.79.238:8080/index/

在这里插入图片描述

ok,没有问题!

uwsgi启动,重启,停止

# 启动
uwsgi --ini uwsgi.ini
# 重启
uwsgi --reload uwsgi.pid
# 停止
uwsgi --stop uwsgi.pid
# 停止 kill方式,硬核停,然后再启动
sudo pkill -f uwsgi -9

小总结

其实还是可以发现,还是没有静态文件

这其实很正常,uwsgi并没有处理静态文件的能力,即使能是实现,能力也不是太好!

通过上述方式,成功的启动了将uwsgi+Django组合拳打好!

下一步就要开始Nginx+uwsgi+Django

Nginx+uwsgi+Django

安装Nginx

安装不做叙述,我是用的是phpstudy集成环境安装的Nginx。

使用的是Nginx1.9版本!

配置uwsgi_params

创建一个uwsgi_params文件,还是放在uwsgi_config文件夹下,内容如下!

固定内容,不用管它!

uwsgi_param  QUERY_STRING       $query_string;
uwsgi_param  REQUEST_METHOD     $request_method;
uwsgi_param  CONTENT_TYPE       $content_type;
uwsgi_param  CONTENT_LENGTH     $content_length;

uwsgi_param  REQUEST_URI        $request_uri;
uwsgi_param  PATH_INFO          $document_uri;
uwsgi_param  DOCUMENT_ROOT      $document_root;
uwsgi_param  SERVER_PROTOCOL    $server_protocol;
uwsgi_param  REQUEST_SCHEME     $scheme;
uwsgi_param  HTTPS              $https if_not_empty;

uwsgi_param  REMOTE_ADDR        $remote_addr;
uwsgi_param  REMOTE_PORT        $remote_port;
uwsgi_param  SERVER_PORT        $server_port;
uwsgi_param  SERVER_NAME        $server_name;

截图

在这里插入图片描述

配置Nginx

记得在这时,需要将uwsgi.inihttp改为socket,重启uwsgi,然后再继续配置Nginx

server {
    # 监听
    listen 8005;
    # 写项目名就行
    server_name luffy_crm;
    
    location / {
       # 这里的ip和port和uwsgi.ini一样,注意内网IP是云服务器的内网ip
       uwsgi_pass    172.17.0.3:8080;
       # 加载 uwsgi_param,
       include       /root/web_project/luffy_crm/uwsgi_config/uwsgi_params;
    }

    # 配置静态文件目录
    # 需要迁移静态文件,上述已经写过
    location /static {
        alias /root/web_project/luffy_crm/static;
    }
}

完整配置

worker_processes auto;
# user一定要是root,要不然静态资源会失败
user root;

error_log logs/error.log;

events {
  use epoll;
  worker_connections 1024;
  multi_accept on;
}

http {
  server {
    # 监听
    listen 8005;
    # 写项目名就行
    server_name luffy_crm;

    location / {
      # 这里的ip和port和uwsgi.ini一样,注意内网IP是云服务器的内网ip
      uwsgi_pass 172.17.0.3:8080;
      include /root/web_project/luffy_crm/uwsgi_config/uwsgi_params;
    }

    # 配置静态文件目录
    # 需要迁移静态文件,上述已经写过
    location /static {
      alias /root/web_project/luffy_crm/static;
    }
  }
  lua_package_path "/www/common/waf_lua/?.lua;;";

  include mime.types;

  gzip on;
  gzip_buffers 16 8k;
  gzip_comp_level 2;
  gzip_min_length 8k;
  gzip_types text/plain application/javascript text/css;

  keepalive_timeout 65;

  client_body_buffer_size 8m;
  client_header_buffer_size 32k;
  client_max_body_size 50m;

  include /usr/local/phpstudy/vhost/sys/nginx/*.conf;
  include /usr/local/phpstudy/vhost/nginx/*.conf;

}

注意事项

配置注意事项!

  • 第三行参数一定要是user root,要不然会引起403。
  • server要放在http中!

配置完成

如果上述不出意外,并且开启了Nginx,最终结果如下!

在这里插入图片描述

总结

Django在Linux下部署,通常采用Nginx+uwsgi+Django

上述项目已经放在了gitee上,导出的sql文件也在。

其实这个过程并不是太难,但是还是有些繁琐的,但是相对来说还不是太难,细心点还是可以的!

值得注意的是uwsgi.ini在和Nginx使用时,需要将http改为socket

其他的话,问题不大!

越努力,越幸运。

如果在操作过程中有任何问题,记得下面留言,我们看到会第一时间解决问题。

我是码农星期八,如果觉得还不错,记得动手点赞一下哈。

感谢你的观看。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值