前言
- 最近在學習CentOs服務器環境,剛好做騰訊小程序設計大賽,項目需要用到flask和爬蟲寫後端。本文記錄瞭如何部署flask項目
- 若是在Ubuntu上用nginx+uwsgi部署flask項目,可以參考我之前寫過的一篇筆記。
- 版本:python3.5.0,CentOs7.6
一.環境準備
- python3.5.0
- setuptools
- pip3
- uwsgi
- flask
-
安裝python3.5.0
- 下載python的包
[root@VM_0_15_centos local]# wget --no-check-certificate https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz [root@VM_0_15_centos local]# tar -zxvf python3.5.0[root@VM_0_15_centos local]# cd Python3.5.0[root@VM_0_15_centos local]# ./configure[root@VM_0_15_centos local]# make &&make install- 現在python3.5.0已經安裝好了,但是很可能你輸入
python3 --version會發現找不到python - 解決辦法:看第二步
- 下載python的包
-
uwsgi(/nginx/python/pip3等)安裝好後,command not found的解決辦法
find / -name uwsgi- 假設找到的地址為
/usr/local/bin/uwsgi - 建立軟連接
sudo ln -s /usr/local/bin/uwsgi /usr/bin/uwsgi - 注意:建立軟鏈接時最好sudo,不然很可能還是command not found
-
安裝setuptools
- 同樣下載setuptools的包
wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz#md5=c607dd118eae682c44ed146367a17e26 - 解壓
tar -zxvf setuptools-19.6.tar.gz cd setuptools-19.6- 分別執行
python3 setup.py build,python3 setup.py install -
順利的話:
Processing dependencies for setuptools==19.6 Finished processing dependencies for setuptools==19.6
- 同樣下載setuptools的包
-
安裝pip
- 同樣下載pip的包
wget --no-check-certificate https://pypi.python.org/packages/source/p/pip/pip-8.0.2.tar.gz#md5=3a73c4188f8dbad6a1e6f6d44d117eeb - 解壓
tar -zxvf pip-8.0.2.tar.gz cd pip-8.0.2- 分別執行
python3 setup.py build,python3 setup.py install -
順利的話:
Processing dependencies for pip==8.0.2 Finished processing dependencies for pip==8.0.2
- 同樣下載pip的包
-
安裝pip需要的openssl和openssl-devel
執行yum install openssl和yum install openssl-devel注意很可能還需
yum -y install python3-devel - 安裝uwsgi
pip3 install uwsgi -
安裝flask和項目需要的一些包(只是本項目需要的包)
首先進入到項目目錄裏pip3 install flaskpip3 install virtualenvpip3 install flask_sqlalchemypip3 install sqlalchemypip3 install flasggerpip3 install flask_corspip3 install pymysql
二.代理服務器配置
-
配置文件uwsgi.ini
sudo vim uwsgi.ini
基本內容:[uwsgi] chdir=/home/dbc/gameEvent callable=app wsgi-file=app.py processes = 5 #掛載uwsgi到內網(要保證nginx能訪問此內網) #也可以通過.sock文件與nginx通信 socket=127.0.0.1:5000 #http=0.0.0.0:8001#不用nginx的方式 chmod-socket=666 max-requests=1000 -
nginx配置
進入nginx的conf目錄下(目錄結構不一樣喲!)
cd /www/server/nginx/conf
sudo vim flask.confserver{ listen 8001; server_name 0.0.0.0; #訪問ip location / { include uwsgi_params; uwsgi_pass 127.0.0.1:5000; #代理到uwsgi.ini裏部署的ip+端口 #uwsgi_pass unix:uwsgi.sock;#通過.sock文件通信的寫法 } } - 生成uwsgi日誌目錄
mkdir /var/log/uwsgi - 跑起來
uwsgi uwsgi.ini -d /var/log/uwsgi.log
最後
- 參考鏈接:1,2
-
説明:uwsgi與nginx都是代理服務器,我們上面做的是將nginx掛載到公網某端口,將uwsgi掛載到內網某端口。當我們訪問nginx時,nginx自動將業務傳給uwsgi所在端口,然後uwsgi進行業務處理。所以我們的項目是部署到uwsgi上:
- uwsgi對內,nginx對外
- 對於類似ssl等操作,就可以直接在nginx上配置。