在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

Docker如何部署Nginx+Flask+Mongo

103次阅读
没有评论

共计 3885 个字符,预计需要花费 10 分钟才能阅读完成。

自动写代码机器人,免费开通

丸趣 TV 小编给大家分享一下 Docker 如何部署 Nginx+Flask+Mongo,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

使用 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/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 的读写操作

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

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 启动

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

Nginx 的配置

/nginx/Dockerfile 的内容如下

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

user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
 worker_connections 1024;

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 启动 docker docker-compose up 查看容器状态 docker ps 本地部署浏览器输入 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.sh
RUN chmod +x /data/setup.sh
CMD [/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

以上是“Docker 如何部署 Nginx+Flask+Mongo”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

向 AI 问一下细节

丸趣 TV 网 – 提供最优质的资源集合!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-18发表,共计3885字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 成人又黄又爽又色的网站 | 精品一区二区三区免费视频 | 女人让男人桶爽30分钟 | 一区二区三区午夜 | 成人在线观看播放 | 草草草视频在线观看 | 欧美精品人人做人人爱视频 | 人妻熟女αⅴ一区二区三区 | 福利在线免费观看 | 国产亚洲欧美日韩俺去了 | 久久国产高潮流白浆免费观看 | 日本无码人妻波多野结衣 | 国产又色又爽又高潮免费 | 国产又色又爽又黄又免费软件 | 中文字幕久久第13页 | 天堂亚洲国产日韩在线看 | 一二三四在线视频观看社区 | 狼色精品人妻在线视频免费 | 成人久久久精品乱码一区二区三区 | 色婷婷亚洲综合 | 亚洲精品无码乱码成人 | 性一交一乱一乱一视频 | 亚洲综合精品一区二区三区 | 亚洲 欧美 小说 | 久久精品国产无限资源 | 五十路熟女一区二区三区 | 久久国产自偷自免费一区100 | 99久久99热精品免费观看国产 | 欧美uc恋夜在线全部视频 | 国产一区二区三区免费大片天美 | 欧美性猛交99久久久久99按摩 | 国内精品人妻无码久久久影院导航 | 午夜欧美成人香蕉剧场 | 亚洲国产精品无码久久青草 | 热久久99影院 | 精品人无码一区二区三区 | 亚洲视频2020 | 国产免费又黄又爽又色毛 | 人妻被按摩师玩弄到潮喷 | 亚洲精品97久久中文字幕无码 | 国产一级特黄特色aa毛片 |