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
版权声明:本文为博主原创文章,转载请附上博文链接!