• 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服务

  • 相关阅读:
    springboot springcloud zuul 过滤器
    springboot springcloud eureka 熔断器
    javaweb servlet filter
    maven nexus 搭建私服(二)
    springboot springcloud zuul 网关入门
    springboot springcloud 配置中心
    springboot springcloud eureka 入门
    java rabbitmq
    java jvm调优
    maven nexus 搭建私服(一)
  • 原文地址:https://www.cnblogs.com/lihouqi/p/13818754.html
Copyright © 2020-2023  润新知