Centos+Nginx+Uwsgi+Flask部署上的那些坑

坑1:没有python3环境

从部门申请了一个centos系统的虚拟机,然而这个虚拟机的系统有点老,自带只有python2.7.4的系统,没有python3的系统,因为项目都是用python3写的,所以无奈开始安装python3,好在网上的教程比较多。

https://www.cnblogs.com/FZfangzheng/p/7588944.html

跟着教程,顺利的完成了python3的环境

坑2:安装uwsgi之后找不到了

说起来有点好笑,安装完uwsgi之后竟然找不到了

使用pip3安装uwsgi

pip3 install uwsgi

提示安装成功,但在终端输入uwsgi命令时却提示没有该命令。

原因:因为在安装python3的时候是安装在/usr/local/python3路径中,所以uwsgi的启动文件和python3一个路径中,在/usr/local/python3/bin/uwsgi.

所以这里做一个软链接就可以

ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

再输入uwsgi就可以找到命令了,对了,要确认uwsgi的版本,是python2还是python3的版本

uwsgi --python-version

坑3:配置uwsgi和nginx

网上的好多教程都是用最简单flask程序,自己使用使用manager.py启动脚本,uwsgi的配置基本上用户到,所以只能各种摸索,贴上自己uwsgi的配置, app.ini

[uwsgi]
base_dir = /home/chat1.0
chdir = /home/chat1.0/chat
wsgi-file = manager.py
callable = app

socket = %(base_dir)/chat.sock
#http-socket = 172.26.1.193:8080
chmod-socket = 666

processes = 4
threads = 2

master = true
daemonize = %(base_dir)/chat.log
pidfile  = %(base_dir)/chat.pid

创建自己的 app.ini uwsgi启动文件

base_dir:  用于存储app.ini, app.pid, app.log的目录

chdir: 项目所在根目录,也就是manager.py所在的位置

wsgi-file: flask项目的启动脚本

callable: Flask()实例的名称

socket: 用于与nginx通信的socket

http-socket: 未与nginx链接时的测试用地址

chmod-socket: 保证socket的权限

master: 保留uwsgi的主进程,便于写自启动服务

daemonize: 后台启动时的log文件位置

pidfile: 存放uwsgi主进程的pid地址

 

nginx的配置就相比比较简单了,通过yum安装完nginx, 进入到nginx的安装文件夹

cd /etc/nginx/conf.d/
sudo vim app.conf

新建一个自己的配置文件app.conf,贴上自己的代码

server {
        listen 80;
        server_name 172.26.1.193;

        location / {
                include uwsgi_params;
                uwsgi_pass unix:/home/chat1.0/chat.sock;
        }
}

listen: 监听的端口号

server_name: ip地址

uwsgi_pass: 上面定义app.ini中设定的.sock文件,绝对路径

坑4:都配置好了,还是不行

uwsgi与nginx都如上配置完毕,然后还是报502错误,查看nginx的日志

sudo vim /var/log/nginx/error.log

提示:failed (13: Permission denied) while connecting to upstream

原来selinux的配置问题,将selinux关闭,重启系统就可以了

sudo vim /etc/selinux/config

改为 SELINUX=disabled

然后保存重启系统就可以了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章