suchen
HeimBackend-EntwicklungPython-TutorialVom Legacy- zum Cloud-Serverless – Teil 1

Hinweis: Dieser Artikel wurde ursprünglich am 4. November 2023 hier veröffentlicht. Es wurde hier erneut veröffentlicht, um ein breiteres Publikum zu erreichen.

Willkommen zum ersten Artikel einer Reihe, die Sie durch den Prozess der Migration einer Legacy-App von lokal in die Cloud führt, mit Schwerpunkt auf Modernisierung, serverlosen Plattformen und integrierten DevOps-Praktiken.

In diesem Artikel konzentrieren wir uns auf die Containerisierung Ihrer App. Wenn Sie jedoch eine App von Grund auf erstellen, ist das vollkommen in Ordnung (eigentlich sogar noch besser). Für dieses Beispiel verwende ich diesen DigitalOcean-Leitfaden, um eine einfache TODO-App mit Python (Flask) und MongoDB als Datenbank zu erstellen. Ich habe einige Anpassungen vorgenommen, damit es besser aussieht, aber der Hauptpunkt besteht darin, etwas zu erstellen, das eine dokumentbasierte NoSQL-Datenbank verwendet, da dies für die bevorstehende Arbeit erforderlich ist.

Sie können das Repository der App hier auf GitHub klonen, wenn Sie noch kein eigenes erstellt haben.

Sobald Sie Ihre App erstellt haben, können wir loslegen!

Docker-Datei

Hier ist die Struktur des Anwendungsverzeichnisses, das wir containerisieren werden, gefolgt von der Docker-Datei.

.
├── app.py
├── LICENSE
├── README.md
├── requirements.txt
├── static
│   └── style.css
└── templates
    └── index.html

Die app.py-Datei ist die Hauptanwendungsdatei, die den Flask-App-Code enthält. Die Datei „requirements.txt“ enthält die Liste der von der Anwendung benötigten Python-Abhängigkeiten. Das Verzeichnis static/ enthält statische Dateien wie CSS, JavaScript und Bilder. Das Verzeichnis templates/ enthält die von der Flask-App verwendeten HTML-Vorlagen.

# Use a minimal base image
FROM python:3.9.7-slim-buster AS base

# Create a non-root user
RUN useradd -m -s /bin/bash flaskuser
USER flaskuser

# Set the working directory
WORKDIR /app

# Copy the requirements file and install dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Add the directory containing the flask command to the PATH
ENV PATH="/home/flaskuser/.local/bin:${PATH}"

# Use a multi-stage build to minimize the size of the image
FROM base AS final

# Copy the app code
COPY app.py .
COPY templates templates/
COPY static static/

# Set environment variables
ENV FLASK_APP=app.py
ENV FLASK_ENV=production

# Expose the port
EXPOSE 5000

# Run the app
CMD ["flask", "run", "--host=0.0.0.0"]

Hier ist eine exemplarische Vorgehensweise und Aufschlüsselung der Docker-Datei:

  1. Die Docker-Datei beginnt mit einer FROM-Anweisung, die das zu verwendende Basis-Image angibt. In diesem Fall handelt es sich um python:3.9.7-slim-buster, ein minimales Basisimage, das Python 3.9.7 und einige wichtige Bibliotheken enthält.

  2. Die nächste Anweisung erstellt mithilfe der Befehle RUN und useradd einen Nicht-Root-Benutzer namens flaskuser. Dies ist eine bewährte Sicherheitsmethode, um zu vermeiden, dass der Container als Root-Benutzer ausgeführt wird.

  3. Die WORKDIR-Anweisung legt das Arbeitsverzeichnis auf /app fest, in das der Anwendungscode kopiert wird.

  4. Die COPY-Anweisung kopiert die Datei „requirements.txt“ in das /app-Verzeichnis des Containers.

  5. Die RUN-Anweisung installiert die in „requirements.txt“ aufgeführten Abhängigkeiten mithilfe von pip. Die Option --no-cache-dir wird verwendet, um das Zwischenspeichern der heruntergeladenen Pakete zu vermeiden, was dazu beiträgt, die Bildgröße klein zu halten.

  6. Die ENV-Anweisung fügt das Verzeichnis, das den flask-Befehl enthält, zur Umgebungsvariablen PATH hinzu. Dies ist erforderlich, um den flask-Befehl später auszuführen.

  7. Die FROM-Anweisung startet eine neue Build-Phase unter Verwendung des zuvor definierten Basis-Images. Dies ist ein mehrstufiger Aufbau, der dazu beiträgt, die Größe des endgültigen Bildes zu minimieren.

  8. Die COPY-Anweisung kopiert den Anwendungscode (app.py), die Vorlagen (templates/) und die statischen Dateien (static/) in das /app-Verzeichnis des Containers.

  9. Die ENV-Anweisung legt die Umgebungsvariablen FLASK_APP und FLASK_ENV fest. FLASK_APP gibt den Namen der Hauptanwendungsdatei an und FLASK_ENV setzt die Umgebung auf Produktion.

  10. Die EXPOSE-Anweisung macht Port 5000 verfügbar, der der von Flask verwendete Standardport ist.

  11. Die CMD-Anweisung gibt den Befehl an, der beim Start des Containers ausgeführt werden soll. In diesem Fall wird der Befehl flask run mit der Option --host=0.0.0.0 ausgeführt, um eine Bindung an alle Netzwerkschnittstellen herzustellen.

Mit dieser Docker-Datei kann die Anwendung containerisiert und ausgeführt werden. Es ist jedoch wichtig zu beachten, dass unsere App eine Datenbank benötigt, um die während der Ausführung erstellten oder generierten Daten zu speichern. Natürlich könnten Sie ein MongoDB-Datenbank-Image separat abrufen und unabhängig ausführen. Nehmen Sie dann auf beiden Seiten Anpassungen vor, um die Kommunikation zwischen den beiden Containern herzustellen, damit die App Daten erfolgreich in der Datenbank speichern kann. Obwohl dieser Ansatz funktioniert, kann er zeitaufwändig und etwas mühsam sein. Um den Prozess zu optimieren, werden wir stattdessen mit Docker Compose fortfahren. In Docker Compose wird alles in einer YAML-Datei deklariert, und mit dem Befehl docker-compose up können wir die verschiedenen Dienste nahtlos starten und betreiben, was Zeit und Mühe spart.

Optimierte Datenbankintegration mit Docker Compose

Hier ist die grundlegende Docker Compose YAML-Datei, die wir verwenden werden, um den Prozess zu optimieren.

version: '3.9'

services:
  db:
    image: mongo:4.4.14
    ports:
      - "27017:27017"
    volumes:
      - mongo-data:/data/db

  web:
    build: .
    container_name: "myflaskapp"
    ports:
      - "5000:5000"
    environment:
      - MONGO_URI=mongodb://db:27017
    depends_on:
      - db

volumes:
  mongo-data:

Diese Docker Compose YAML-Datei ist für die Einrichtung von zwei Diensten konfiguriert: einer MongoDB-Datenbank (db) und einer Webanwendung (web). Hier ist eine Aufschlüsselung:

  • Version: Gibt die Version des verwendeten Docker Compose-Dateiformats an (in diesem Fall 3.9).

  • Dienstleistungen:

    • Datenbank (db):

      • Verwendet das MongoDB-Image der Version 4.4.14.
      • Ordnet den Host-Port 27017 dem Container-Port 27017 zu.
      • Verwendet ein Volume namens mongo-data, um MongoDB-Daten dauerhaft zu speichern.
    • Webanwendung (Web):

      • Erstellt das Docker-Image aus dem aktuellen Verzeichnis (.).
      • Legt den Containernamen auf „myflaskapp“ fest.
      • Ordnet den Host-Port 5000 dem Container-Port 5000 zu.
      • Definiert eine Umgebungsvariable MONGO_URI mit dem Wert mongodb://db:27017 und stellt eine Verbindung zum MongoDB-Dienst her.
      • Gibt eine Abhängigkeit vom Datenbankdienst an und stellt sicher, dass die Datenbank vor dem Webdienst gestartet wird.
  • Bände:

    • Definiert ein Volume mit dem Namen „mongo-data“ für die Beibehaltung von MongoDB-Daten.

Zusammenfassend lässt sich sagen, dass diese Docker Compose-Datei die Bereitstellung einer MongoDB-Datenbank und einer Flask-Webanwendung orchestriert und sicherstellt, dass sie nahtlos kommunizieren und zusammenarbeiten können.

Navigieren Sie nun zum Verzeichnis mit der Docker Compose-Datei und führen Sie docker-compose up aus, um MongoDB und eine Flask-Webanwendung zu starten. Greifen Sie unter http://localhost:5000 auf die App zu, um sicherzustellen, dass alles wie erwartet funktioniert.

From legacy to cloud serverless - Part 1

Um anzuhalten, verwenden Sie docker-compose down.

Alles gut? Als nächstes: Migration des Workflows zu Kubernetes im nächsten Artikel.

From legacy to cloud serverless - Part 1

Das obige ist der detaillierte Inhalt vonVom Legacy- zum Cloud-Serverless – Teil 1. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
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
Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal?Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal?Apr 01, 2025 pm 05:09 PM

Lösung für Erlaubnisprobleme beim Betrachten der Python -Version in Linux Terminal Wenn Sie versuchen, die Python -Version in Linux Terminal anzuzeigen, geben Sie Python ein ...

Wie benutze ich eine schöne Suppe, um HTML zu analysieren?Wie benutze ich eine schöne Suppe, um HTML zu analysieren?Mar 10, 2025 pm 06:54 PM

In diesem Artikel wird erklärt, wie man schöne Suppe, eine Python -Bibliothek, verwendet, um HTML zu analysieren. Es beschreibt gemeinsame Methoden wie find (), find_all (), select () und get_text () für die Datenextraktion, die Behandlung verschiedener HTML -Strukturen und -Anternativen (SEL)

Mathematische Module in Python: StatistikMathematische Module in Python: StatistikMar 09, 2025 am 11:40 AM

Das Statistikmodul von Python bietet leistungsstarke Datenstatistikanalysefunktionen, mit denen wir die allgemeinen Merkmale von Daten wie Biostatistik und Geschäftsanalyse schnell verstehen können. Anstatt Datenpunkte nacheinander zu betrachten, schauen Sie sich nur Statistiken wie Mittelwert oder Varianz an, um Trends und Merkmale in den ursprünglichen Daten zu ermitteln, die möglicherweise ignoriert werden, und vergleichen Sie große Datensätze einfacher und effektiv. In diesem Tutorial wird erläutert, wie der Mittelwert berechnet und den Grad der Dispersion des Datensatzes gemessen wird. Sofern nicht anders angegeben, unterstützen alle Funktionen in diesem Modul die Berechnung der Mittelwert () -Funktion, anstatt einfach den Durchschnitt zu summieren. Es können auch schwimmende Punktzahlen verwendet werden. zufällig importieren Statistiken importieren Aus Fracti

Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch?Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch?Mar 10, 2025 pm 06:52 PM

Dieser Artikel vergleicht TensorFlow und Pytorch für Deep Learning. Es beschreibt die beteiligten Schritte: Datenvorbereitung, Modellbildung, Schulung, Bewertung und Bereitstellung. Wichtige Unterschiede zwischen den Frameworks, insbesondere bezüglich des rechnerischen Graps

Was sind einige beliebte Python -Bibliotheken und ihre Verwendung?Was sind einige beliebte Python -Bibliotheken und ihre Verwendung?Mar 21, 2025 pm 06:46 PM

In dem Artikel werden beliebte Python-Bibliotheken wie Numpy, Pandas, Matplotlib, Scikit-Learn, TensorFlow, Django, Flask und Anfragen erörtert, die ihre Verwendung in wissenschaftlichen Computing, Datenanalyse, Visualisierung, maschinellem Lernen, Webentwicklung und h beschreiben

Wie erstelle ich Befehlszeilenschnittstellen (CLIS) mit Python?Wie erstelle ich Befehlszeilenschnittstellen (CLIS) mit Python?Mar 10, 2025 pm 06:48 PM

Dieser Artikel führt die Python-Entwickler in den Bauen von CLIS-Zeilen-Schnittstellen (CLIS). Es werden mit Bibliotheken wie Typer, Click und ArgParse beschrieben, die Eingabe-/Ausgabemedelung betonen und benutzerfreundliche Designmuster für eine verbesserte CLI-Usabilität fördern.

Wie kann ich die gesamte Spalte eines Datenrahmens effizient in einen anderen Datenrahmen mit verschiedenen Strukturen in Python kopieren?Wie kann ich die gesamte Spalte eines Datenrahmens effizient in einen anderen Datenrahmen mit verschiedenen Strukturen in Python kopieren?Apr 01, 2025 pm 11:15 PM

Bei der Verwendung von Pythons Pandas -Bibliothek ist das Kopieren von ganzen Spalten zwischen zwei Datenrahmen mit unterschiedlichen Strukturen ein häufiges Problem. Angenommen, wir haben zwei Daten ...

Erklären Sie den Zweck virtueller Umgebungen in Python.Erklären Sie den Zweck virtueller Umgebungen in Python.Mar 19, 2025 pm 02:27 PM

Der Artikel erörtert die Rolle virtueller Umgebungen in Python und konzentriert sich auf die Verwaltung von Projektabhängigkeiten und die Vermeidung von Konflikten. Es beschreibt ihre Erstellung, Aktivierung und Vorteile bei der Verbesserung des Projektmanagements und zur Verringerung der Abhängigkeitsprobleme.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

Dreamweaver Mac

Dreamweaver Mac

Visuelle Webentwicklungstools

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version