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服务
安装redis
yum install redis
启动服务
systemctl start redis
查看版本号
redis-cli --version
设置开机启动
systemctl enable redis.service
测试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
安装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配置文件的时候才会出现下面的欢迎页面,如果修改了以后是不能访问默认欢迎页面的
安装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