#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

浏览 8
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

分享
举报