首頁 運維 Nginx 如何使用Docker部署Nginx+Flask+Mongo的應用

如何使用Docker部署Nginx+Flask+Mongo的應用

May 14, 2023 pm 04:16 PM
docker nginx flask

nginx做為伺服器,mongo為資料庫支持,flask為python語言的web框架,利用docker的容器特性,可以簡單地部署在linux伺服器上

##專案準備

專案主要目錄如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

__ project-name

  |__ docker-file

    |__ ningx

      |__ dockerfile

      |__ conf

        |__ nginx.conf

    |__ flask

      |__ dockerfile

      |__ requirements.txt

    |__ mongo

      |__ dockerfile

      |__ setup.sh

    |__ docker-compose.yml

  |__ src

    |__ app

      |__ ...

    |__ run.py

登入後複製

簡要說明

docker-file目錄為docker部署的設定檔

src目錄為flask應用的python程式碼

docker的詳細配置

docker-compose配置

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

version: '2.2'

services:

 mongo:

  build: ./mongo

  volumes:

   - "./mongo/db:/data/db"

  restart: always

  ports:

   - "27017:27017"

  environment:

   mongo_initdb_root_username: root

   mongo_initdb_root_password: 123456

 flask:

  build: ./flask

  links:

   - mongo

  ports:

   - "5000:5000"

  expose:

   - "5000"

  volumes:

   - ../src:/home/web

 nginx:

   build: ./nginx

   links:

    - flask

   volumes:

    - "./nginx/log:/var/log/nginx"

    - "../:/usr/share/nginx/html"

   ports:

    - "80:80"

    - "8080:8080"

    - "443:443"

   restart: always

登入後複製

mongodb的配置

/mongo/dockerfile的內容如下

1

2

3

4

5

6

7

8

9

10

11

12

from mongo:3.6

# 设置时区

env tz=asia/shanghai

run ln -snf /usr/share/zoneinfo/$tz /etc/localtime && echo $tz > /etc/timezone

# 设置工作目录

env workdir /usr/local/work

env auto_run_dir /docker-entrypoint-initdb.d

env install_mongo_shell setup.sh

run mkdir -p $workdir

# 复制数据库的初始化命令

copy ./$install_mongo_shell $auto_run_dir/

run chmod +x $auto_run_dir/$install_mongo_shell

登入後複製

/mongo/setup.sh的內容如下

該檔案的目的是,啟動mongodb後建立一個密碼為test的使用者test,並賦予它資料庫test的讀寫操作


1

2

3

4

5

6

7

8

#!/bin/bash

mongo <<eof

use admin;

db.auth('root', '123456');

use dmx_aluminum;

db.createuser({user:'test',pwd:'test',roles:[{role:'readwrite',db:'test'}]});

db.createcollection("user");

eof

登入後複製

flask應用的配置

/flask/dockerfile的內容如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

from python:3.6

# 设置时区

env tz=asia/shanghai

run ln -snf /usr/share/zoneinfo/$tz /etc/localtime && echo $tz > /etc/timezone

 

# 设置工作区

run mkdir -p /home/web

workdir /home/web

# 添加依赖

add requirements.txt /home/web/requirements.txt

run pip3 install -i https://pypi.douban.com/simple/ -r requirements.txt

 

# 使用gunicorn启动应用

cmd gunicorn -w 4 -b 0.0.0.0:5000 run:app

登入後複製

/src/app/run.py的程式碼

此處註解了調試用的app.run(),發佈時用gunicorn啟動


1

2

3

4

5

from app import create_app

app = create_app('default')

app.debug=false

# if __name__ == '__main__':

#  app.run()

登入後複製

nginx的設定

/nginx/dockerfile的內容如下

1

2

3

4

5

6

from nginx:1.14

# 设置时区

env tz=asia/shanghai

run ln -snf /usr/share/zoneinfo/$tz /etc/localtime && echo $tz > /etc/timezone

# 复制配置

copy conf/nginx.conf /etc/nginx/nginx.conf

登入後複製

/nignx/conf/nginx.conf的內容如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

user nginx;

worker_processes 1;

 

error_log /var/log/nginx/error.log warn;

pid    /var/run/nginx.pid;

 

events {

  worker_connections 1024;

}

 

 

http {

  include    /etc/nginx/mime.types;

  default_type application/octet-stream;

 

  log_format main '$remote_addr - $remote_user [$time_local] "$request" '

           '$status $body_bytes_sent "$http_referer" '

           '"$http_user_agent" "$http_x_forwarded_for"';

 

  access_log /var/log/nginx/access.log main;

 

  sendfile    on;

  #tcp_nopush   on;

 

  keepalive_timeout 65;

 

  # 开启gzip

  gzip on;

  gzip_min_length 1k;

  gzip_buffers 4 16k;

  #gzip_http_version 1.0;

  gzip_comp_level 1;

  gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;

  gzip_vary off;

  gzip_disable "msie [1-6]\.";

 

  server {

    listen 80;

    server_name localhost;

    keepalive_timeout 5;

    root /usr/share/nginx/html;

 

    location /static/ {

      alias /usr/share/nginx/html/src/app/static/;

    }

 

    location / {

      # checks for static file, if not found proxy to app

      try_files $uri @flask_app;

    }

 

    location @flask_app {

      proxy_pass http://192.168.0.2:5000; # 发布在阿里云上,应填写内网ip

      proxy_redirect off;

      proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;

      proxy_set_header host $http_host;

      proxy_set_header x-real-ip $remote_addr;

 

      #proxy_buffers 8 32k;

      #proxy_buffer_size 64k;

 

    }

  }

 

 

}

登入後複製

#啟動部署

    ##進入docker-flie目錄cd docker- flie
  1. 啟動docker docker-compose up
  2. #檢視容器狀態docker ps
  3. ##本機部署瀏覽器輸入127.0.0.1即可
  4. 最後出現類似docker_file_nginx_1,docker_file_mongo_1, docker_file_flask_1的3個容器,說明成功! ! !

踩坑吐槽

1 mongol容器中的初始化檔需要放在docker-entrypoint-initdb.d 目錄下

#本人做過以下嘗試,會顯示mongdb未啟動。

1

2

3

add setup.sh /data/setup.sh

run chmod +x /data/setup.sh

cmd ["/data/setup.sh"]

登入後複製

2 flask應用程式無法連接mongo,本文使用link方式。

在資料庫的配置應相應寫成:

1

2

3

4

5

6

7

mongodb_settings = {

    'db': 'test',

    'host': 'mongo', # 127.0.0.1 host地址一定要写你配置的--link的名字

    'username': 'test',

    'password': 'test',

    'port': 27017

  }

登入後複製

本地測試時改回127.0.0.1

3 nginx中配置使用的代理模式,其中執行flask應用的ip,應為內網ip

#

以上是如何使用Docker部署Nginx+Flask+Mongo的應用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

兩個點博物館:邦格荒地地點指南
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

兩個點博物館:邦格荒地地點指南
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

pycharm如何將project打包 pycharm如何將project打包 Apr 25, 2024 am 03:54 AM

pycharm如何將project打包

deepseek怎麼安裝 deepseek怎麼安裝 Feb 19, 2025 pm 05:48 PM

deepseek怎麼安裝

PHP 微服務容器化的敏捷開發與維 PHP 微服務容器化的敏捷開發與維 May 08, 2024 pm 02:21 PM

PHP 微服務容器化的敏捷開發與維

Pi Node教學:什麼是Pi節點?如何安裝和設定Pi Node? Pi Node教學:什麼是Pi節點?如何安裝和設定Pi Node? Mar 05, 2025 pm 05:57 PM

Pi Node教學:什麼是Pi節點?如何安裝和設定Pi Node?

html檔案怎麼產生網址 html檔案怎麼產生網址 Apr 21, 2024 pm 12:57 PM

html檔案怎麼產生網址

PHP 分散式系統架構與實務 PHP 分散式系統架構與實務 May 04, 2024 am 10:33 AM

PHP 分散式系統架構與實務

Docker三分鐘搞定LLama3開源大模型本地部署 Docker三分鐘搞定LLama3開源大模型本地部署 Apr 26, 2024 am 10:19 AM

Docker三分鐘搞定LLama3開源大模型本地部署

使用Docker Container部署JavaEE應用程式 使用Docker Container部署JavaEE應用程式 Jun 05, 2024 pm 08:29 PM

使用Docker Container部署JavaEE應用程式

See all articles