Django + Uwsgi + Nginx 的生产环境部署

python
0 959

Django + Uwsgi + Nginx 的生产环境部署

使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了。比如静态文件处理,安全,效率等等,本篇文章总结归纳了一下基于uwsgi+Nginx下django项目生产环境的部署

准备条件:

1.确保有一个能够用runserver正常启动的django项目

2.项目已上传到linux 

3.linux上已部署好python环境,且已安装好项目所需的模块

常用命令

端口占用及KIll

[root@VM_0_14_centos script]# netstat -tlnp|grep 80

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      22699/nginx: master 

tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      24475/uwsgi 

[root@VM_0_14_centos script]# kill -9 22699

1

2

3

4

压缩、解压

tar -cvf fille.tar file(可以多个文件空格隔开)-c: 建立压缩档案;-v: 显示所有过程;-f: 使用档案名字,是必须的,是最后一个参数) 

tar -xvf file.tar 解包到当前目录 

tar -xvf file.tar -C dir 把文件解压到指定目录中 

zip 压缩后文件名 源文件 

zip -r 压缩后目录名 原目录 

unzip file.zip -d dir 解压到指定目录 

gunzip file1.gz 解压 file1.gz 

gzip file1 压缩 file1 

gzip -9 file 最大程度压缩文件 

1

2

3

4

5

6

7

8

9

文件、目录

rm -f file 强制删除文件,不提示 

rm -r dir 递归删除其文件和文件夹 

rm -rf dir 强制删除文件夹及其内容,不提示 

mv dir/file dir 将文件或者文件夹移动到指定目录 

mv -t dir file 将文件或者文件夹移动到指定目录 

mkdir dir dir2 创建两个文件夹 

mkdir -p /tmp/dir 创建多级目录 

cp file file1 将文件file复制一份file1 

cp -a file/dir dir 将文件或者文件夹复制到指定目录 

cd .. 返回上一级目录 

cd ../.. 返回上两级目录 

cd / 返回根目录 

ls 列举出当前目录中所有文件 

ls -a 列举出当前目录中所有文件,包括隐藏文件 

ls -l 显示文件的详细信息 

ls -lrt 按时时间排序显示文件 

pwd 显示当前路径 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

系统相关

su 用户名 切换用户登录 

shutdown -h now 关机 

shutdown -r now 重启 

reboot 重启 

1

2

3

4

安装uwsgi

测试django项目运行

[root@VM_0_14_centos www]# cd /var/www/

[root@VM_0_14_centos www]# python manage.py runserver 0.0.0.0:80 

1

2

uwsgi是python的一个模块,安装uwsgi只需简单的pip命令就可以了

[root@VM_0_14_centos www]# pip3 install uwsgi

Collecting uwsgi

  Downloading http://mirrors.tencentyun.com/pypi/packages/e7/1e/3dcca007f974fe4eb369bf1b8629d5e342bb3055e2001b2e5340aaefae7a/uwsgi-2.0.18.tar.gz (801kB)

    100% |████████████████████████████████| 808kB 30.5MB/s 

Installing collected packages: uwsgi

  Running setup.py install for uwsgi ... done

Successfully installed uwsgi-2.0.18

You are using pip version 9.0.1, however version 19.1.1 is available.

You should consider upgrading via the 'pip install --upgrade pip' command.

1

2

3

4

5

6

7

8

9

添加软连接

[root@VM_0_14_centos www]# ln -s /usr/local/python3Dir/bin/uwsgi /usr/bin/uwsgi

1

使用命令启动uwsgi

进入django项目

[root@VM_0_14_centos sbin]# cd /usr/local/project/env2/env2/

[root@VM_0_14_centos sbin]# uwsgi --http 0.0.0.0:80 --file env2/wsgi.py --static-map=/static=static

1

2

参数说明:

–http 这个就和runserver一样指定IP 端口

–file 这个文件就里有一个反射,如果你在调用他的时候没有指定Web Server就使用默认的

– static 做一个映射,指定静态文件

使用uwsgi配置文件启动django项目

在django项目同级目录创建script目录,用于存放配置脚本等等

[root@VM_0_14_centos script]# makdir uwsgi.ini

[root@VM_0_14_centos script]# vim uwsgi.ini

#uwsig使用配置文件启动

[uwsgi]

# 项目目录

chdir=/usr/local/project/env2/env2/

# 指定项目的application

module=env2.wsgi:application

# 指定sock的文件路径

socket=/usr/local/project/env2/env2/script/uwsgi.sock

# 进程个数

workers=5

pidfile=/usr/local/project/env2/env2/script/uwsgi.pid

# 指定IP端口

http=0.0.0.0:8080

# 指定静态文件

static-map=/static=/usr/local/project/env2/env2/static

# 启动uwsgi的用户名和用户组

uid=root

gid=root

# 启用主进程

master=true

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

vacuum=true

# 序列化接受的内容,如果可能的话

thunder-lock=true

# 启用线程

enable-threads=true

# 设置自中断时间

harakiri=30

# 设置缓冲

post-buffering=4096

# 设置日志目录

daemonize=/usr/local/project/env2/env2/script/uwsgi.log

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

启动django项目

[root@VM_0_14_centos script]# uwsgi --ini uwsgi.ini [uWSGI] getting INI configuration from uwsgi.ini

[uwsgi-static] added mapping for /static => /usr/local/project/env2/env2/static

[root@VM_0_14_centos script]# static-map=/static=static

1

2

3

启动成功

安装nginx

下载nginx

[root@VM_0_14_centos script]# cd /usr/local/download/

[root@VM_0_14_centos download]# wget http://nginx.org/download/nginx-1.14.0.tar.gz

[root@VM_0_14_centos download]# tar zxvf nginx-1.14.0.tar.gz

1

2

3

编译安装

[root@VM_0_14_centos script]# cd /usr/local/download/

[root@VM_0_14_centos download]# wget http://nginx.org/download/nginx-1.14.0.tar.gz

[root@VM_0_14_centos download]# tar zxvf nginx-1.14.0.tar.gz

[root@VM_0_14_centos download]# cd /usr/local/download/nginx-1.14.0/

[root@VM_0_14_centos download]# ./configure --prefix=/usr/local/nginx

[root@VM_0_14_centos download]# make && make install

1

2

3

4

5

6

执行

[root@VM_0_14_centos sbin]# /usr/local/nginx/sbin/nginx

1

启动成功

Django + Uwsgi + Nginx 配置

进入项目,创建script文件夹

[root@VM_0_14_centos env2]# cd /usr/local/project/env2/

[root@VM_0_14_centos env2]# mkdir script

1

2

在项目文件夹下创建uwsgi.ini文件,一定要在项目文件夹,这个很重要

[root@VM_0_14_centos env2]# vim uwsig.ini

#uwsgi.ini file /usr/local/project/env2/script/

[uwsgi]

# Django-related settings

#http = 0.0.0.0:80

#socket必须与nginx中一致

socket = /usr/local/project/env2/script/env2.scok

uid = root

pid = root

buffer-size = 65535

#项目路径

chdir = /usr/local/project/env2

# Django s wsgi file

#项目wsgi.py路径appname.uwsgi

module = env2.wsgi:applicaton

pipfile=/usr/local/project/env2/script/uwsgi.pid

# process-related settings

# master

master = true

vacuum=true

thunder-lock=true

harakiri=3000

post-buffering=4096

 

# maximum number of worker processes

processes = 4

# ... with appropriate permissions - may be needed

chmod-socket = 666

# clear environment on exit

vacuum = true

#日志路径

daemonize=/usr/local/project/env2/script/uwsgi.log

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

配置文件自动创建socket通信文件,log日志文件,进程文件

启动uwsig

[root@VM_0_14_centos env2]# uwsgi --ini uwsig.ini 

[uWSGI] getting INI configuration from uwsig.ini

1

2

配置nginx

--------------------- 

作者:woaizhengjie 

来源:CSDN 

原文:https://blog.csdn.net/woaizhengjie/article/details/90042135 

版权声明:本文为博主原创文章,转载请附上博文链接!