目錄
1,網絡架構
2,環境安裝
2.1,安裝yum:Shell軟件包管理器
2.2 安裝python
2.3 安裝uWSGI
2.4 安裝Flask
3,上傳工程包到服務器,打包Flask項目
4,創建和配置 uwsgi 配置文件 uwsgi.ini
4.1配置文件
4.2配置文件注釋詳解
5,啟動服務
6,安裝nginx
7,nginx配置
8,啟動nginx
1,網絡架構
為什么使用Flask + uWSGI + Nginx 部署服務?
調用流:當客戶端發送服務請求時,若使用nginx作為代理服務器的話,先轉為nginx服務器處理,然后再轉給uwsgi服務器,再由uwsgi來調用項目中的代碼處理服務請求并返回。
2,環境安裝
2.1,安裝yum:Shell軟件包管理器
wget http://yum.baseurl.org/download/3.2/yum-3.2.28.tar.gz
tar -zxvf yum-3.2.28.tar.gz
cd yum-3.2.28 sudo apt install yum
2.2 安裝python
sudo apt-get install python3
也可以用yum安裝:
sudo yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz
2.3 安裝uWSGI
pip install uwsgi
2.4 安裝Flask
pip install flask
3,上傳工程包到服務器,打包Flask項目
????????3.1 使用SCP命令上傳包
????????3.2 工具上傳也是可以的,XShell,Filezilla
4,創建和配置 uwsgi 配置文件 uwsgi.ini
4.1配置文件
touch uwsgi.ini
vim uwsgi.ini
配置如下:
[uwsgi]
http=0.0.0.0:443
chdir=/usr/flask/ ?#視具體目錄而定
wsgi-file=/usr/flask/app.py ?#視具體目錄、文件命名情況而定
callable=app
master=true
processes=1
threads=10
daemonize=uwsgi.log
disable-logging=true
pidfile=uwsgi.pid
buffer-size=65536
harakiri=60
vacuum=True
4.2配置文件注釋詳解
[uwsgi]
socket=0.0.0.0:5000 #socket協議,用于和nginx通訊,端口可配置成別的端口;如果有nginx在uwsgi之前作為代理的話應該配socket ? 如:socket=0.0.0.0:5000,
#而如果客戶端請求不經過(不搭建)Nginx代理服務器,服務請求直接到uwsgi服務器的話那么就配http。如:http=0.0.0.0:5000;IP和端口與項目啟動文件app.py中一致; 127.0.0.1雖然是表示本地IP,但想要在網絡上訪問必須設置host=0.0.0.0才不受IP限制
chdir=/usr/flask/ #項目目錄,定位到項目的第一層,具體配置根據實際目錄情況而定,如項目名稱為falsk
wsgi-file=/usr/flask/manage.py #項目啟動文件,實際也可能不是這個命名(需要帶上文件路徑,視具體目錄情況而定)
callable=app #程序內的application變量名,也即執行run方法的那個實例的名稱
master=true #啟動主進程,來管理其他進程,其它的uwsgi進程都是這個master進程的子進程,如果kill這個master進程,相當于重啟所有的uwsgi進程。
processes=4 ?#進程數
threads=10 #每個進程中線程數
daemonize=uwsgi.log #使進程在后臺運行,并將日志打到指定的日志文件,文件若不存在則會自動創建
disable-logging=true :#不記錄請求信息的日志,只記錄錯誤以及uWSGI內部消息到日志中。如果不開啟這項,日志中會大量請求記錄:
pidfile=uwsgi.pid #進程號存儲文件,若不存在則會自動創建,pid里面只記錄一個進程號,若存在多個進程processes,則使用uwsgi命令通過uwsgi.pid文件停止、重啟uwsgi服務不全
buffer-size=65536#設置用于uwsgi包解析的內部緩存區大小為64k,默認是4k。不設置該關鍵字,請求超過4k就會報錯,
harakiri=60# 超過時間,單位秒
vacuum=True # 當服務器退出的時候自動清理環境
5,啟動服務
若進入項目下(uwsgi.ini所在的文件夾下),執行如下啟動命令:
uwsgi --ini uwsgi.ini # 啟動uwsgi服務
啟動成功信息:
[uWSGI] getting INI configuration from uwsgi.inips -ef |grep uwsgi ? ? ? ? ? ?查看當前是否開啟的uwsgi進程
啟動失敗可查看uwsgi日志,日志位置在配置文件中我們自己配置的路徑 tail -f uwsgi
6,安裝nginx
yum install nginx
7,nginx配置
修改nginx配置文件nginx.conf ,將原來默認內容刪掉,添加如下:
server {
? ? listen ? ? ? 80;
? ? server_name ?localhost;
? ? location / {
? ? ? ? include uwsgi_params;
? ? ? ? uwsgi_pass 127.0.0.1:5000;
? ? }
}
說明:
listen監聽端口,也就是我們在瀏覽器要訪問的端口,默認80;Nginx在80端口上監聽從外部來的請求,并把所有請求轉發到監聽5000端口的WSGI應用。
server_name外網訪問服務器的地址
include uwsgi_params 引入uwsgi配置
proxy_pass就是啟動flask項目綁定的host和port,也即應用程序啟動文件app.py中配置的host和port,配置與uwsgi的配置文件里的socket一致。
備注:如果有多個項目的話,在一個nginx下部署多個應用, 如果用域名到很簡單配置多個nginx?server?和uwsgi就可以:
# 第一個服務器
server {
? ? listen ? ? ?192.168.1.1:80; # 監聽此ip的80端口
? ? server_name example.org www.example.org; # 服務器名
? ? ...
}# 第二個服務器
server {
? ? listen ? ? ?192.168.1.1:80 default_server; # 監聽此ip的80端口
? ? server_name example.net www.example.net; # 服務器名,為此ip,端口的默認服務器
? ? ...
}# 第三個服務器
server {
? ? listen ? ? ?192.168.1.2:80 default_server; # 監聽此ip的80端口
? ? server_name example.com www.example.com; # 服務器名,為此ip,端口的默認服務器
? ? ...
}
8,啟動nginx
service nginx start #啟動nginx
service nginx status # 查看nginx狀態,是否啟動
service nginx restart # 重啟nginx
ps -ef |grep nginx # 查看nginx是否已啟動
kill -9 nginx ?#強制停止
tail -f error.log ? ?#查看nginx日志