Stellen Sie die Nginx+Flask+Mongo-Anwendung mit Docker bereit

Stellen Sie die Nginx+Flask+Mongo-Anwendung mit Docker bereit

Als Server wird Nginx verwendet, als Datenbankunterstützung wird Mongo verwendet und Flask ist das Webframework in der Programmiersprache Python. Mithilfe der Containereigenschaften von Docker kann es problemlos auf einem Linux-Server bereitgestellt werden.

Projektvorbereitung

Das Hauptverzeichnis des Projekts lautet wie folgt

__Projektname
  |__ Docker-Datei
    |__ ningx
      |__ Docker-Datei
      |__conf
        |__ nginx.conf
    |__Flasche
      |__ Docker-Datei
      |__ Anforderungen.txt
    |__ mongo
      |__ Docker-Datei
      |__ setup.sh
    |__docker-compose.yml
  |__Quelle
    |__ App
      |__ ...
    |__run.py

Kurzbeschreibung

Das Docker-File-Verzeichnis ist die Konfigurationsdatei für die Docker-Bereitstellung

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

Detaillierte Docker-Konfiguration

Docker-Compose-Konfiguration

Version: '2.2'
Leistungen:
 Mongo:
  Bau: ./mongo
  Bände:
   – „./mongo/db:/data/db“
  Neustart: immer
  Häfen:
   - „27017:27017“
  Umfeld:
   MONGO_INITDB_ROOT_USERNAME: root
   MONGO_INITDB_ROOT_PASSWORD: 123456
 Flasche:
  Erstellen: ./flask
  Links:
   - Mongo
  Häfen:
   - "5000:5000"
  exponieren:
   - "5000"
  Bände:
   - ../src:/home/web
 nginx:
   Erstellen: ./nginx
   Links:
    - Flasche
   Bände:
    – „./nginx/log:/var/log/nginx“
    – „../:/usr/share/nginx/html“
   Häfen:
    - "80:80"
    - „8080:8080“
    - „443:443“
   Neustart: immer

MongoDB-Konfiguration

Der Inhalt von /mongo/Dockerfile ist wie folgt

VON mongo:3.6
# Zeitzone einstellen ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# Legen Sie das Arbeitsverzeichnis ENV WORKDIR /usr/local/work fest
ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d
ENV INSTALL_MONGO_SHELL setup.sh
RUN mkdir -p $WORKDIR
# Kopieren Sie den Datenbankinitialisierungsbefehl COPY ./$INSTALL_MONGO_SHELL $AUTO_RUN_DIR/
RUN chmod +x $AUTO_RUN_DIR/$INSTALL_MONGO_SHELL

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

Der Zweck dieser Datei besteht darin, nach dem Start von MongoDB einen Benutzer test mit dem Passwort test zu erstellen und ihm Lese- und Schreibvorgänge in der Datenbank test zu ermöglichen.

#!/bin/bash
mongo <<EOF
benutze den Administrator;
db.auth('root', '123456');
verwenden Sie dmx_aluminum;
db.createUser({Benutzer:'test',pwd:'test',Rollen:[{Rolle:'readWrite',db:'test'}]});
db.createCollection("Benutzer");
Ende der Laufzeit

Flask-Anwendungskonfiguration

Der Inhalt von /flask/Dockerfile ist wie folgt

VON python:3.6
# Zeitzone einstellen ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# Richten Sie den Arbeitsbereich ein. RUN mkdir -p /home/web
ARBEITSVERZEICHNIS /home/web
# Abhängigkeiten hinzufügen ADD requirements.txt /home/web/requirements.txt
Führen Sie den Befehl pip3 install -i https://pypi.douban.com/simple/ -r requirements.txt aus.

# Verwenden Sie Gunicorn, um die Anwendung zu starten CMD gunicorn -w 4 -b 0.0.0.0:5000 run:app

/src/app/run.py-Code

Das app.run() zum Debuggen ist hier kommentiert und wird beim Veröffentlichen mit Gunicorn gestartet.

aus App importieren create_app
app = App erstellen('Standard')
app.debug=Falsch
# wenn __name__ == '__main__':
# app.run()

Nginx-Konfiguration

Der Inhalt von /nginx/Dockerfile ist wie folgt

VON nginx:1.14
# Zeitzone einstellen ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# Konfiguration kopieren COPY conf/nginx.conf /etc/nginx/nginx.conf

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

Benutzer nginx;
Arbeiterprozesse 1;

Fehlerprotokoll /var/log/nginx/error.log warnen;
pid /var/run/nginx.pid;

Ereignisse {
  Arbeiterverbindungen 1024;
}


http {
  /etc/nginx/mime.types einschließen;
  Standardtyp Anwendung/Oktett-Stream;

  log_format main '$remote_addr - $remote_user [$time_local] "$request" '
           '$status $body_bytes_sent "$http_referer" '
           '"$http_user_agent" "$http_x_forwarded_for"';

  Zugriffsprotokoll /var/log/nginx/access.log Haupt;

  sendfile an;
  #tcp_nopush ein;

  KeepAlive-Timeout 65;

  # Gzip aktivieren
  gzip an;
  gzip_min_länge 1k;
  gzip_puffer 4 16k;
  #gzip_http_version 1.0;
  gzip_comp_level 1;
  gzip_types Text/einfache Anwendung/x-Javascript Text/CSS Anwendung/Xml Text/Javascript Anwendung/x-httpd-php Bild/JPEG Bild/GIF Bild/PNG;
  gzip_vary aus;
  gzip_disable "MSIE [1-6]\.";

  Server {
    hören Sie 80;
    Servername localhost;
    KeepAlive-Timeout 5;
    root /usr/share/nginx/html;

    Standort /static/ {
      Alias ​​/usr/share/nginx/html/src/app/static/;
    }

    Standort / {
      # sucht nach statischer Datei, wenn kein Proxy zur App gefunden wird
      Versuchen Sie_Dateien $uri @flask_app;
    }

    Standort @flask_app {
      proxy_pass http://192.168.0.2:5000; # Auf Alibaba Cloud veröffentlicht, die Intranet-IP-Adresse sollte ausgefüllt werden
      Proxy_Redirect aus;
      proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for;
      Proxy_set_header Host $http_host;
      Proxy_Set_Header X-Real-IP $Remote_Addr;

      #Proxy-Puffer 8 32k;
      #Proxy-Puffergröße 64k;

    }
  }


}

Starten der Bereitstellung

  1. Wechseln Sie in das Verzeichnis docker-flie cd docker-flie
  2. Starten Sie Docker Docker-Compose Up
  3. Containerstatus anzeigen Docker PS
  4. Geben Sie 127.0.0.1 in den lokalen Bereitstellungsbrowser ein

Schließlich erscheinen drei Container ähnlich wie docker_file_nginx_1, docker_file_mongo_1 und docker_file_flask_1, was auf Erfolg hinweist! ! !

Fallstricke und Beschwerden

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

Ich habe Folgendes versucht und es zeigt, dass MongDB nicht gestartet ist.

Füge setup.sh /data/setup.sh hinzu
AUSFÜHREN chmod +x /data/setup.sh
CMD ["/data/setup.sh"]

2 Die Flask-Anwendung kann keine Verbindung zu Mongo herstellen. Dieser Artikel verwendet die Link-Methode.

Die Datenbankkonfiguration sollte entsprechend geschrieben werden:

MONGODB_SETTINGS = {
    'db': 'Test',
    'Host': 'Mongo', # 127.0.0.1 Host-Adresse muss der Name des --Links sein, den Sie konfiguriert haben 'Benutzername': 'Test',
    'Passwort': 'Test',
    'Hafen': 27017
  }

Wechseln Sie während des lokalen Tests zurück zu 127.0.0.1

3 Der in der Nginx-Konfiguration verwendete Proxy-Modus, wobei die IP, die die Flask-Anwendung ausführt, die Intranet-IP sein sollte

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Analyse von Tabellennamen und übergeordneten Klassen in Bezug auf benutzerdefinierte Modellklassen in Flask- und Django-Frameworks
  • Docker-Bereitstellung von Implementierungsschritten für Flask-Anwendungen
  • So stellen Sie eine Flask-Anwendung auf einem Server bereit
  • Beispiel für die Bereitstellung eines Flask-Projekts mit uWSGI und Nginx
  • CentOS7-Bereitstellung Flask (Apache, mod_wsgi, Python36, venv)
  • Migration und Bereitstellung von Python-Projekten basierend auf Informationen zu Abhängigkeitspaketen in der Flask-Framework-Konfiguration
  • So stellen Sie das Flask-Projekt auf CentOS bereit
  • CentOS 7.0 verwendet Nginx zum Bereitstellen von Flask-Anwendungs-Tutorials
  • Alibaba Cloud-Bereitstellung von Ubuntu 1.4 Flask + WSGI + Nginx Detaillierte Erläuterung
  • Stellen Sie die Flaskblog-Anwendung auf einem DigitalOcean-Server bereit
  • Tutorial zum Bereitstellen von Nginx, FastCGI und Flask Framework unter Mac OS
  • Tutorial zum Bereitstellen des Flask-Frameworks von Python auf Docker
  • So stellen Sie ein Modell mit Flask als Dienst bereit

<<:  Verwenden Sie JavaScript, um Seiteneffekte zu erstellen

>>:  Detaillierte Erklärung der Lösung zur Migration von Antd+React-Projekten nach Vite

Artikel empfehlen

Das Problem der Verwendung von Slots durch Vue+tsx wird nicht behoben

Inhaltsverzeichnis Vorwort Finden Sie das Problem...

Praxis der Bereitstellung von in Python geschriebenen Webanwendungen mit Docker

Inhaltsverzeichnis 1. Docker installieren 2. Code...

Analyse der problematischen „Aborted“-Warnung in MySQL anhand von Fallstudien

Dieser Artikel stellt hauptsächlich den relevante...

So richten Sie die Swap-Partition SWAP in Linux 7.7 ein

Die Swap-Partition des Linux-Systems, also die Sw...

Implementierung der CSS-Variableneinfügung im Vue3-Stil

Inhaltsverzeichnis Zusammenfassung Einfaches Beis...

Vue.js implementiert Erläuterungen zum Tab-Umschalten und Farbwechseln

Bei der Implementierung dieser Funktion konnte di...

MySQL-Datenbankoperationen und Datentypen

Inhaltsverzeichnis 1. Datenbankbetrieb 1.1 Datenb...

JavaScript zum Implementieren des Vorladens und verzögerten Ladens von Bildern

In diesem Artikel wird der spezifische Code zur I...

Mysql Master-Slave-Synchronisation Last_IO_Errno:1236 Fehlerlösung

Was ist der Grund für den Fehler Last_IO_Errno:12...

Eine kurze Analyse der Unterschiede zwischen Undo, Redo und Binlog in MySQL

Inhaltsverzeichnis Vorwort 【Protokoll rückgängig ...

Eine kurze Einführung in das bionische Design im Internet-Webdesign

Beim Stichwort Bionik-Design denken viele an die E...

So verwenden Sie SVG-Symbole in WeChat-Applets

SVG wurde in den letzten Jahren aufgrund seiner v...

Vorgang zur Zeitzonenanpassung im Docker-Container

Wie kann ich überprüfen, ob die Zeitzone des Dock...