flask+uwsgi+nginx+docker-compose部署


  • 簡單介紹

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容器

 

  • 正式部署
  1. 先看下目錄

    創建文件夾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

完畢!

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM