Centos7+uwsgi+nginx部署Django项目
尝试过很多次以后,终于能够将centos7+uwsgi+nginx完整的配置下来,中间遇到过很多问题,在后边会给出解决办法。
话不多说,开始项目配置:
1、简单介绍
原理介绍:对web开发和部署有些许经验的同学应该知道,对于生产环境的web应用部署,应该是对 web应用 + web应用服务器软件 + web服务器软件 的组合操作。web应用顾名思义就是你的web project,这可以是java web项目,django项目或者php项目;web应用服务器软件就是运行web应用的地方,例如java用的tomcat服务器,django用的uwsgi服务器,正常情况下你只需要将web项目部署在应用服务器软件上就可以对外提供服务了。只不过这种情况下外部所有的请求不管是(动态请求还是静态请求)都是由web应用服务器软件来处理,在用户较少的情况下这样其实是够用的,但是当用户数增大,就必须要考虑到服务器系统的负载,如果不能做到服务器负载的均衡分配,必然会导致在访问高峰情况下出现不可预知的严重后果。这时就是我们的web服务器软件派上用场的时候了,web服务器软件常见的当然就是著名的apache和nginx了,使用它们再配合应用服务器软件我们就能轻松的实现web网站的动静分离,静态文件请求就交给apahce和nginx,动态请求就会由apache和nginx转发到相应的应用服务器软件来处理。
本文采用的是Centos7+python3.6.8+django2.2.4
2、安装依赖
安装下面依赖,避免后续编译安装python, pip, django和uwsgi等软件时出现的一些错误。
sudo yum groupinstall "Development tools"
sudo yum install openssl openssl-devel sqlite-devel zlib-develbzip2-devel ncurses-devel readline-devel tk-devel
sudo yum install pcre pcre-devel pcre-static
3、Python环境准备(如果没有python虚拟环境,可以参考,有的话,跳过)
(1)安装虚拟环境
可以使用anaconda配置虚拟环境:Anaconda安装使用
我这儿配置的虚拟环境名称为:py368 使用的python3.6.8环境
(2)安装Django依赖包
pip install django -i https://pypi.douban.com/simple
4、uwsgi提供服务
(1)安装uwsgi
sudo pip install uwsgi
(2)进入Django项目根目录(和manage.py同级目录)
端口号9007可以自行设定,记得端口号之前要加冒号
uwsgi --http :9007 --module your_proj_name.wsgi
此时,项目已经启动,我们已经可以通过这个端口进行网站的访问。也即web应用服务器软件安装完成。
5、部署nginx
(1)安装nginx
sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm #安装nginx yum源
sudo yum info
sudo yum install nginx
(2)设置nginx启动的配置文件
因为/etc/nginx/nginx.conf 文件会include /etc/nginx/conf.d/目录下的所有配置文件,为了方便管理配置文件,我们在/etc/nginx/conf.d/ 下创建自己的web项目的配置文件,例如新建一个my_site.conf文件。 在配置文件里我们输入如下信息(其中easy_sysman是我的工程名):
server {
listen 9008; #启动的nginx进程监听请求的端口
server_name localhost; #域名
error_log /var/log/easy_sysman/error.log; #nginx错误日志,可自行设置,但必须保证提前建立好该目录和文件
location / {
include /etc/nginx/uwsgi_params;
uwsgi_pass 127.0.0.1:9007; #对于动态请求,转发到本机的9090端口,也就是uwsgi监听的端口
}
#error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location /static/ {
alias /project/djgDemo/static/; #设定静态文件所在目录
}
location /media/ {
alias /project/djgDemo/static; #同样自行设置,要保证目录已经建好
}
}
(3)配置文件写好后,我们要检查配置文件的正确性
nginx -t -c /etc/nginx/nginx.conf
(4)同步静态文件到nginx设置的目录下
首先修改django项目setting.py,增加
STATIC_ROOT = '/var/www/easy_sysman/static/'
在命令行输入
python manage.py collectstatic
自动将所有静态文件复制到nginx的索引目录。
(5)启动uwsgi:
A、切换到django项目目录
uwsgi --socket :9007 --module easy_sysman.wsgi
这里可以使用更复杂的配置文件来启动,可以参考uwsgi-to-run-with-a-ini-file
B、当然我更推荐配置文件方式,如下:
在manage.py同级目录,创建文件uwsgi.ini,内容如下:
# 使用uwsgi+nginx反向代理配置,使用socket完成nginx和uwsgi的连接
socket = localhost:9999
# 通过chdir选项配置当前项目所在路径
chdir = /home/worker/django_worker/mysite
# 通过wsgi-file配置,指向当前项目的wsgi实现文件
uwsgi-file = mysite/wsgi.py
# 主进程启用~使用主进程管理所有进程
master = True
# 配置保存主进程编号的文件
pidfile = uwsgi.pid
# 配置启动多少个进程
processes = 2
# 配置每个进程启动多少个线程
threads = 2
# 配置uwsgi服务器的日志记录
daemonize = uwsgi.log
启动uwsgi服务器
uwsgi --ini uwsgi.ini
(6)启动nginx
sudo service nginx start
就可以访问 服务器ip:9008/ 就能出现页面,如果不行就检查 /var/log/easy_sysman/error.log里的错误内容,一点点修正。
这种服务提供方式可以表述为:
the web client <-> the web server <-> the socket <-> uWSGI <-> Django
推荐阅读
-
Linux下部署springboot项目的方法步骤
-
基于Flyway实现简化Spring Boot项目部署
-
腾讯云Centos7.4上部署django项目
-
解析Mac OS下部署Pyhton的Django框架项目的过程
-
Django项目开发中cookies和session的常用操作分析
-
pyinstaller打包django项目成exe以及遇到的一些问题
-
开始着手第一个Django项目
-
Django查找网站项目根目录和对正则表达式的支持
-
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
-
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目