Maison  >  Article  >  base de données  >  Introduction à l'application du déploiement Docker de Nginx+Flask+Mongo (avec code)

Introduction à l'application du déploiement Docker de Nginx+Flask+Mongo (avec code)

不言
不言avant
2019-03-23 16:46:083289parcourir

Le contenu de cet article concerne l'introduction de l'application du déploiement Docker de Nginx+Flask+Mongo (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Utilisez Docker pour déployer des applications Nginx+Flask+Mongo

Nginx est utilisé comme serveur, Mongo est le support de base de données et Flask est le framework Web du langage Python utilisant les fonctionnalités du conteneur. de Docker, il peut être facilement déployé Sur le serveur Linux

Préparation du projet

Le répertoire principal du projet est le suivant

__ project-name
    |__ docker-file
        |__ ningx
            |__ Dockerfile
            |__ conf
                |__ nginx.conf
        |__ flask
            |__ Dockerfile
            |__ requirements.txt
        |__ mongo
            |__ Dockerfile
            |__ setup.sh
        |__ docker-compose.yml
    |__ src
        |__ app
            |__ ...
        |__ run.py

Brève description

Le répertoire docker-file est le fichier de configuration déployé par docker

Le répertoire src est le code python de l'application flask

Configuration détaillée de Docker

docker-compose configuration

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

Configuration de MongoDB

Le contenu de /mongo/Dockerfile est le suivant

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

Le contenu de/mongo/setup.sh est le suivant

Le but de ce fichier est de créer un test utilisateur avec un mot de passe de test après le démarrage de MongoDB et de lui confier les opérations de lecture et d'écriture de la base de données de test
#!/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

La configuration de la. L'application Flask

/flask/Dockerfile est la suivante

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 code

L'app.run() pour le débogage est commenté ici , et gunicorn est utilisé pour démarrer lors de la publication
from app import create_app
app = create_app('default')
app.debug=False
# if __name__ == '__main__':
#    app.run()

Configuration Nginx

/nginx/Dockerfile Le contenu de /nignx/conf/nginx.conf est le suivant

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

Le contenu de /nignx/conf/nginx.conf est le suivant

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;

        }
    }


}

Démarrer le déploiement

  1. Entrez le répertoire docker-fliecd docker-flie
  2. Démarrez Docker docker-compose up
  3. Vérifiez l'état du conteneurdocker ps
  4. Entrez 127.0.0.1 dans le navigateur de déploiement local

Enfin trois conteneurs similaires à docker_file_nginx_1 , docker_file_mongo_1, docker_file_flask_1 apparaissent, indiquant le succès ! ! !

Commentaire sur la fosse

  • 1 Le fichier d'initialisation dans le conteneur mongol doit être placé dans le répertoire docker-entrypoint-initdb.d

J'ai fait ce qui suit. Si vous essayez, cela montrera que mongdb n'est pas démarré.

ADD setup.sh /data/setup.sh
RUN chmod +x /data/setup.sh
CMD ["/data/setup.sh"]
  • 2 L'application flask ne peut pas se connecter à mongo. Cet article utilise la méthode du lien.

La configuration de la base de données doit être écrite en conséquence :

MONGODB_SETTINGS = {
        'db': 'test',
        'host': 'mongo',  # 127.0.0.1 host地址一定要写你配置的--link的名字
        'username': 'test',
        'password': 'test',
        'port': 27017
    }

Revenir à 127.0.0.1 lors des tests locaux

3 Le mode proxy utilisé dans la configuration de nginx, dans laquelle l'application flask est exécutée L'IP doit être l'IP de l'intranet

Cet article est terminé ici Pour un contenu plus passionnant, vous pouvez faire attention à la colonne Tutoriel vidéo mongodb sur le site Web PHP chinois !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer