Wie stellt man eine Anwendung auf Heroku bereit?

Back4app Heroku App Deploy Abdeckung

Dieses Tutorial behandelt den Bereitstellungsprozess einer Python-basierten Anwendung auf Heroku. Wenn Sie diesen Artikel lesen, verstehen Sie die Kernfunktionen von Heroku, den Bereitstellungsprozess von Heroku für Anwendungen und wie Sie eine Anwendung auf Heroku bereitstellen.

Darüber hinaus enthält es Anweisungen für die Bereitstellung der gleichen Anwendung auf Back4app Containers – einer großartigen kostenlosen Alternative zu Heroku.

Ziele

Am Ende dieses Tutorials werden Sie in der Lage sein:

  • Verstehen Sie Heroku und seine Funktionalität
  • Stellen Sie Ihre Anwendungen auf Heroku bereit
  • Verstehen Sie Back4app Containers und seine Funktionen
  • Stellen Sie Ihre Anwendungen in Back4app Containern bereit
  • Bestimmen Sie, welchen Dienst Sie für Ihre Anwendung verwenden möchten

Was ist Heroku?

Heroku wurde 2007 gegründet und ist eine der zuverlässigsten Platform-as-a-Service-Plattformen (PaaS). Die Cloud-Plattform ermöglicht Ihnen die einfache Erstellung, Verwaltung, Bereitstellung und Skalierung von Anwendungen.

Es unterstützt von Haus aus Ruby, Python, Java, Clojure, Node, Scala, Go und PHP. Dennoch können Sie auch andere Programmiersprachen und Frameworks über Docker bereitstellen.

Zu den wichtigsten Vorteilen von Heroku gehören die Benutzerfreundlichkeit, die Skalierbarkeit, die Sicherheitsfunktionen, die Add-ons, die Heroku CLI und die Ausrichtung auf Entwickler.

Andererseits wird Heroku oft dafür kritisiert, dass es teuer ist, einen unzureichenden regionalen Support bietet und mit den neuesten Entwicklungstrends nicht Schritt halten kann.

Einer der Hauptgründe, warum Heroku so beliebt ist, ist das Angebot kostenloser Dienste in der Vergangenheit. Bis November 2022 konnten Sie Heroku nutzen, um Ihre Anwendungen und sogar Datenbanken absolut kostenlos zu hosten.

Leider haben sie beschlossen, diese kostenlosen Dienste zu streichen, um Betrug und Missbrauch des kostenlosen Angebots zu bekämpfen. Trotz der jüngsten Änderungen bleibt Heroku eine der beliebtesten Hosting-Plattformen. Lesen Sie weiter, um zu erfahren, wie Sie auf Heroku bereitstellen können.

Wenn Sie mehr über Heroku erfahren möchten, lesen Sie unseren anderen Artikel Was ist Heroku?

Projekt einrichten

Um zu demonstrieren, wie man Anwendungen auf Heroku und Back4app Containers bereitstellt, habe ich eine einfache Webanwendung vorbereitet, die Ihnen zeigt, wie man eine Python-Anwendung auf Heroku bereitstellt. Die Webanwendung verwendet das FastAPI-Framework und dient als einfacher URL-Verkürzungsdienst. Sie verfügt über zwei Endpunkte:

  1. /shorten weist einer long_url einen Alias zu
  2. / leitet den Nutzer auf die entsprechende long_url um

Testen Sie Ihr Verständnis, indem Sie Ihr eigenes Projekt durchführen.

Voraussetzungen

  • Grundlegendes Verständnis von Python und Git
  • Python 3.9+ auf Ihrem lokalen Rechner installiert
  • Git Bash und Docker Desktop installiert und konfiguriert
  • Ein persönliches GitHub-Konto

Klonen & Ausführen

Die Heroku-Bereitstellung beginnt mit dem Forken dieses Repositorys auf GitHub und dem anschließenden Klonen des Forks auf Ihren lokalen Rechner:

$ git clone <fork_remote_git_url>
$ cd back4app-heroku-deploy

Wenn Sie sich nicht gabeln wollen, können Sie ein eigenes Repository anlegen und den Quellcode dorthin verschieben.

Erstellen Sie eine virtuelle Umgebung und aktivieren Sie sie:

$ python -m venv env && source env/bin/activate

Als nächstes installieren Sie die Projektanforderungen:

(env)$ pip install -r requirements.txt

Zum Schluss starten Sie den Entwicklungsserver:

(env)$ python -m uvicorn main:app --reload 

INFO:     Will watch for changes in these directories: [...]
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [1488] using WatchFiles
INFO:     Started server process [2316]
INFO:     Application startup complete.

Öffnen Sie Ihren bevorzugten Webbrowser und navigieren Sie zu http://localhost:8000/docs. Verwenden Sie die interaktive Dokumentation, um die Webanwendung zu testen. Wenn Sie Hilfe bei der Formatierung von Anfragen benötigen, sehen Sie sich die Datei test_main.http an.

Wie stellt man eine Anwendung auf Heroku bereit?

In diesem Abschnitt werden wir eine Anwendung auf Heroku bereitstellen.

Für die folgenden Schritte benötigen Sie ein Heroku-Konto. Wenn Sie noch keins haben, melden Sie sich an. Stellen Sie außerdem sicher, dass Sie die Zahlungsinformationen zu Ihrem Heroku-Konto hinzufügen.

Wenn Sie Ihre App direkt nach dem Tutorial löschen, sollten Ihnen keine Kosten entstehen.

Wechseln Sie zu einem neuen Zweig namens heroku:

$ git checkout -b heroku

Zielsetzungen

  1. Installieren Sie Heroku CLI.
  2. Erstellen Sie eine Heroku-Anwendung.
  3. Geben Sie die Laufzeit über runtime.txt an.
  4. Geben Sie die Anwendungsprozesse über Procfile an.
  5. Übertragen Sie den Quellcode auf Heroku.

Heroku CLI

Es gibt mehrere Möglichkeiten, mit Heroku zu interagieren. Sie können das Dashboard, die Heroku-CLI oder die Heroku-API verwenden.

Ich bevorzuge Heroku CLI, da es ein leistungsfähiges Tool ist, mit dem Sie Ihre Arbeit schnell erledigen können. Wir werden es während des gesamten Tutorials verwenden.

Installieren Sie zunächst Heroku CLI, indem Sie die offiziellen Installationsanweisungen befolgen.

Stellen Sie anschließend sicher, dass die Installation erfolgreich war, indem Sie die CLI-Version überprüfen:

$ heroku --version
heroku/8.4.2 win32-x64 node-v16.19.0

Prüfen Sie dann, ob CLI-Updates verfügbar sind, und authentifizieren Sie sich mit Ihrem Heroku-Konto:

$ heroku update
$ heroku login

Wenn Sie den zweiten Befehl ausführen, öffnet sich ein Browserfenster. Um sich zu authentifizieren, klicken Sie auf “Anmelden” und schließen Sie das Browserfenster.

Heroku-App erstellen

Um auf Heroku bereitzustellen, müssen Sie zunächst eine Heroku-Anwendung erstellen.

Öffnen Sie erneut das Terminal, navigieren Sie zu Ihrem lokalen Projekt (z. B. back4app-heroku-deploy-Ordner ) und führen Sie den folgenden Befehl aus:

$ heroku create -a <app_name>

Creating ⬢ <app_name>... !
https://<app_name>-31a6fd70e769.herokuapp.com/ | 
https://git.heroku.com/<app_name>.git

Stellen Sie sicher, dass Sie durch <app_name> den gewünschten Anwendungsnamen ersetzen.

Prüfen Sie anschließend, ob die App erfolgreich erstellt wurde, indem Sie die Apps auflisten:

$ heroku apps

=== <email_address> Apps
<app_name>

Überprüfen Sie dann die Details der App:

$ heroku apps:info <app_name>

=== <app_name>
Auto Cert Mgmt: false
Dynos:
Git URL:        https://git.heroku.com/<app_name>.git
Owner:          <email_address>
Region:         us
Repo Size:      0 B
Slug Size:      0 B
Stack:          heroku-22
Web URL:        https://<app_name>-21de155883d3.herokuapp.com/

Wie Sie vielleicht wissen, ist Heroku eng mit Git integriert. Wenn Sie eine Heroku-Anwendung erstellen, wird ein entferntes Git-Repository erstellt, in das Sie Ihren Quellcode übertragen können, um ihn bereitzustellen. In unserem Fall lautet die Remote-Git-URL:

https://git.heroku.com/<app_name>.git

Heroku CLI registriert automatisch ein Git-Remote, wenn Sie eine App erstellen. Versuchen Sie, die Remotes aufzulisten:

$ git remote -v

heroku  https://git.heroku.com/back4app-url-shortener.git (fetch)
heroku  https://git.heroku.com/back4app-url-shortener.git (push)
origin  [email protected]:duplxey/back4app-heroku-deploy.git (fetch)
origin  [email protected]:duplxey/back4app-heroku-deploy.git (push)

Im nächsten Abschnitt werden wir die heroku-Remote verwenden, um unseren Quellcode bereitzustellen.

runtime.txt

In der Datei runtime.txt können Sie die genaue Python-Version angeben, die Heroku verwenden soll. Dies ist wichtig, wenn Ihr Projekt eine bestimmte Python-Version benötigt, um zu funktionieren. Zum Zeitpunkt der Erstellung dieses Dokuments ist die Standardeinstellung python-3.11.5.

Um die Laufzeit anzugeben, erstellen Sie eine Datei runtime.txt, die die Laufzeitversion enthält. Beispiel:

python-3.11.5

Die Liste der unterstützten Python-Laufzeiten finden Sie unter Heroku Python Support.

Procfile

Ein Procfile ermöglicht es Ihnen, die Befehle zu definieren, die ausgeführt werden sollen, um die Prozesse der Anwendung zu starten. Wir werden ein Procfile verwenden, um den Uvicorn-Webserver zu starten.

Erstellen Sie ein Procfile im Projektstamm mit dem Webprozess:

web: gunicorn -w 1 -k uvicorn.workers.UvicornWorker main:app

Bei produktiven Anwendungen werden Sie wahrscheinlich mehrere Worker anstelle von einem spawnen wollen. Da unsere Anwendung nicht von einer Datenbank unterstützt wird (sie verwendet In-Memory-Daten), können wir die Daten nicht zwischen mehreren Worker-Prozessen synchronisieren. Daher müssen wir einen Worker verwenden.

Übertragen Sie die Änderungen in Ihr GitHub-Repository:

$ git add .
$ git commit -m "configured app for heroku"
$ git push origin heroku

Heroku-Anwendung bereitstellen

Heroku verwendet sogenannte Buildpacks, um Anwendungen in Einheiten zu verwandeln, die auf Dynos ausgeführt werden können. Ein Buildpack ist lediglich ein Satz spezialisierter Skripte für eine bestimmte Programmiersprache.

Wenn Sie Ihren Code zu Heroku übertragen, erkennt Heroku automatisch die Programmiersprache Ihres Projekts und das für die Erstellung erforderliche Buildpack. Im Falle von Python wird geprüft, ob eine requirements.txt-Datei vorhanden ist.

Um Ihre Anwendung bereitzustellen, müssen Sie lediglich den Code an die heroku-Remote übertragen:

$ git push heroku heroku:main

Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 318 bytes | 318.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Updated five paths from 30a4ffb
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Building on the Heroku-22 stack
remote: -----> Using buildpack: heroku/python
remote: -----> Python app detected
remote: -----> Requirements file has been changed, clearing cached dependencies
remote: -----> Installing python-3.11.5
remote: -----> Installing pip 23.2.1, setuptools 68.0.0 and wheel 0.41.0
remote: -----> Installing SQLite3
remote: -----> Installing requirements with pip
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote:
remote: -----> Compressing...
remote:        Done: 30.6M
remote: -----> Launching...
remote:        Released v5
remote:        https://<app_name>-31a6fd70e769.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.

Heroku wählte automatisch ein geeignetes Buildscript aus, installierte die Anforderungen und stellte die Anwendung auf einem Dyno bereit.

Falls die Bereitstellung fehlgeschlagen ist, können Sie mit Heroku CLI die Protokolle einsehen:

$ heroku logs --tail

Prüfen Sie als nächstes den Status Ihrer App:

$ heroku apps:info <app_name>

=== <app_name>
Auto Cert Mgmt: false
Dynos:          web: 1
Git URL:        https://git.heroku.com/<app_name>.git
Owner:          <your_email>
Region:         us
Repo Size:      9 KB
Slug Size:      31 MB
Stack:          heroku-22
Web URL:        https://<app_name>-31a6fd70e769.herokuapp.com/

Versuchen Sie, Ihre Anwendung im Browser zu besuchen, indem Sie zur “Web URL” navigieren.

Das war’s mit dem Heroku-Teil. Der folgende Abschnitt befasst sich mit der Bereitstellung der gleichen Anwendung in Back4app Containern.

Wie kann ich eine Anwendung in Back4app Containern bereitstellen?

In diesem Abschnitt werden wir eine Anwendung in Back4app Containern bereitstellen.

Was ist Back4app Containers?

Back4app Containers ist eine großartige Containers as a Service (CaaS) Plattform. Mit ihr können Sie Anwendungen auf global verteilten Containern bereitstellen, verwalten und skalieren.

Die Plattform ist eng mit GitHub integriert und bietet ein integriertes CI/CD-System. Zu den weiteren Funktionen gehören Bereitstellungen ohne Ausfallzeiten, benutzerdefinierte Domain-Verknüpfung, Protokollierung, Überwachung und mehr.

Das Beste ist, dass die Plattform ein großzügiges kostenloses Angebot bereitstellt. Mit über 600 kostenlosen monatlichen Containerstunden können Sie ganz einfach Prototypen erstellen und Ihre Lieblingsprojekte hosten. Wenn Ihre App skaliert, können Sie auf Premium-Tiers mit vorhersehbaren Preisen upgraden.

Um mehr über Container als Service zu erfahren, lesen Sie bitte Was ist CaaS – Containers as a Service?

Wechseln Sie zu einem neuen Zweig namens back4app, der auf dem Master-Zweig basiert:

$ git checkout master && git checkout -b back4app

Zielsetzungen

  1. Dockerisieren Sie die Anwendung.
  2. Verbinden Sie Ihr GitHub mit Ihrem Back4app-Konto.
  3. Importieren Sie das gewünschte GitHub-Repositorium.
  4. Einsetzen!

Dockerize

Um eine Anwendung in Back4app Containern bereitzustellen, müssen Sie sie zunächst andocken.

Dockerisierung ist der Prozess der Erstellung, Bereitstellung und Ausführung von Anwendungen in Docker-Containern. Der einfachste Weg, eine Anwendung zu dockerisieren, ist eine Dockerdatei.

Dockerdatei

Ein Dockerfile ist ein Skript, das Anweisungen für die Erstellung eines Docker-Container-Images enthält. Sie können diese Datei verwenden, um die Umgebung, Abhängigkeiten und andere Befehle zu definieren, die zum Erstellen und Ausführen einer Anwendung erforderlich sind.

Sie hat die folgende Syntax:

COMMAND <arg_1> <arg_2> ... <arg_n>

Erstellen Sie eine Dockerdatei im Stammverzeichnis des Projekts mit folgendem Inhalt:

FROM python:3.9.6-alpine

# Set the working directory
WORKDIR /app

# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

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

# Copy over the source code
COPY . .

# Expose the port
EXPOSE 80

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]

Dieses Dockerfile basiert auf dem python:3.9.6-alpine-Image. Es legt zunächst das Arbeitsverzeichnis und die Umgebungsvariablen fest und kümmert sich dann um die Anforderungen. Danach kopiert es den Quellcode, gibt Port 80 frei und startet den Uvicorn-Server an diesem Port.

Für den Einsatz anderer Programmiersprachen und Frameworks können Sie die Dockerdateien aus den Back4app Containers-Dokumenten herunterladen.

Wenn Sie wissen möchten, wie ein Dockerfile-Befehl funktioniert, schlagen Sie in der Dockerfile-Referenz nach.

.dockerignore

Wir können eine .dockerignore-Datei verwenden, um die Größe des Docker-Images zu reduzieren. Diese Dateien funktionieren ähnlich wie .gitignore-Dateien. Sie müssen Dateien und Verzeichnisse definieren, die Sie aus dem Abbild ausschließen möchten.

In unserem Fall sind das die virtuelle Umgebung, die IDE-Dateien und der .git-Ordner.

Erstellen Sie eine .dockerignore-Datei wie folgt:

.git/
.idea/
venv/

Sie können die .dockerignore-Datei nach Belieben an die Bedürfnisse Ihres Projekts anpassen.

Übertragen Sie die Änderungen in Ihr GitHub-Repository:

$ git add .
$ git commit -m "configured app for back4app"
$ git push origin back4app

Erstellen, Ausführen und Testen

Bevor Sie Ihren Code in die Cloud stellen, sollten Sie ihn lokal testen.

Erstellen Sie zunächst das Bild und markieren Sie es:

$ docker build -t back4app-url-shortener:1.0 .

Als nächstes werden die Bilder aufgelistet:

$ docker images

REPOSITORY                      TAG            IMAGE ID       CREATED         SIZE
back4app-url-shortener          1.0            1cbe348a04ad   1 minute ago    68.7MB

Starten Sie den Container mit dem soeben erstellten Image:

$ docker run -p 80:80 --name back4app-url-shortener back4app-url-shortener:1.0

Erklärung der Argumente:

  1. -p 80:80 bindet Port 80 des Host-Rechners an Port 80 des Containers
  2. --name back4app-url-shortener benennt die Container-Instanz

Sie können -d verwenden, um den Container im abgetrennten Modus zu betreiben (ohne das Terminal zu belegen).

Prüfen Sie, ob der Container in Betrieb ist:

$ docker ps

CONTAINER ID   IMAGE                        CREATED    STATUS    PORTS
b3b82313ab65   back4app-url-shortener:1.0   3s ago     1s        0.0.0.0:80->80/tcp

Öffnen Sie Ihren bevorzugten Webbrowser und navigieren Sie zu http://localhost/docs. Sie sollten den URL-Verkürzungsdienst sehen können.

App bereitstellen

Für die folgenden Schritte benötigen Sie ein Back4app-Konto. Wenn Sie noch keins haben, melden Sie sich für ein kostenloses Konto an. Alles, was wir in dieser Anleitung tun, wird mit dem kostenlosen Konto durchgeführt.

Wenn Sie sich bei Ihrem Back4app-Konto anmelden, wird Ihnen die App-Liste angezeigt. Klicken Sie auf “Neue App erstellen”, um den Prozess der App-Erstellung zu starten.

Back4app App Erstellung

Back4app bietet zwei Lösungen an:

  1. Backend as a Service (BaaS) – eine sofort einsatzbereite Backend-Lösung
  2. Containers as a Service (CaaS) – eine Docker-gestützte Plattform zur Bereitstellung von Containern

Da wir eine benutzerdefinierte Python-Anwendung bereitstellen wollen, entscheiden wir uns für CaaS. Wählen Sie “Containers as a Service” auf der rechten Seite des Bildschirms.

Back4app-Container als Dienstleistung

Sie werden aufgefordert, Ihr GitHub-Konto zu verknüpfen, wenn Sie zum ersten Mal mit Back4app arbeiten. Stellen Sie außerdem sicher, dass Sie alle Repositories importieren, die Sie bereitstellen möchten.

Wählen Sie anschließend das GitHub-Repository aus, das Sie bereitstellen möchten:

Back4app-Container wählen GitHub-Repository

Da wir eine einfache Anwendung bereitstellen, müssen wir die Umgebung nicht besonders konfigurieren. Alles, was Sie tun müssen, ist einstellen:

  1. App Name: back4app-url-shortener (Sie können einen anderen Namen wählen)
  2. Zweig: back4app (Ihr GitHub-Zweig)

Klicken Sie dann auf “Bereitstellen”.

Back4app Containers Umgebung konfigurieren

Back4app Containers bietet viele Konfigurationsoptionen, darunter automatische Deployments, Port-Einstellungen, Umgebungsvariablen und Health Checks.

Back4app Containers wird eine Weile brauchen, um Ihr Docker-Image zu erstellen und bereitzustellen. Sobald Ihre App fertig ist, ändert sich der Status der App auf “Verfügbar”. Um Ihre App zu besuchen, klicken Sie auf den Link unter dem Status, wie in der Abbildung dargestellt.

Erfolgreicher Einsatz von Back4app Containern

Gut gemacht! Sie haben erfolgreich eine Webanwendung in Back4app Containers implementiert.

Schlussfolgerung

In diesem Tutorial haben Sie gelernt, wie Sie eine einfache Webanwendung auf Heroku und Back4app Containers bereitstellen können. Beide Plattformen haben Vor- und Nachteile, die Sie bei der Bereitstellung einer Anwendung berücksichtigen sollten.

Als Faustregel würde ich Back4app Containers für Anwendungen verwenden, die keine Datenbank benötigen. Back4app Containers wird Ihnen helfen, Geld zu sparen, und die kostenlose Version ist mehr als genug für Ihre Lieblingsprojekte.

Heroku könnte besser sein, wenn Ihre Anwendung auf eine Datenbank oder ausgefallene Add-ons angewiesen ist.

In der folgenden Tabelle habe ich einige der wichtigsten Unterschiede zwischen den Plattformen zusammengefasst:

HerokuBack4app-Behälter
Cloud-ModellPlattform als Dienstleistung (PaaS)Container als Dienstleistung (CaaS)
Aufbau und EinsatzBuildpacksDocker
Unterstützte Sprachen9 ProgrammiersprachenJede Sprache oder jedes Framework
Kostenloses HTTPS/SSL✔️✔️
Benutzerdefinierte Domänen✔️✔️
Freie Ebene✔️
Risiko der Anbieterbindung✔️
Verwaltete Datenbanken✔️
EinsteigerfreundlichJa (erfordert einige DevOps-Kenntnisse)Ja (erfordert einige Docker-Kenntnisse)

Sie können den endgültigen Quellcode aus dem GitHub-Repository herunterladen.

FAQ

Was ist Heroku?

Heroku, gegründet im Jahr 2007, ist eine der ersten Platform as a Service (PaaS)-Plattformen. Sie ermöglicht die Bereitstellung von neun Programmiersprachen, darunter Java, PHP, Python und Ruby. Darüber hinaus bietet sie verwaltete Datenbanken, Add-ons, erweitertes Logging, Monitoring und mehr.

Wie stellt man eine App auf Heroku bereit?

1. Registrieren Sie sich für ein Heroku-Konto.
2. Installieren und konfigurieren Sie die Heroku-CLI.
3. Erstellen Sie eine Heroku-App.
4. Geben Sie die Laufzeit in runtime.txt an.
5. Definieren Sie die App-Prozesse über Procfile.
6. Pushen Sie Ihren Quellcode zu Heroku.

Was ist Back4app Containers?

Containers ist eine hervorragende Containers as a Service (CaaS)-Plattform. Sie ermöglicht das schnelle Bereitstellen, Verwalten und Skalieren containerisierter Anwendungen auf global verteilten Containern. Sie verfügt über ein integriertes CI/CD-System, unterstützt unterbrechungsfreie Deployments, benutzerdefinierte Domains & mehr!

Wie stellt man eine App auf Back4app Containers bereit?

1. Registrieren Sie sich für ein kostenloses Back4app-Konto.
2. Dockerisieren Sie Ihre Anwendung.
3. Pushen Sie Ihren Quellcode zu GitHub.
4. Verbinden Sie GitHub mit Ihrem Back4app-Konto.
5. Importieren Sie das gewünschte Repository & stellen Sie es bereit!


Leave a reply

Your email address will not be published.