#Framework# Python+Uwsig+Nginx+Supervisor
共 13950字,需瀏覽 28分鐘
·
2024-05-16 22:55
查看python版本
查看python 可執(zhí)行文件的位置
進(jìn)行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
進(jìn)行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 #第一個(gè)指定安裝的路徑,不指定的話,安裝過(guò)程中可能軟件所需要的文件復(fù)制到其他不同目錄,刪除軟件很不方便,復(fù)制軟件也不方便. #第二個(gè)可以提高python10%-20%代碼運(yùn)行速度. #第三個(gè)是為了安裝pip需要用到ssl,后面報(bào)錯(cuò)會(huì)有提到.
make && make install
確認(rèn)目錄下/usr/local/目錄下就會(huì)有python3了。
cd /usr/local/python3/
創(chuàng)建軟鏈接
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
? Python3 Flask安裝:
Flask模塊安裝
pip install flask
創(chuàng)建flask項(xiàng)目
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的作用只是一個(gè)框架,它不是服務(wù)器,也不會(huì)去關(guān)心一些安全問(wèn)題、HTTP 的性能問(wèn)題等。所以我們需要更加專業(yè)的 HTTP 服務(wù)器,如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"]
運(yùn)行命令
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啟動(dòng)時(shí),所使用的地址和端口(這個(gè)是http協(xié)議的)
http=0.0.0.0:5000
#uwsgi 啟動(dòng)時(shí)所使用的地址與端口(這個(gè)是socke協(xié)議)
socket=0.0.0.0:8001
#指向網(wǎng)站目錄就是你那個(gè)包含flask項(xiàng)目的文件夾(如復(fù)制記得更改)
chdir=/home/xrf/mypython/flaskWeb
#python 啟動(dòng)程序文件就是包含if __name__ == "__main__":manager.run()的py文件(記得改哦)
wsgi-file=run.py
#python 程序內(nèi)用以啟動(dòng)的application 變量名 就是這個(gè):app = Flask(__name__)(記得改哦)
callable=app
#處理器數(shù)
processes=4
#線程數(shù)
threads=2
#狀態(tài)檢測(cè)地址
stats=127.0.0.1:9191
uwsgi uwsgi.ini
后臺(tái)殺掉uwsgi進(jìn)程
pkill -f uwsgi -9
? Python3 Nginx安裝:
Nginx
Uwsgi就是一個(gè)便攜的 web 服務(wù)器,當(dāng)然也可以做一個(gè)連接其他app的中間件,所以我們一般還是在它們前面檔一個(gè)更加專業(yè)的 HTTP 服務(wù)器——nginx,也就是上文提到的。僅僅只使用uWSGI的會(huì)有性能不夠,安全性不夠的情況。nginx是經(jīng)過(guò)長(zhǎng)時(shí)間驗(yàn)證的一個(gè)更好的服務(wù)器。
Nginx安裝
下載
wget http://nginx.org/download/nginx-1.21.2.tar.gz
解壓縮
tar zxvf nginx-1.10.2.tar.gz
進(jìn)入路徑
cd nginx-1.21.2
配置
./configure && make && make install
查找安裝路徑
whereis nginx
把安裝路勁添加到環(huán)境變量
vi ~/.bashrc
加上一句上面找到的nginx的路徑
export PATH=$PATH:/usr/local/nginx/sbin/
保存并退出
source ~/.bashrc
系統(tǒng)添加nginx服務(wù)
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
進(jìn)入目錄
cd /etc/init.d
修改權(quán)限
chmod 755 /etc/init.d/nginx
開(kāi)始注冊(cè)
chkconfig --add nginx
啟動(dòng)服務(wù)
service nginx start
nginx 管理服務(wù)命令
systemctl start nginx #開(kāi)啟nginx服務(wù)
systemctl stop nginx #停止nginx服務(wù)
systemctl restart nginx #重啟nginx服務(wù)
創(chuàng)建項(xiàng)目文件 hello.py
Vi /home/wwwroot/flask_project/hello.py
項(xiàng)目uwsgi配置文件 config.ini
Vi /home/wwwroot/flask_project/config.ini
系統(tǒng)nginx的配置文件
Vi /usr/local/nginx/conf/nginx.conf
關(guān)閉 uwsgi進(jìn)程
Pkill -f uwsgi -9
配置uwsgi以及啟動(dòng)nginx
Uwsgi –ini /home/wwwroot/flask_project/config.ini & systemctl restart nginx
? Python3 Supervisor安裝:
Supervisor
Supervisor(http://supervisord.org/)是用Python開(kāi)發(fā)的一個(gè)client/server服務(wù),是Linux/Unix系統(tǒng)下的一個(gè)進(jìn)程管理工具,不支持Windows系統(tǒng)。它可以很方便的監(jiān)聽(tīng)、啟動(dòng)、停止、重啟一個(gè)或多個(gè)進(jìn)程。用Supervisor管理的進(jìn)程,當(dāng)一個(gè)進(jìn)程意外被殺死,supervisort監(jiān)聽(tīng)到進(jìn)程死后,會(huì)自動(dòng)將它重新拉起,很方便的做到進(jìn)程自動(dòng)恢復(fù)的功能,不再需要自己寫(xiě)shell腳本來(lái)控制。
安裝supervisor
yum install -y supervisor
如果提示supervisor找不到,則使用如下指令:
Yum install epel-release
Yum install -y supervisor
如果有問(wèn)題
[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
創(chuàng)建默認(rèn)配置文件。
[root@localhost bin]# echo_supervisord_conf > /etc/supervisord.conf
修改/etc/supervisord.conf 默認(rèn)配置文件
Vi /etc/supervisord.conf
直接找到最下面的這個(gè)。
[include] # 這里的‘;’注釋去掉
;files = relative/directory/*.ini
files = /etc/supervisor/conf.d/*.conf # 這里加入自定義的配置文件文件路徑
創(chuàng)建自定義文件配置文件夾
[root@localhost etc]# mkdir -p supervisor/conf.d
[root@localhost etc]# cd supervisor/conf.d
[root@localhost conf.d]# vim uwsgi.conf
stopasgroup=true ;默認(rèn)為false,進(jìn)程被殺死時(shí),是否向這個(gè)進(jìn)程組發(fā)送stop信號(hào),包括子進(jìn)程
killasgroup=true ;默認(rèn)為false,向進(jìn)程組發(fā)送kill信號(hào),包括子進(jìn)程
殺掉已經(jīng)存在的進(jìn)程
Pkill -f supervisord -9
-c指定配置文件路徑,-n可前臺(tái)運(yùn)行,方便自己調(diào)試
/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 啟動(dòng)
Systemctl start nginx
啟動(dòng)supervisord
/usr/bin/supervisord -c /etc/supervisord.conf
殺掉supervisord進(jìn)程
Pkill -f supervisord -9
supervisor出現(xiàn)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自動(dòng)清掉。
樣例如下:
[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、修改權(quán)限
sudo chmod 777 -R /run
sudo chmod 777 -R /var
如果沒(méi)改,啟動(dòng)可能會(huì)報(bào)錯(cuò) IOError: [Errno 13] Permission denied: ‘/var/log/supervisord.log’
3、創(chuàng)建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、啟動(dòng)supervisord
? 參考資料:
Linux vi命令(vi編輯器)30分鐘入門(mén)教程 (biancheng.net)
http://c.biancheng.net/vi/
(4條消息) centos 7 網(wǎng)絡(luò)配置( 網(wǎng)關(guān)、dns、ip地址配置)_jcxch的專欄-CSDN博客
https://blog.csdn.net/jcxch/article/details/48632761
(4條消息) CentOS網(wǎng)絡(luò)配置與重啟方法_wxt_hillwill的博客-CSDN博客_centos重置網(wǎng)絡(luò)
https://blog.csdn.net/wxt_hillwill/article/details/113742637
CentOS 設(shè)置網(wǎng)絡(luò)(修改IP&修改網(wǎng)關(guān)&修改DNS) - 網(wǎng)絡(luò)愛(ài)上點(diǎn)擊 - 博客園 (cnblogs.com)
https://www.cnblogs.com/visi_zhangyang/articles/2429185.html
(4條消息) VMware虛擬機(jī)設(shè)置上網(wǎng)及與本地計(jì)算機(jī)通信_(tái)bobozai86的博客-CSDN博客_虛擬機(jī)網(wǎng)絡(luò)怎么設(shè)置可以與本機(jī)連接
https://blog.csdn.net/bobozai86/article/details/82699983
mysql細(xì)說(shuō)show slave status參數(shù)詳解(最全) - --smile - 博客園 (cnblogs.com)
https://www.cnblogs.com/--smile/p/11811715.html
(4條消息) CentOS7安裝MySQL(完整版)_程序員進(jìn)階之路-CSDN博客_centos7安裝mysql https://blog.csdn.net/qq_36582604/article/details/80526287
(4條消息) CentOS7上實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)主從備份_貧僧想吃肉的博客-CSDN博客_centos mysql 主從備份
https://blog.csdn.net/weixin_41659822/article/details/108146409
supervisor介紹與使用 - 雪山過(guò)客 - 博客園 (cnblogs.com)
https://www.cnblogs.com/blogyuhan/p/9330831.html
centos7中安裝python3 - 修瑾 - 博客園 (cnblogs.com)
https://www.cnblogs.com/xiujin/p/11477419.html
centos7建立刪除軟連接 - 豆?jié){D - 博客園 (cnblogs.com)
https://www.cnblogs.com/soymilk2019/p/14876096.html
CentOS+uWSGI+Nginx 配置Django Web服務(wù)器 (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下啟動(dòng)nginx出現(xiàn)Failed to start nginx.service:unit not found - ansibee - 博客園 (cnblogs.com)
https://www.cnblogs.com/ansibee/p/8087476.html
CentOS 7 Nginx 錯(cuò)誤集合 - The-fat - 博客園 (cnblogs.com)
https://www.cnblogs.com/wangye666/p/10225003.html
(4條消息) centos7重啟nginx報(bào)錯(cuò)解決辦法nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed_susu1083018911的博客-CSDN博客
https://blog.csdn.net/susu1083018911/article/details/103526372
(4條消息) uwsgi啟動(dòng)報(bào)錯(cuò) chdir(): No such file or directory [core/uwsgi.c line 2591]_中國(guó)移動(dòng)。4G的博客-CSDN博客
https://blog.csdn.net/weixin_42292991/article/details/95976016
阿里云:uwsgi--配置出錯(cuò) 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的安裝配置 - 云+社區(qū) - 騰訊云 (tencent.com)
https://cloud.tencent.com/developer/article/1416183
Centos7 搭建flask 應(yīng)用 nginx + uwsgi + flask - 肥冬瓜 - 博客園 (cnblogs.com)
https://www.cnblogs.com/grayhuang/p/13447968.html
CentOS7.2安裝配置nginx+uwsgi+python+flask運(yùn)行環(huán)境 - 挨踢學(xué)霸 - 博客園 (cnblogs.com)
https://www.cnblogs.com/itxb/p/8570119.html
CentOS7.2安裝配置nginx+uwsgi+python+flask運(yùn)行環(huán)境 - 挨踢學(xué)霸 - 博客園 (cnblogs.com)
https://www.cnblogs.com/itxb/p/8570119.html
Centos7 搭建flask 應(yīng)用 nginx + uwsgi + flask - 肥冬瓜 - 博客園 (cnblogs.com)
https://www.cnblogs.com/grayhuang/p/13447968.html
基于Centos7+Flask+Nginx+uWSGI+Python3的服務(wù)器網(wǎng)頁(yè)搭建教程 - Pyrokine - 博客園 (cnblogs.com)
https://www.cnblogs.com/Pyrokine/p/9095629.html
(4條消息) 阿里云centos 部署python flask應(yīng)用(centos+python3+nginx+flask+uwsgi+supervisor)_Courage-Hu的專欄-CSDN博客
https://blog.csdn.net/u012135009/article/details/87397166
Centos 7.6上supervisor問(wèn)題集錦- 阿文博客 (wenfeifei.com)
http://www.wenfeifei.com/art/detail/n0baZG7
(4條消息) supervisor出現(xiàn)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 - 云+社區(qū) - 騰訊云 (tencent.com)
https://cloud.tencent.com/developer/article/1744828
