- 簡單介紹
Flask這里就不多闡述了,已經是很流行的一個輕量級python框架了,對於小、中型項目特別適合。這里用docker的compose編排部署.
uwsgi 簡單的說明下,uWSGI是一個Web服務器,它實現了WSGI協議、uwsgi、http等協議。
Nginx中HttpUwsgiModule的作用是與uWSGI服務器進行交換。
WSGI是一種Web服務器網關接口。它是一個Web服務器(如nginx,uWSGI等服務器)與web應用(如用Flask框架寫的程序)通信的一種規范。
這是官方說法,大概還是看具體例子能夠說明一切,https://www.runoob.com/python3/python-uwsgi.html(這里是http方式),另外一種是socket方式,
下面附一張圖來說明
現在大部分web服務器(如nginx)支持uwsgi, socket是最高效的一種網絡通信方式,socket通信速度會比http快
uwsgi.ini的配置說明:
1 http-socket=:5000//配置uwsgi監聽的socket(ip+端口) 2 callable=app//uwsgi調用的python應用實例名稱,Flask里默認是app,根據具體項目代碼實例命名來設置 3 wsgi-file=server.py//調用的主程序文件,絕對路徑或相對於該ini文件位置的相對路徑均可 4 master=true//以獨立守護進程運行 5 processes=8//配置進程數量 6 threads=4//配置線程數量 7 enable-threads=true//允許在請求中開啟新線程 8 stats=127.0.0.1:9191//返回一個json串,顯示各進程和worker的狀態 9 pidfile=uwsgi.pid//存放uwsgi進程的pid,便於重啟和關閉操作 10 listen=1024//監聽隊列長度,默認100,設置大於100的值時,需要先調整系統參數 11 chdir = /project //指定項目目錄為主目錄 12 daemonize=uwsgi.daemonize.log//以守護進程運行,日志文件路徑 13 memory-report=true//啟用內存報告,報告占用的內存 14 buffer-size=65535//設置請求的最大大小 (排除request-body),這一般映射到請求頭的大小。默認情況下,它是4k,大cookies的情況下需要加大該配置
docker-compose的一些常用操作
1 docker-compose up -d nginx 構建建啟動nignx容器 2 3 docker-compose exec nginx bash 登錄到nginx容器中 4 5 docker-compose down 刪除所有nginx容器,鏡像 6 7 docker-compose ps 顯示所有容器 8 9 docker-compose restart nginx 重新啟動nginx容器 10 11 docker-compose run --no-deps --rm php-fpm php -v 在php-fpm中不啟動關聯容器,並容器執行php -v 執行完成后刪除容器 12 13 docker-compose build nginx 構建鏡像 。 14 15 docker-compose build --no-cache nginx 不帶緩存的構建。 16 17 docker-compose logs nginx 查看nginx的日志 18 19 docker-compose logs -f nginx 查看nginx的實時日志 20 23 docker-compose config -q 驗證(docker-compose.yml)文件配置,當配置正確時,不輸出任何內容,當文件配置錯誤,輸出錯誤信息。 24 25 docker-compose events --json nginx 以json的形式輸出nginx的docker日志 26 27 docker-compose pause nginx 暫停nignx容器 28 29 docker-compose unpause nginx 恢復ningx容器 30 31 docker-compose rm nginx 刪除容器(刪除前必須關閉容器) 32 33 docker-compose stop nginx 停止nignx容器 34 35 docker-compose start nginx 啟動nignx容器
- 正式部署
- 先看下目錄
創建文件夾mkdir docker-flask
創建文件docker-compose.yml nginx.conf 文件夾webapp
cd webapp里面創建文件Dockerfile app.py requirements.txt uwsgi.ini
文件內容依次如下:
docker-compose.yml
1 version: "2" 2 services: 3 webapp: 4 build: ./webapp #webapp目錄地址,當前文件夾 5 container_name: webapp #容器名稱 6 nginx: 7 image: nginx #需要nginx鏡像,所以最好在本地事先生成一個nginx鏡像 8 volumes: 9 - ./nginx.conf:/etc/nginx/conf.d/default.conf #做配置映射 10 depends_on: 11 - webapp #依賴webapp 12 ports: 13 - "8888:80"
編排服務的其實就是將多個分別的服務關聯到一起啟動,可以事先對每個服務先做下單獨的運行,都成功的話,在配置的docker-compose里面。
nginx.conf
server { listen 80; server_name 0.0.0.0; location / { include uwsgi_params; uwsgi_pass webapp:8002; } }
webapp文件夾里的文件內容
Dockerfile
1 FROM python:3.5 2 ENV TZ=Asia/Shanghai 3 RUN mkdir /webapp 4 WORKDIR /webapp #指定工作目錄 5 COPY . /webapp 6 7 RUN pip install -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com -r requirements.txt #這里用國內信任的豆瓣源,速度比較快 8 9 CMD ["uwsgi", "--ini", "/webapp/uwsgi.ini"] #初始化的啟動操作
app.py
1 #!/usr/bin/env python 2 #coding=utf-8 3 4 from flask import Flask,render_template_string 5 6 app = Flask(__name__) 7 8 @app.route("/") 9 def index(): 10 return render_template_string('<h1>Hello Flask</h1>') 11 12 if __name__ == "__main__": 13 app.run(debug=True,host='127.0.0.1',port=5000) #這里是用python app.py啟動的設置,如果用uwsgi這種,可以無需關注
requirements.txt
1 Flask 2 uwsgi
uwsgi.ini
1 [uwsgi] 2 module = app:app #目錄.文件:app對象 3 #callable = app #或者這么設置 4 master = true 5 processes = 4 6 chdir = /webapp #指定運行目錄 7 socket = :8002 #監聽端口 8 chmod-socket = 666 9 logto = /webapp/app.log 10 vacuum = true
2、都配置完成后,在docker-flask目錄下執行
docker-compose up 或者 docker-compose up -d 后台運行
docker ps 查看運行的容器
docker-compose ps 查看運行的服務
3、如果沒什么問題的話在瀏覽器直接輸入 127.0.0.1:8888就會看到
Hello Flask
完畢!