美文网首页LinuxCentOS
CentOS7 部署 Python3.7 + Django +

CentOS7 部署 Python3.7 + Django +

作者: Amazing慕丶涵 | 来源:发表于2022-03-04 16:09 被阅读0次

    做过运维的应该都知道:
    Python需要使用nginx + uWSGI 提供静态页面访问,和高并发
    php 需要使用 nginx + fastcgi 提供高并发,
    java 需要使用 nginx + tomcat 提供 web 服务
    参考文档
    https://my.oschina.net/u/4354879/blog/3432384
    https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/uwsgi/
    https://www.cnblogs.com/wkfvawl/p/15310834.html
    https://uwsgi-docs.readthedocs.io/en/latest/

    WSGI 协议

    WSGI:是一种协议规范,起到规范参数的作用,就像告诉公路一样,规定超车靠右行,速度不低于90km/h,等。但这一切都是对双方进行沟通,比如,重庆到武汉这条高速路,这儿重庆和武汉就各为一端,他们之间的行车规范就按照WSGI规则即可。我们现在需要记住,WSGI沟通的双方是wsgi server (比如uWSGI) 要和 wsgi application(比如django )

    wsgi server (比如uWSGI)实现wsgi协议规范的服务器我们叫做wsgi服务器,也就是uWSGI服务器,
    wsgi application(比如django )实现wsgi协议的应用,我们叫做wsgi应用,比如Django,Falsk

    uWSGI

    uWGSI:是一个web服务器,或者wsgi server服务器,他的任务就是接受用户请求,由于用户请求是通过网络发过来的,其中用户到服务器端之间用的是http协议,所以我们uWSGI要想接受并且正确解出相关信息,我们就需要uWSGI实现http协议,没错,uWSGI里面就实现了http协议。所以现在我们uWSGI能准确接受到用户请求,并且读出信息。现在我们的uWSGI服务器需要把信息发给Django,我们就需要用到WSGI协议,刚好uWSGI实现了WSGI协议,所以。uWSGI把接收到的信息作一次简单封装传递给Django,Django接收到信息后,再经过一层层的中间件,于是,对信息作进一步处理,最后匹配url,传递给相应的视图函数,视图函数做逻辑处理......后面的就不叙述了,然后将处理后的数据通过中间件一层层返回,到达Djagno最外层,然后,通过WSGI协议将返回数据返回给uWSGI服务器,uWSGI服务器通过http协议将数据传递给用户。这就是整个流程。

    这个过程中我们似乎没有用到uwsgi协议,但是他也是uWSGI实现的一种协议,鲁迅说过,存在即合理,所以说,他肯定在某个地方用到了。我们过一会再来讨论

    我们可以用这条命令:python manage.py runserver,启动Django自带的服务器,具体叫什么名字,我真不知道(知道的可以留言)。DJango自带的服务器(runserver 起来的 HTTPServer 就是 Python 自带的 simple_server)。是默认是单进程单多线程的,对于同一个http请求,总是先执行一个,其他等待,一个一个串行执行。无法并行。而且django自带的web服务器性能也不好,只能在开发过程中使用。于是我们就用uWSGI代替了。但是uWSGI也不够好,为什么看下图。

    为什么有了uWSGI为什么还需要nginx?

    因为nginx具备优秀的静态内容处理能力,然后将动态内容转发给uWSGI服务器,这样可以达到很好的客户端响应。支持的并发量更高,方便管理多进程,发挥多核的优势,提升性能。这时候nginx和uWSGI之间的沟通就要用到uwsgi协议。





    一、依赖库安装

    参考文档
    https://www.jianshu.com/p/4e97a9d78d1f
    如果看到 yum 前面加sudo的,例如:sudo yum -y install openssl-devel,记得向root用户提权才能安装,因为我用的是root 用户操作的,所以没加。
    //
    # 1 安装依赖包 
    yum -y install gcc-c++
    yum -y install openssl
    yum -y install openssl-devel 
    yum -y install zlib-devel
    yum -y install pcre-devel
    

    二、Python3.7 安装

    我是通过下载Python3.7的安装包进行编译安装的
    
    # 1 下载
    wget https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tgz
    # 2 解压
    tar -zxvf Python-3.7.9.tgz
    # 3 进入目录
    cd Python-3.7.9
    # 4 生成 Makefile,为下一步的编译做准备
    //  ./configure 是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本
    // 比如代码:./configure –prefix=/usr/python3 意思是将该软件安装在 /usr/python3 下面,./configure –help 察看详细的说明帮助。
    // 执行文件就会安装在 /usr/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的/usr/local/share)。
    ./configure --prefix=/usr/python3
    # 5 编译 它从Makefile中读取指令,然后编译
    make
    # 6 安装 Makefile中读取指令,安装到指定的位置。
    make install 
    # 7 添加软连接 (ln -s 源文件 目标文件)
    ln -s /usr/python3/bin/python3 /usr/bin/python3
    //
    # 8 查看python3 版本
    python3 -V
    # 9 给 pip3 添加软连接
    ln -s /usr/python3/bin/pip3.7 /usr/bin/pip3
    # 查看pip3 版本
    pip3 -V  
    
    

    三、Django 安装

    //
    # 安装django 3.2.6 版本
    pip3 install django==3.2.6
    

    四、uwsgi 安装

    //
    # 通过 pip3 安装 uwsgi 
    pip3 install uwsgi
    
    # yum 安装 python3-devel 依赖库(如果执行pip3 install uwsgi 安装不成功可能需要安装python3-devel)根据报错情况判断,可能确实其他
    yum install -y python3-devel
    

    五、Nginx 安装

    源码安装

    可以通过wget nginx的源码然后手动编译安装到指定目录
    
    # 下载
    wget http://nginx.org/download/nginx-1.20.2.tar.gz
    # 解压
    tar -zxvf nginx-1.20.2.tar.gz
    # 进入 nginx-1.20.2 目录
    cd nginx-1.20.2
    # 生成 Makefile,为下一步的编译做准备
    ./configure --prefix=/usr/local/nginx
    # 编译
    make 
    # 安装
    make install
    # 启动
    cd /usr/local/nginx/sbin/
    ./nginx
    # 重载
    /usr/local/nginx/sbin/nginx -s reload
    # 停止
    /usr/local/nginx/sbin/nginx -s stop
    
    // 扩展
    # 查看 nginx 服务器状态 
    netstat  -anptu  |  grep nginx
    
    -a显示所有端口的信息
    
    -n以数字格式显示端口号
    
    -t显示TCP连接的端口
    
    -u显示UDP连接的端口
    
    -l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口
    
    -p显示监听端口的服务名称是什么(也就是程序名称)
    
    

    另一种方式安装(yum安装):

    //
    # 也可以直接通过yum安装
    yum install nginx
    
    # 不同版本的linux系统可能会遇到No package nginx available.那么请尝试先安装epel(视情况而定)
    yum install epel-release
    
    # 开启 nginx 
    service nginx start   // 开启
    service nginx stop    // 停止
    service nginx restart // 重启
    
    
    # 设置Nginx服务开机自启动
    systemctl enable nginx
    
    

    Nginx 配置文件

    server {
            listen       80;
            server_name  test;
            charset      utf-8;
            # 静态路径相关配置
            location /static {
                autoindex on;
                #root /var/www/test_project/;
                alias /var/www/test_project/static;
            }
    
            location / {
                uwsgi_pass 127.0.0.1:9090;
                include /etc/nginx/uwsgi_params;     
                #这里我们使用默认文件即可,此处若不指定或指定错误,会出现502错误,uwsgi.log文件中会看到  KeyError: 'REQUEST_METHOD'的错误
                index index.html index.htm;
            }
        }
    
    # 如还需要其他参数请自行了解后配置添加
    

    uwsgi配置文件

    [uwsgi]
    #重要重要重要!!!此处的9090端口和之前nginx配置文件需要一致,相当于链接通路
    socket = 192.168.92.131:9090
    # 指定test_project项目所在路径,一般放在 /var/www 这个目录,避免遇到nginx root权限问题
    chdir = /usr/local/nginx/html/test99
    # 指定Django's wsgi file
    wsgi-file = /usr/local/nginx/html/test99/test1/wsgi.py
    # 最大工作进程 processes
    processes = 10
    #每个工作进程processes启动后开启线程个数threads
    threads = 2
    #环境退出时自动清理
    vacuum = true
    
    #记录uwsgi日志路径 
    #daemonize = /var/log/uwsgi.log
    
    ##如还需要其他参数请自行了解后配置添加
    
    
    # uwsgi 启动
    uwsgi --ini /etc/uwsgi_config.ini       #初始化uwsgi服务
    uwsgi --stop /etc/uwsgi_config.ini      #停止uwsgi服务
    uwsgi --reload /etc/uwsgi_config.ini    #重新加载uwsgi服务
    

    六、MySQL 5.7安装

    // 
    # 1、运行以下命令更新YUM源
    rpm -Uvh  http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
    
    # 2、运行以下命令安装MySQL
    如果您使用的操作系统内核版本为el8,可能会提示报错信息No match for argument。
    您需要先运行命令 
    # yum module disable mysql 
    禁用默认的mysql模块,再安装MySQL
    
    # 3、安装MySQL
    yum -y install mysql-community-server
    
    # 4、运行以下命令查看MySQL版本号。
    mysql -V
    返回结果如下所示,表示MySQL安装成功
    mysql  Ver 14.14 Distrib 5.7.28, for Linux (x86_64) using  EditLine wrapper
    
    # 5、运行以下命令启动MySQL。
    systemctl start mysqld
    
    # 6、运行以下命令设置开机启动MySQL
    systemctl enable mysqld
    systemctl daemon-reload
    

    七、拓展

    //
    要想使用此命令,需要装psmisc
    yum -y install psmisc
    
    killall命令用于杀死指定名字的进程(kill processes by name),即结束同名的的所有进程。
    
    killall   [参数]   [进程名]
    参数选项  解释说明
    -i       交互模式,终止进程前先询问用户是否确认
    -g       终止该进程组的进程
    -I       忽略大小写
    -q       如果没有终止进程则不提示
    -l       列出所有的已知信号名称
    -r       使用正则表达式匹配要终止的进程名称
    -u       终止指定用户的进程
    -w       等待所有被终止的进程死去。
    
    例子:
    killall mysqld
    
    在使用kill命令终止进程需要先获取进程PID,而使用killall命令直接使用进程名称,即可终止进程。
    kill -9 2709
    
    # yum针对软件包操作常用命令
    使用yum查找软件包
    yum search + 软件名或者关键字 //例如:yum search ifconfig
    
    列出所有可安装的软件包
    yum list 
    
    列出所有可更新的软件包 
    yum list updates
    
    列出所有已安装的软件包
    yum list installed 
    
    列出所有已安装但不在 yum Repository 内的软件包
    yum list extras
    
    使用yum获取软件包信息 
    yum info + 软件包
    
    列出所有可更新的软件包信息
    yum info updates 
    
    列出所有已安装的软件包信息
    yum info installed
    
    列出所有已安装但不在 yum Repository 内的软件包信息 
    yum info extras 
    
    列出软件包提供哪些文件
    yum provides +  软件包  //yum provides semanage
    
    # 3 清理/生成缓存
    清理缓存
    yum clean all
    
    更新缓存
    yum makecache
    

    相关文章

      网友评论

        本文标题:CentOS7 部署 Python3.7 + Django +

        本文链接:https://www.haomeiwen.com/subject/rwwzlrtx.html