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

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

压缩、解压

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 最大程度压缩文件 

文件、目录

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 显示当前路径 

系统相关

su 用户名 切换用户登录 
shutdown -h now 关机 
shutdown -r now 重启 
reboot 重启 

安装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 

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.

添加软连接

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

使用命令启动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

参数说明:

–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

启动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

启动成功

安装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

编译安装

[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

执行

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

启动成功

Django + Uwsgi + Nginx 配置

进入项目,创建script文件夹

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

在项目文件夹下创建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

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

启动uwsig

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

配置nginx

猜你喜欢

转载自blog.csdn.net/woaizhengjie/article/details/90042135