记一次使用 CentOS6 搭建 nginx+uwsgi+flask 的具体步骤,以及遇到问题的解决方案。
一、安装 pyton3.6.5
执行 shell 脚本 安装,把一组命令组合成一个脚本执行:
#!/bin/bash
echo "正在安装相关组件"
yum install -y openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc-c++ gcc openssl-devel
#echo "下载安装包"
#wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
echo "正在解压安装包"
tar -xf Python-3.6.5.tgz && cd /opt/Python-3.6.5/
echo "添加ssl支持"
cat >> /opt/Python-3.6.5/Modules/Setup.dist <<"EOF"
_socket socketmodule.c
SSL=/usr/local/ssl
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
EOF
echo "正在编译安装Python"
./configure --prefix=/usr/local/python3 && make && make install
cd /root
echo "删除安装包"
rm -rf /opt/Python-3.6.5.tgz && rm -rf /opt/Python-3.6.5
echo "正在添加环境变量"
echo "export PATH=/usr/local/python3/bin:$PATH">> ~/.bash_profile
source ~/.bash_profile
echo "添加python3 pip3软链"
rm -rf /usr/local/bin/python3
rm -rf /usr/bin/pip3
ln -s /usr/local/python3/bin/python3.6 /usr/local/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
echo "安装完成,请执行python3进行测试"
复制代码
测试是否成功
测试 ssl 模块是否正常加入,没报错就是正常
测试 pip3 是否成功
二、创建虚拟环境
创建一个项目文件夹,然后创建一个虚拟环境。创建完成后项目文件夹中会有一个 venv 文件夹:
mkdir /usr/local/project
cd /usr/local/project
python3 -m venv venv
复制代码
进入虚拟环境
三、安装 flask、uwsgi
pip3 install Flask -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple
复制代码
创建 helloworld.py 启动 Flask web 应用
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route("/",methods=["GET"])
def indexFun():
return "index"
@app.route("/helloWorld")
def helloWorld():
print('请求方式----》', request.method)
args = request.args.get("name") or "args没有"
print('', args)
form = request.form.get('test') or 'form没有'
print('', form)
return jsonify(success=True, args=args, form=form)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8987, debug=True)
复制代码
创建 uwsgi.ini
[uwsgi]
http=:8987
socket=127.0.0.1:8001
wsgi-file=/usr/local/project/helloword.py
callable=app
processes=4
threads=2
stats=127.0.0.1:9191
vacuum=true
复制代码
安装 nginx
修改 nginx.conf 文件 代理 uwsgi 请求
upstream flask{
server 127.0.0.1:8001;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
include uwsgi_params;
uwsgi_pass flask;
}
}
复制代码
nginx 启动
/usr/local/nginx/sbin/nginx
uwsgi 启动
uwsgi uwsgi.ini / 后台启动 uwsgi -d --ini uwsgi.ini
退出虚拟环境
deactivate
请求
http://localhost
http://localhost/helloWorld?name=haha
后记
pip3 安装组件 最好换源 -i https://pypi.tuna.tsinghua.edu.cn/simple 国内源快很多,还有尽量都使用同一个源安装,以防出现不兼容问题。
新补充
使用 supervisor 管理 uwsgi 服务,以及后续遇到的问题解决方案:
https://blog.csdn.net/qq_35304570/article/details/80304482
此链接中 supervisor 部分
安装 supervisor,新增配置文件到 etc 下
pip3 install supervisor
echo_supervisord_conf > supervisor.conf # 生成 supervisor 默认配置文件
vim supervisor.conf # 修改 supervisor 配置文件,添加 uwsgi 进程管理
mv supervisor.conf /etc/
复制代码
修改配置文件增加 uwsgi 子进程配置
[program:uwsgi]
redirect_stderr=true
command=/usr/local/project/venv/bin/uwsgi /usr/local/project/uwsgi.ini ;supervisor启动命令
directory=/usr/local/project ; 项目的文件夹路径
startsecs=0 ; 启动时间
stopwaitsecs=0 ; 终止等待时间
autostart=true ; 是否自动启动
autorestart=true ; 是否自动重启
stdout_logfile=/usr/local/project/uwsgi/logs/uwsgi.log ; log 日志
stderr_logfile=/usr/local/project/uwsgi/logs/uwsgi.err ; 错误日志
复制代码
打开这几项注释
[inet_http_server] ; inet (TCP) server disabled by default
port=*:9001 ; ip_address:port specifier, *:port for all iface
username=user ; default is no username (open server)
password=123 ; default is no password (open server)
复制代码
新建 uwsgi 日志文件
supervisord -c /etc/supervisor.conf
supervisorctl -c /etc/supervisor.conf status
supervisorctl -c /etc/supervisor.conf start uwsgi
复制代码
启动过程中可能遇到的错误:
unix:///var/run/supervisor.sock no such file
https://blog.csdn.net/weixin_41762173/article/details/88901970
解决办法:
修改/etc/supervisor.conf 中路径
[unix_http_server]
file=/var/run/supervisor.sock ; the path to the socket file
...
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
复制代码
执行命令重启 supervisor
touch /var/run/supervisor.sock
chmod 777 /var/run/supervisor.sock
supervisorctl reload
复制代码
运行 supervisorct 报如下错误:
supervisorctl unix:///var/run/supervisor.sock refused connection
解决办法:
unlink /var/run/supervisor.sock
unlink /tmp/supervisor.sock
复制代码
如果报如下错:
Unlinking stale socket /var/run/supervisor.sock
解决办法:
unlink /var/run/supervisor.sock
复制代码
评论