千家信息网

使用Docker部署Nginx+Flask+Mongo的应用

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,Nginx做为服务器,Mongo为数据库支持,Flask为Python语言的Web框架,利用Docker的容器特性,可以简单地部署在linux服务器上项目准备项目主要目录如下__ project-na
千家信息网最后更新 2026年11月01日使用Docker部署Nginx+Flask+Mongo的应用

Nginx做为服务器,Mongo为数据库支持,Flask为Python语言的Web框架,利用Docker的容器特性,可以简单地部署在linux服务器上

项目准备

项目主要目录如下

__ 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配置

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的内容如下

FROM mongo:3.6# 设置时区ENV TZ=Asia/ShanghaiRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone# 设置工作目录ENV WORKDIR /usr/local/workENV AUTO_RUN_DIR /docker-entrypoint-initdb.dENV INSTALL_MONGO_SHELL setup.shRUN 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的读写操作

#!/bin/bashmongo <

Flask应用的配置

/flask/Dockerfile的内容如下

FROM python:3.6# 设置时区ENV TZ=Asia/ShanghaiRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone# 设置工作区RUN mkdir -p /home/webWORKDIR /home/web# 添加依赖ADD requirements.txt /home/web/requirements.txtRUN 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启动

from app import create_appapp = create_app('default')app.debug=False# if __name__ == '__main__':#  app.run()

Nginx的配置

/nginx/Dockerfile的内容如下

FROM nginx:1.14# 设置时区ENV TZ=Asia/ShanghaiRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone# 复制配置COPY conf/nginx.conf /etc/nginx/nginx.conf

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

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;    }  }}

启动部署

  1. 进入docker-flie目录 cd docker-flie
  2. 启动docker docker-compose up
  3. 查看容器状态 docker ps
  4. 本地部署浏览器输入 127.0.0.1即可

最后出现类似docker_file_nginx_1,docker_file_mongo_1, docker_file_flask_1的3个容器,说明成功!!!

踩坑吐槽

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

本人做过如下尝试,会显示 mongdb未启动。

ADD setup.sh /data/setup.shRUN chmod +x /data/setup.shCMD ["/data/setup.sh"]

2 flask应用无法连接mongo,本文使用link方式。

在数据库的配置应相应写成:

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

配置 内容 目录 应用 容器 数据 数据库 文件 时区 代码 服务器 项目 工作 支持 服务 成功 名字 命令 地址 密码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司经营范围 湖南永感互联网科技有限公司 圆梦互联网科技 互联网核心科技是什么 互联网科技有限公司图片 互联网与科技金融数据 互联网 科技 电子科技大学互联网 国外互联网科技网站 丰台科技园 互联网公司 深圳卡尔迅互联网科技有限公司怎么样 栖莱科技互联网股份有限公司 厦门千工互联网科技有限公司 互联网金融科技展 互联网科技的全部知识 深圳无忧互联网科技 卡尔迅互联网科技有限公司 江苏互联网智能科技产品出厂价 平安好医生打造互联网科技医疗 互联网的黑科技实验室 广州紫鲸互联网科技有限公司 万易互联网科技有限公司 菲比寻常互联网科技 昭通云南众福互联网科技有限公司 成都铂石互联网科技做什么的 湖北码尼互联网科技有限公司电话 中国科技创新与世界互联网大会 华夏恒生科技与互联网科技 广州百诚互联网科技有限公司官网 优雇互联网科技有限公司
0