久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Docker如何部署Nginx+Flask+Mongo

139次閱讀
沒有評論

共計 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字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 巨野县| 榆中县| 棋牌| 香港| 蛟河市| 洛宁县| 招远市| 社会| 延边| 沙坪坝区| 通化县| 布拖县| 东乌珠穆沁旗| 重庆市| 大余县| 绥江县| 土默特右旗| 慈利县| 松潘县| 页游| 玉龙| 木兰县| 盱眙县| 铅山县| 林州市| 株洲县| 宜宾县| 江门市| 洪江市| 晋江市| 奈曼旗| 屯留县| 博乐市| 镇远县| 沅江市| 吉木乃县| 宾川县| 伊金霍洛旗| 曲周县| 耒阳市| 永善县|