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

6、Ubuntu安装uwsgi报错解决方案

1、https://www.cnblogs.com/xypbk/p/10150059.html 

2、linux下部署Django uwsgi: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

在ubuntu下部署Django服务,使用uwsgi时报错

命令:uwsgi --http :8001 --wsgi-file test.py

报错信息:uwsgi: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

解决方式:

sudo apt-get install libpcre3 libpcre3-dev # 安装需要的包

find / -name libpcre.so.3 # 找到libpcre.so.3(一般在根目录/lib/x86_64-linux-gnu下)

找到 /lib/x86_64-linux-gnu/libpcre.so.3

sudo ln -s /lib/x86_64-linux-gnu/libpcre.so.3 /usr/lib/libpcre.so.1 # 做软链接即可

发布了84 篇原创文章 · 获赞 149 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/feifeiyechuan/article/details/103100165