欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Centos7+uwsgi+nginx部署Django项目

程序员文章站 2022-06-11 11:57:35
...

尝试过很多次以后,终于能够将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