#Framework# Python+Uwsig+Nginx+Supervisor

共 13950字,需浏览 28分钟

 ·

2024-05-16 22:55




 文章所涉及内容更多来自网络,在此声明,并感谢知识的贡献者!








Python 安装





 Python3安装:


查看python版本


 



查看python 可执行文件的位置


 



进行python所在位置,查看python信息


 



安装 python依赖包


yum -y group install "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 libffi-devel


进行python版本备份


Mv /bin/python /bin/python.bak


 



下载python安装包


wget https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tar.xz


解压缩


tar -xvJf Python-3.7.6.tar.xz


安装


Cd Python-3.7.6


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


make && make install


确认目录下/usr/local/目录下就会有python3了。


cd /usr/local/python3/


创建软链接


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


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


查看版本


python -V


python2 -V


cd /usr/bin/


ll python*


修改yum的配置


vi /usr/bin/yum


vi /usr/libexec/urlgrabber-ext-down


 




Flask 安装





 Python3 Flask安装:


Flask模块安装


pip install flask


创建flask项目


cd /home/wwwroot/flask_project


vi app.py


from flask import Flask,request,render_template


app = Flask(__name__)


@app.route('/')


def index():


    return 'hello world'


if __name__ == '__main__':


    app.run(debug=True)


python app.py


浏览器输入:


192.168.1.20:9000


 



 Python3 Uwsgi安装:


uwigi安装


flask的作用只是一个框架,它不是服务器,也不会去关心一些安全问题、HTTP 的性能问题等。所以我们需要更加专业的 HTTP 服务器,如uwsgi。


uwsgi 卸载


yum remove uwsgi


pip uninstall uwsgi


 



yum install pcre


yum install libxml2


yum insall python-devel


pip install uwsgi


建立连接


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


编辑python文件


Vi /home/wwwroot/flask/test.py


def application(env, start_response):


    start_response('200 OK', [('Content-Type','text/html')])


return [b"Hello World"]


运行命令


uwsgi --http :8001 --wsgi-file test.py


 



#app.py


from flask import  Flask


app = Flask(__name__)


@app.route("/")


def hello():


    return "Hello World"




#run.py


from app import app


if __name__ == "__main__":


   app.run()




[uwsgi]


#uwsgi启动时,所使用的地址和端口(这个是http协议的)


http=0.0.0.0:5000


#uwsgi 启动时所使用的地址与端口(这个是socke协议)


socket=0.0.0.0:8001


#指向网站目录就是你那个包含flask项目的文件夹(如复制记得更改)


chdir=/home/xrf/mypython/flaskWeb


#python 启动程序文件就是包含if __name__ == "__main__":manager.run()的py文件(记得改哦)


wsgi-file=run.py


#python 程序内用以启动的application 变量名   就是这个:app = Flask(__name__)(记得改哦)


callable=app


#处理器数


processes=4


#线程数


threads=2


#状态检测地址


stats=127.0.0.1:9191




uwsgi uwsgi.ini


 



后台杀掉uwsgi进程


pkill -f uwsgi -9





Nginx 安装




 Python3 Nginx安装:


Nginx


Uwsgi就是一个便携的 web 服务器,当然也可以做一个连接其他app的中间件,所以我们一般还是在它们前面档一个更加专业的 HTTP 服务器——nginx,也就是上文提到的。仅仅只使用uWSGI的会有性能不够,安全性不够的情况。nginx是经过长时间验证的一个更好的服务器。


Nginx安装


下载


wget http://nginx.org/download/nginx-1.21.2.tar.gz


解压缩


tar zxvf nginx-1.10.2.tar.gz


进入路径


cd nginx-1.21.2


配置


./configure && make && make install


查找安装路径


whereis nginx


把安装路劲添加到环境变量


vi ~/.bashrc


加上一句上面找到的nginx的路径


export PATH=$PATH:/usr/local/nginx/sbin/


保存并退出


source ~/.bashrc


系统添加nginx服务


Vi /etc/init.d/nginx


#!/bin/sh


# nginx - this script starts and stops the nginx daemin


#


# chkconfig:   - 85 15




# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \


#               proxy and IMAP/POP3 proxy server




# processname: nginx


# config:      /usr/local/nginx/conf/nginx.conf


# pidfile:     /usr/local/nginx/logs/nginx.pid




# Source function library.




. /etc/rc.d/init.d/functions




# Source networking configuration.




. /etc/sysconfig/network




# Check that networking is up.




[ "$NETWORKING" = "no" ] && exit 0




nginx="/usr/local/nginx/sbin/nginx"




prog=$(basename $nginx)




NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"




lockfile=/var/lock/subsys/nginx




start() {




    [ -x $nginx ] || exit 5




    [ -f $NGINX_CONF_FILE ] || exit 6




    echo -n $"Starting $prog: "




    daemon $nginx -c $NGINX_CONF_FILE




    retval=$?




    echo




    [ $retval -eq 0 ] && touch $lockfile




    return $retval




}






stop() {




    echo -n $"Stopping $prog: "




    killproc $prog -QUIT




    retval=$?




    echo




    [ $retval -eq 0 ] && rm -f $lockfile




    return $retval




}






restart() {




    configtest || return $?




    stop




    start




}






reload() {




    configtest || return $?




    echo -n $"Reloading $prog: "




    killproc $nginx -HUP




    RETVAL=$?




    echo




}




force_reload() {




    restart




}






configtest() {




  $nginx -t -c $NGINX_CONF_FILE




}








rh_status() {




    status $prog




}






rh_status_q() {




    rh_status >/dev/null 2>&1




}




case "$1" in




    start)




        rh_status_q && exit 0


        $1


        ;;




    stop)






        rh_status_q || exit 0


        $1


        ;;




    restart|configtest)


        $1


        ;;




    reload)


        rh_status_q || exit 7


        $1


        ;;






    force-reload)


        force_reload


        ;;


    status)


        rh_status


        ;;






    condrestart|try-restart)




        rh_status_q || exit 0


            ;;




    *)




        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"


        exit 2




esac


进入目录


cd /etc/init.d


修改权限


chmod 755 /etc/init.d/nginx


开始注册


chkconfig --add nginx


启动服务


service nginx start


nginx 管理服务命令


systemctl start nginx #开启nginx服务


systemctl stop nginx #停止nginx服务


systemctl restart nginx #重启nginx服务


创建项目文件 hello.py


Vi /home/wwwroot/flask_project/hello.py



项目uwsgi配置文件 config.ini


Vi /home/wwwroot/flask_project/config.ini



系统nginx的配置文件


Vi /usr/local/nginx/conf/nginx.conf



关闭 uwsgi进程


Pkill -f uwsgi -9


配置uwsgi以及启动nginx


Uwsgi –ini /home/wwwroot/flask_project/config.ini & systemctl restart nginx


 





Supervisor 安装




 Python3 Supervisor安装:


Supervisor


Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。


安装supervisor


yum install -y supervisor


如果提示supervisor找不到,则使用如下指令:


Yum install epel-release


Yum install -y supervisor


如果有问题


[root@localhost bin]# easy_install supervisor


配置supervisor


编辑下/usr/bin/supervisord、/usr/bin/echo_supervisord_conf、/usr/bin/supervisorctl


#!/usr/bin/python 改成 #!/usr/bin/python2


查看 supervisord的使用帮助


Supervisord -h


创建默认配置文件。


[root@localhost bin]# echo_supervisord_conf > /etc/supervisord.conf


修改/etc/supervisord.conf 默认配置文件


Vi /etc/supervisord.conf


直接找到最下面的这个。


[include]                                   # 这里的‘;’注释去掉


;files = relative/directory/*.ini


files = /etc/supervisor/conf.d/*.conf       # 这里加入自定义的配置文件文件路径


 



创建自定义文件配置文件夹


[root@localhost etc]# mkdir -p supervisor/conf.d


[root@localhost etc]# cd supervisor/conf.d


[root@localhost conf.d]# vim uwsgi.conf


 



stopasgroup=true     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程


killasgroup=true     ;默认为false,向进程组发送kill信号,包括子进程


杀掉已经存在的进程


Pkill -f supervisord -9


-c指定配置文件路径,-n可前台运行,方便自己调试


/usr/bin/supervisord -c /etc/supervisord.conf


查看程序


Ps -aux | grep supervisord


Ps -aux | grep uwsgi




配置nginx文件


Vi /usr/local/nginx/conf/nginx.conf


 



Supervisor 配置文件 /etc/supervisord.conf


自定义配置文件 /etc/supervisor/conf.d/uwsgi.conf       


Supervisor 配置重启


 



确保nginx 启动


Systemctl start nginx


启动supervisord


/usr/bin/supervisord -c /etc/supervisord.conf


杀掉supervisord进程


Pkill -f supervisord -9




supervisor出现Unlinking stale socket /tmp/supervisor、unix:/run/supervisor/supervisor.sock no such file


1、修改配置文件


vim supervisord.conf


这里把所有的/tmp路径改掉,


/tmp/supervisor.sock 改成/var/run/supervisor.sock,


/tmp/supervisord.log 改成/var/log/supervisor.log,


/tmp/supervisord.pid 改成 /var/run/supervisor.pid 要不容易被linux自动清掉。


样例如下:


[unix_http_server]


file=/run/supervisor/supervisor.sock   ; the path to the socket file


[supervisord]


logfile=/var/log/supervisord.log ; main log file; default $CWD/supervisord.log


pidfile=/run/supervisor/supervisord.pid ; supervisord pidfile; default supervisord.pid


[supervisorctl]


serverurl=unix:///run/supervisor/supervisor.sock ; use a unix:// URL  for a unix socket


2、修改权限


sudo chmod 777 -R /run


sudo chmod 777 -R /var


如果没改,启动可能会报错 IOError: [Errno 13] Permission denied: ‘/var/log/supervisord.log’


3、创建supervisor.sock


sudo touch /run/supervisor/supervisor.sock


sudo chmod 777 /run/supervisor/supervisor.sock


sudo chmod 777 -R /run


4、添加supervisor.sock链接


unlink /run/supervisor/supervisor.sock


5、启动supervisord





参考资料




 参考资料:


Linux vi命令(vi编辑器)30分钟入门教程 (biancheng.net)


http://c.biancheng.net/vi/


(4条消息) centos 7 网络配置( 网关、dns、ip地址配置)_jcxch的专栏-CSDN博客


https://blog.csdn.net/jcxch/article/details/48632761


(4条消息) CentOS网络配置与重启方法_wxt_hillwill的博客-CSDN博客_centos重置网络


https://blog.csdn.net/wxt_hillwill/article/details/113742637


CentOS 设置网络(修改IP&修改网关&修改DNS) - 网络爱上点击 - 博客园 (cnblogs.com)


https://www.cnblogs.com/visi_zhangyang/articles/2429185.html


(4条消息) VMware虚拟机设置上网及与本地计算机通信_bobozai86的博客-CSDN博客_虚拟机网络怎么设置可以与本机连接


https://blog.csdn.net/bobozai86/article/details/82699983


mysql细说show slave status参数详解(最全) - --smile - 博客园 (cnblogs.com)


https://www.cnblogs.com/--smile/p/11811715.html


(4条消息) CentOS7安装MySQL(完整版)_程序员进阶之路-CSDN博客_centos7安装mysql https://blog.csdn.net/qq_36582604/article/details/80526287


(4条消息) CentOS7上实现mysql数据库主从备份_贫僧想吃肉的博客-CSDN博客_centos mysql 主从备份


https://blog.csdn.net/weixin_41659822/article/details/108146409


supervisor介绍与使用 - 雪山过客 - 博客园 (cnblogs.com)


https://www.cnblogs.com/blogyuhan/p/9330831.html


centos7中安装python3 - 修瑾 - 博客园 (cnblogs.com)


https://www.cnblogs.com/xiujin/p/11477419.html


centos7建立删除软连接 - 豆浆D - 博客园 (cnblogs.com)


https://www.cnblogs.com/soymilk2019/p/14876096.html


CentOS+uWSGI+Nginx 配置Django Web服务器 (lazynight.me)


http://lazynight.me/2512.html


(4条消息) django为什么需要uwsgi和nginx的配合_TY_ANG的博客-CSDN博客


https://blog.csdn.net/weixin_44223088/article/details/105449446


(4条消息) centos7安装和配置uWSGI_u010863022的博客-CSDN博客_centos7 安装uwsgi


https://blog.csdn.net/u010863022/article/details/104866820


在centos下启动nginx出现Failed to start nginx.service:unit not found - ansibee - 博客园 (cnblogs.com)


https://www.cnblogs.com/ansibee/p/8087476.html


CentOS 7 Nginx 错误集合 - The-fat - 博客园 (cnblogs.com)


https://www.cnblogs.com/wangye666/p/10225003.html


(4条消息) centos7重启nginx报错解决办法nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed_susu1083018911的博客-CSDN博客


https://blog.csdn.net/susu1083018911/article/details/103526372


(4条消息) uwsgi启动报错 chdir(): No such file or directory [core/uwsgi.c line 2591]_中国移动。4G的博客-CSDN博客


https://blog.csdn.net/weixin_42292991/article/details/95976016


阿里云:uwsgi--配置出错 bind(): Address already in use [core/socket.c line 769] - Be-myself - 博客园 (cnblogs.com)


https://www.cnblogs.com/gengyufei/p/11678141.html


Centos7 下python3 uwsgi的安装配置 - 云+社区 - 腾讯云 (tencent.com)


https://cloud.tencent.com/developer/article/1416183


Centos7 搭建flask 应用 nginx + uwsgi + flask - 肥冬瓜 - 博客园 (cnblogs.com)


https://www.cnblogs.com/grayhuang/p/13447968.html


CentOS7.2安装配置nginx+uwsgi+python+flask运行环境 - 挨踢学霸 - 博客园 (cnblogs.com)


https://www.cnblogs.com/itxb/p/8570119.html


CentOS7.2安装配置nginx+uwsgi+python+flask运行环境 - 挨踢学霸 - 博客园 (cnblogs.com)


https://www.cnblogs.com/itxb/p/8570119.html


Centos7 搭建flask 应用 nginx + uwsgi + flask - 肥冬瓜 - 博客园 (cnblogs.com)


https://www.cnblogs.com/grayhuang/p/13447968.html


基于Centos7+Flask+Nginx+uWSGI+Python3的服务器网页搭建教程 - Pyrokine - 博客园 (cnblogs.com)


https://www.cnblogs.com/Pyrokine/p/9095629.html


(4条消息) 阿里云centos 部署python flask应用(centos+python3+nginx+flask+uwsgi+supervisor)_Courage-Hu的专栏-CSDN博客


https://blog.csdn.net/u012135009/article/details/87397166


Centos 7.6上supervisor问题集锦- 阿文博客 (wenfeifei.com)


http://www.wenfeifei.com/art/detail/n0baZG7


(4条消息) supervisor出现Unlinking stale socket /tmp/supervisor、unix:/run/supervisor/supervisor.sock no such file_代码讲故事-CSDN博客


https://blog.csdn.net/u014374009/article/details/109198777


在Centos7使用supervisor - 知乎 (zhihu.com)


https://zhuanlan.zhihu.com/p/79801019


Supervisor + Nginx + Python3 部署Tornado - 云+社区 - 腾讯云 (tencent.com)


https://cloud.tencent.com/developer/article/1744828





浏览 28
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报