Centos7+Django + Uwsgi + Nginx 的生产环境部署

Nginx WSGI uwsgi uWSGI

流程图

Nginx

是一个高性能的Web服务器,其中的HTTP服务器功能和uWSGI功能很类似。

WSGI

是一种描述web服务器(Nginx,uWSGI)如何与web应用程序(Django,Flask)通信的规范。

uWSGI

是一个全功能的HTTP服务器,实现了WSGI协议、uwsgi协议、http协议等。它要做的就是把HTTP协议转化成语言支持的网络协议,比如把HTTP协议转化成WSGI协议,让Python可以直接使用。

uwsgi

是一种线路协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。

nginx和uWSGI服务器之间是如何配合工作的?

实际上,uWSGI服务器 + Django框架,就可以实现网站的功能了,但一旦客户端访问量过大,客户端请求连接就需要长时间的等待,这种模式就无法满足需求了,分布式服务器此时应运而生,而nginx就是分布式服务器的一大利器,我们可以多用几台服务器来分别处理请求,nginx就相当于管家一样分配客户端请求连接和web服务器,这就是用nginx来实现反向代理,及代理服务器。
首先浏览器发起http请求到nginx服务器,nginx根据接收的请求包,进行url分析,判断访问的资源类型,如果是静态资源,直接读取静态资源返回给浏览器,如果请求的是动态资源就转交给uWSGI服务器,uWSGI服务器根据自身的WSGI协议,找到对应的Django框架,Django框架下的应用进行逻辑处理,将返回值发送到uWSGI服务器,uWSGI服务器再返回给nginx,最后nginx将返回值返回给浏览器进行渲染显示给用户。

安装python3环境

1.安装相应的编译工具

在root用户下(不要用普通用户,麻烦),全部复制粘贴过去,一次性安装即可。

yum -y groupinstall "Development tools"
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
yum install -y libffi-devel zlib1g-dev
yum install zlib* -y

2.下载安装包

wget wget https://www.python.org/ftp/python/3.7.7/Python-3.7.7.tar.xz
或者到我的蓝奏网盘去下载
https://lihouqi.lanzous.com/id4ep8j

3.解压

tar -xvf Python-3.7.7.tgz
或者下载我的python3.7.7包,在本地解压,通过ftp上传到服务器中

4.创建编译安装目录

mkdir /usr/local/python3

5.安装

cd Python-3.7.7
执行以下命令:
./configure --prefix=/usr/local/python3 --enable-optimizations --with-ssl
#第一个指定安装的路径,不指定的话,安装过程中可能软件所需要的文件复制到其他不同目录,删除软件很不方便,复制软件也不方便.
#第二个可以提高python10%-20%代码运行速度.
#第三个是为了安装pip需要用到ssl,后面报错会有提到.

6.安装pip3

make && make install

7.创建软链接

ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3

8.安装pip依赖包

本地生成requirements.txt 并上传服务器
pip freeze > requirements.txt
下载模块
pip3 install -r requirements.txt

安装mysql

wget 'https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm'

rpm -Uvh mysql57-community-release-el7-11.noarch.rpm

yum install -y mysql-community-server
#启动服务
systemctl start mysqld
#查看服务状态
systemctl status mysqld
查看数据库密码
grep 'temporary password' /var/log/mysqld.log
然后利用这个密码进入mysql命令行 mysql -uroot -p查到的密码

SET PASSWORD = PASSWORD('Admin123!');

设置远程登录
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Admin123!' WITH GRANT OPTION;
flush privileges;

vim /etc/my.cnf
在[mysqld]下面添加,不需要分号
字符集:注意是utf8而不是utf-8!
character-set-server=utf8
这时候使用show variables like 'char%';就可以查看到字符集都是utf8了
sql支持group by语句
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
设置时区为东八区
default-time_zone = '+8:00'

重启服务
systemctl restart mysqld

设置开机启动
systemctl enable mysqld
systemctl daemon-reload

** 拓展**

如果需要更改为简单的密码

1.停止mysql服务

systemctl stop mysqld.service


2.修改配置文件无密码登录

vim  /etc/my.cnf

在最后加上

skip-grant-tables

保存

3.启动mysql

systemctl  start  mysqld.service


4.登录mysql

mysql -u root

注意这里不要加-p

5.修改密码,mysql5.7用此语法

use mysql;

update mysql.user set authentication_string=password('123456') where user='root' ;  

6.回到第二部把刚加的那句删掉

保存,重启mysql就可以了

测试mysql服务

mysql服务

安装redis

yum install redis

启动服务
systemctl start redis

查看版本号
redis-cli --version

设置开机启动
systemctl enable redis.service

测试redis服务

redis服务器

安装mongodb

vim /etc/yum.repos.d/mongodb-org-3.4.repo

#添加以下内容:
[mongodb-org-3.4]  
name=MongoDB Repository  
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/  
gpgcheck=0
enabled=1  
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

清空缓存
yum makecache

安装
yum -y install mongodb-org

启动服务
systemctl start mongod.service

停止服务
systemctl stop mongod.service

查看服务状态
systemctl status mongod.service

重启服务
systemctl restart mongod.service

测试mongo

mongo服务

安装nginx

#设置源
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

#安装
yum install -y nginx
#启动服务
systemctl start nginx.service

#关闭服务
systemctl stop nginx.service

#开机自启
systemctl enable nginx.service
#修改配置文件

vim /etc/nginx/nginx.conf

#改成下面的配置
  server {
   listen       你定义的端口;
   server_name  你的ip;
   client_max_body_size 5M;
   gzip on;
   gzip_buffers 32 4K;#压缩在内存中缓冲32块 每块4K
   gzip_comp_level 6 ;#压缩级别 推荐6
   gzip_min_length 4000;#开始压缩的最小长度4bit
       gzip_types text/plain application/json application/javascript application/x-javascript application/css application/xml application/xml+rss text/javascript application/x-httpd-php image/jpeg image/gif image/png image/x-ms-bmp;
       location / {
             include uwsgi_params;
             uwsgi_pass 127.0.0.1:9090; #必须和uwsgi中socket中ip,port一样
             uwsgi_ignore_client_abort on;
       }

       error_page 404 /404.html;
           location = /40x.html {
       }

       error_page 500 502 503 504 /50x.html;
           location = /50x.html {
       }
       location /static {
       alias /usr/local/webapp/mydjango/static; #项目中静态资源static中的路径
       }

}
设置项目权限
chmod -R 755 /usr/local/webapp/mydjango   #你项目的路径,比如我的项目mydjango在/usr/local/webapp/目录下
#然后重启nginx
nginx -s reload 

测试nginx服务,这里注意下,在不修改nginx配置文件的时候才会出现下面的欢迎页面,如果修改了以后是不能访问默认欢迎页面的

nginx服务

安装uwsgi

1.安装uwsgi

pip3 install uwsgi

2.建立软连接

ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

3.通过配置文件启动

#进入到django项目目录
#编写uwsgi.ini配置文件

vim uwsgi.ini

[uwsgi]
socket = 0.0.0.0:9090
chdir = /usr/local/webapp/mydjango
wsgi-file = /usr/local/webapp/mydjango/mydjango/wsgi.py
processes = 5
threads = 30
master = true
daemonize = /usr/local/webapp/mydjango/uwsgi.log
module=mydjango.wsgi
pidfile = /usr/local/webapp/mydjango/uwsgi.pid
chmod-socket=666
enable-threads = true

4.启动

uwsgi --ini uwsgi.ini

最后,nginx通过监听你定义的端口反向代理uwsgi启动的django服务,访问网站进行测试

django服务

原文地址:https://www.cnblogs.com/lihouqi/p/13818754.html