写点什么

CentOS6 搭建 nginx+uwsgi+flask

作者:haiger13
  • 2022 年 8 月 04 日
  • 本文字数:2583 字

    阅读完需:约 8 分钟

CentOS6搭建nginx+uwsgi+flask

记一次使用 CentOS6 搭建 nginx+uwsgi+flask 的具体步骤,以及遇到问题的解决方案。


一、安装 pyton3.6.5

执行 shell 脚本 安装,把一组命令组合成一个脚本执行:

#!/bin/bashecho "正在安装相关组件"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 -lcryptoEOF
echo "正在编译安装Python"./configure --prefix=/usr/local/python3 && make && make installcd /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_profilesource ~/.bash_profile
echo "添加python3 pip3软链"rm -rf /usr/local/bin/python3rm -rf /usr/bin/pip3
ln -s /usr/local/python3/bin/python3.6 /usr/local/bin/python3ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
echo "安装完成,请执行python3进行测试"
复制代码


测试是否成功


测试 ssl 模块是否正常加入,没报错就是正常


测试 pip3 是否成功

二、创建虚拟环境

创建一个项目文件夹,然后创建一个虚拟环境。创建完成后项目文件夹中会有一个 venv 文件夹:

mkdir /usr/local/projectcd /usr/local/projectpython3 -m venv venv
复制代码

进入虚拟环境

. venv/bin/activate
复制代码

三、安装 flask、uwsgi

pip3 install Flask -i https://pypi.tuna.tsinghua.edu.cn/simplepip3 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=:8987socket=127.0.0.1:8001wsgi-file=/usr/local/project/helloword.pycallable=appprocesses=4threads=2stats=127.0.0.1:9191vacuum=true
复制代码

安装 nginx

yum install 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 supervisorecho_supervisord_conf > supervisor.conf  # 生成 supervisor 默认配置文件vim supervisor.conf            # 修改 supervisor 配置文件,添加 uwsgi 进程管理mv supervisor.conf /etc/
复制代码

修改配置文件增加 uwsgi 子进程配置

vim /etc/supervisor.conf
复制代码


[program:uwsgi]redirect_stderr=truecommand=/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 defaultport=*:9001        ; ip_address:port specifier, *:port for all ifaceusername=user              ; default is no username (open server)password=123               ; default is no password (open server)
复制代码


新建 uwsgi 日志文件

supervisord -c /etc/supervisor.confsupervisorctl -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.sockchmod 777 /var/run/supervisor.socksupervisorctl reload
复制代码


运行 supervisorct 报如下错误:

supervisorctl unix:///var/run/supervisor.sock refused connection

解决办法:

unlink /var/run/supervisor.sockunlink /tmp/supervisor.sock
复制代码

如果报如下错:

Unlinking stale socket /var/run/supervisor.sock

解决办法:

unlink /var/run/supervisor.sock
复制代码


用户头像

haiger13

关注

还未添加个人签名 2022.08.03 加入

还未添加个人简介

评论

发布
暂无评论
CentOS6搭建nginx+uwsgi+flask_签约计划第三季_haiger13_InfoQ写作社区