记一次使用 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
   复制代码
 进入虚拟环境
三、安装 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
修改 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 子进程配置
 [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
   复制代码
 
评论