So verwenden Sie Docker zum Bereitstellen von Nginx+Flask+Mongo-Anwendungen

WBOY
Freigeben: 2023-05-14 16:16:06
nach vorne
1270 Leute haben es durchsucht

Nginx wird als Server verwendet, Mongo ist die Datenbankunterstützung und Flask ist das Web-Framework der Python-Sprache. Mithilfe 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.

Die 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

Die Konfiguration von mongodb

/mongo/dockerfile hat den folgenden Inhalt

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
/mongo/setup.sh hat den folgenden Inhalt.
Der Zweck davon Die Datei besteht darin, nach dem Starten von mongodb einen Benutzertest mit dem Kennwort test zu erstellen und ihm eine Datenbank zu geben. Der Inhalt der Lese- und Schreibvorgänge von 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
Nach dem Login kopieren

flask application


/flask/dockerfile 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
Der zum Debuggen verwendete app.run wird hier kommentiert (). Verwenden Sie beim Veröffentlichen Gunicorn, um zu starten folgt

from app import create_app
app = create_app(&#39;default&#39;)
app.debug=false
# if __name__ == &#39;__main__&#39;:
#  app.run()
Nach dem Login kopieren

/nignx/conf/nginx.conf Der Inhalt lautet 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

Bereitstellung starten


Geben Sie das Docker-Flie-Verzeichnis cd docker-flie ein

Starten Sie Docker Docker-Compose Up

Sehen Sie sich den Containerstatus von Docker PS an

    Geben Sie 127.0.0.1 in den lokalen Bereitstellungsbrowser ein
  1. Schließlich werden drei Container angezeigt, die docker_file_nginx_1, docker_file_mongo_1 und docker_file_flask_1 ähneln und auf Erfolg hinweisen! ! !
  2. Tucao
  3. 1 Die Initialisierungsdatei im mongolischen Container muss im Verzeichnis docker-entrypoint-initdb.d abgelegt werden
  4. Ich habe Folgendes versucht und es wird angezeigt, dass mongdb nicht gestartet wurde.

    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;
    
        }
      }
    
    
    }
    Nach dem Login kopieren
    2 Die Flask-Anwendung kann keine Verbindung zu Mongo herstellen. Dieser Artikel verwendet die Link-Methode. Die Konfiguration der Datenbank sollte entsprechend geschrieben werden:

    Das obige ist der detaillierte Inhalt vonSo verwenden Sie Docker zum Bereitstellen von Nginx+Flask+Mongo-Anwendungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!