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
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:
|
<<: Verwenden Sie JavaScript, um Seiteneffekte zu erstellen
>>: Detaillierte Erklärung der Lösung zur Migration von Antd+React-Projekten nach Vite
Inhaltsverzeichnis Vorwort Finden Sie das Problem...
Inhaltsverzeichnis 1. Docker installieren 2. Code...
Dieser Artikel stellt hauptsächlich den relevante...
Die Swap-Partition des Linux-Systems, also die Sw...
Ich habe kürzlich MySQL auf 5.7 aktualisiert und ...
Inhaltsverzeichnis Zusammenfassung Einfaches Beis...
Bei der Implementierung dieser Funktion konnte di...
Inhaltsverzeichnis 1. Datenbankbetrieb 1.1 Datenb...
In diesem Artikel wird der spezifische Code zur I...
Was ist der Grund für den Fehler Last_IO_Errno:12...
Nachfragehintergrund Das Projekt wurde mit Vue er...
Inhaltsverzeichnis Vorwort 【Protokoll rückgängig ...
Beim Stichwort Bionik-Design denken viele an die E...
SVG wurde in den letzten Jahren aufgrund seiner v...
Wie kann ich überprüfen, ob die Zeitzone des Dock...