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

然後保存重啓系統就可以了

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