Heim > Datenbank > MySQL-Tutorial > Hauptteil

Einführung in die Anwendung der Docker-Bereitstellung von Nginx+Flask+Mongo (mit Code)

不言
Freigeben: 2019-03-23 16:46:08
nach vorne
3303 Leute haben es durchsucht

Der Inhalt dieses Artikels befasst sich mit der Anwendungseinführung von Nginx+Flask+Mongo (mit Code). Ich hoffe, dass er für Sie hilfreich ist.

Verwenden Sie Docker, um Nginx+Flask+Mongo-Anwendungen bereitzustellen

Nginx wird als Server verwendet, Mongo ist die Datenbankunterstützung und Flask ist das Web-Framework der Python-Sprache. Verwendung der Containerfunktionen Von Docker kann es problemlos auf dem Linux-Server bereitgestellt werden

Projektvorbereitung

Das Hauptverzeichnis des Projekts lautet wie folgt

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

Kurze Beschreibung

Das Docker-Dateiverzeichnis ist die von Docker bereitgestellte Konfigurationsdatei

Das src-Verzeichnis ist der Python-Code der Flask-Anwendung

Detaillierte Konfiguration von Docker

Docker-Compose-Konfiguration

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
Nach dem Login kopieren

MongoDB-Konfiguration

/mongo/ Der Inhalt der Docker-Datei ist wie folgt

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
Nach dem Login kopieren

Der Inhalt von/mongo/setup.sh ist wie folgt

Der Zweck dieser Datei besteht darin, nach dem Start von MongoDB einen Benutzertest mit dem Passwort test zu erstellen und ihm den Datenbanktest Lese- und Schreibvorgänge zu geben
#!/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
Nach dem Login kopieren

Flask-Anwendungskonfiguration

/flask/Dockerfile Der Inhalt lautet wie folgt:

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
Nach dem Login kopieren

/src/app/run.py-Code

Die app.run() zum Debuggen wird hier kommentiert und gunicorn wird verwendet, um sie beim Veröffentlichen zu starten
from app import create_app
app = create_app('default')
app.debug=False
# if __name__ == '__main__':
#    app.run()
Nach dem Login kopieren

Nginx-Konfiguration

/nginx/Dockerfile-Inhalt ist wie folgt

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
Nach dem Login kopieren

/nignx Der Inhalt von /conf/nginx.conf ist wie folgt

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;

        }
    }


}
Nach dem Login kopieren

Bereitstellung starten

  1. Geben Sie das Docker-Flie-Verzeichnis eincd docker-flie
  2. Starten Sie Docker docker-compose up
  3. Überprüfen Sie den Containerstatusdocker ps
  4. Geben Sie 127.0 ein .0.1 im lokalen Bereitstellungsbrowser

Schließlich werden 3 Container ähnlich wie docker_file_nginx_1, docker_file_mongo_1, docker_file_flask_1 angezeigt, was auf einen Erfolg hinweist! ! !

Kommentar zur Grube

  • 1 Die Initialisierungsdatei im mongolischen Container muss im Verzeichnis docker-entrypoint-initdb.d abgelegt werden

Ich habe Folgendes getan. Wenn Sie es versuchen, wird angezeigt, dass mongdb nicht gestartet ist.

ADD setup.sh /data/setup.sh
RUN chmod +x /data/setup.sh
CMD ["/data/setup.sh"]
Nach dem Login kopieren
  • 2 Die Flask-Anwendung kann keine Verbindung zu Mongo herstellen. Dieser Artikel verwendet die Link-Methode.

Die Konfiguration in der Datenbank sollte entsprechend geschrieben werden:

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

Beim lokalen Testen auf 127.0.0.1 zurückwechseln

3 Der Proxy-Modus, der in der Nginx-Konfiguration verwendet wird, wobei die IP Wenn die Flaschenanwendung ausgeführt wird, sollte die Intranet-IP sein

Dieser Artikel ist hier zu Ende. Weitere spannende Inhalte finden Sie in der Spalte Mongodb-Video-Tutorial auf der chinesischen PHP-Website!

Das obige ist der detaillierte Inhalt vonEinführung in die Anwendung der Docker-Bereitstellung von Nginx+Flask+Mongo (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage