>  기사  >  운영 및 유지보수  >  Docker를 사용하여 Nginx+Flask+Mongo 애플리케이션을 배포하는 방법

Docker를 사용하여 Nginx+Flask+Mongo 애플리케이션을 배포하는 방법

WBOY
WBOY앞으로
2023-05-14 16:16:061272검색

nginx는 서버로, mongo는 데이터베이스 지원, 플라스크는 Python 언어의 웹 프레임워크로 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 디렉터리는 플라스크 애플리케이션의 Python 코드입니다.

Docker의 세부 구성 ㅋㅋㅋ 파일은 mongodb를 시작한 후 test라는 비밀번호로 사용자 테스트를 생성하고 데이터베이스를 부여하는 것입니다. test

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

flask application

/flask/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
/src/app/run.py code
디버깅에 사용되는 app.run이 여기에 주석 처리되어 있습니다(). 게시할 때 gunicorn을 사용하여

#!/bin/bash
mongo <<eof
use admin;
db.auth(&#39;root&#39;, &#39;123456&#39;);
use dmx_aluminum;
db.createuser({user:&#39;test&#39;,pwd:&#39;test&#39;,roles:[{role:&#39;readwrite&#39;,db:&#39;test&#39;}]});
db.createcollection("user");
eof

nginx 구성


/nginx/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
/nignx/conf/nginx.conf 내용은 다음과 같습니다
from app import create_app
app = create_app(&#39;default&#39;)
app.debug=false
# if __name__ == &#39;__main__&#39;:
#  app.run()

배포 시작

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과 유사한 세 개의 컨테이너가 나타납니다. ! !
  1. Tucao
  2. 1 몽골 컨테이너의 초기화 파일은 docker-entrypoint-initdb.d 디렉터리에 있어야 합니다.
  3. 다음을 시도했는데 mongdb가 시작되지 않은 것으로 표시됩니다.

    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
  4. 2 플라스크 애플리케이션이 mongo에 연결할 수 없습니다. 이 문서에서는 링크 방법을 사용합니다.
  5. 데이터베이스 구성은 그에 따라 작성되어야 합니다:
  6. 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 &#39;$remote_addr - $remote_user [$time_local] "$request" &#39;
               &#39;$status $body_bytes_sent "$http_referer" &#39;
               &#39;"$http_user_agent" "$http_x_forwarded_for"&#39;;
    
      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;
    
        }
      }
    
    
    }
로컬 테스트 중에 127.0.0.1로 다시 변경

3 nginx 구성에 사용되는 프록시 모드, 여기서 플라스크 애플리케이션 실행을 위한 IP는 인트라넷 IP여야 합니다

위 내용은 Docker를 사용하여 Nginx+Flask+Mongo 애플리케이션을 배포하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제