Was ist Heroku#
Heroku ist eine beliebte All-in-One-Hosting-Lösung, mehr dazu findest du auf heroku.com
Registrieren#
Du benötigst ein Heroku-Konto. Falls du noch keins hast, registriere dich bitte hier: https://signup.heroku.com/
CLI installieren#
Stelle sicher, dass du das Heroku-CLI-Tool installiert hast.
HomeBrew#
brew tap heroku/brew && brew install heroku
Weitere Installationsmöglichkeiten#
Alternative Installationsmöglichkeiten findest du hier: https://devcenter.heroku.com/articles/heroku-cli#download-and-install.
Anmelden#
Sobald du die CLI installiert hast, melde dich mit folgendem Befehl an:
heroku login
Überprüfe, ob mit der richtigen E-Mail-Adresse angemeldet ist:
heroku auth:whoami
Eine Anwendung erstellen#
Besuche dashboard.heroku.com, um auf dein Konto zuzugreifen, und erstelle eine neue Anwendung über das Dropdown-Menü oben rechts. Heroku wird dir einige Fragen stellen, etwa nach der Region und dem Anwendungsnamen. Folge einfach den Anweisungen.
Git#
Heroku verwendet Git, um deine App zu deployen. Du musst dein Projekt also in ein Git-Repository legen, falls es das nicht schon ist.
Git initialisieren#
Falls du Git zu deinem Projekt hinzufügen musst, gib folgenden Befehl im Terminal ein:
git init
Main#
Du solltest dich für einen Branch entscheiden und dabei bleiben, um auf Heroku zu deployen, z. B. den main- oder master-Branch. Stelle sicher, dass alle Änderungen in diesen Branch eingecheckt sind, bevor du pushst.
Überprüfe deinen aktuellen Branch mit:
git branch
Der Stern zeigt den aktuellen Branch an.
* main
commander
other-branches
Note
Wenn du keine Ausgabe siehst und gerade erst git init ausgeführt hast, musst du zunächst deinen Code committen. Danach siehst du eine Ausgabe des git branch-Befehls.
Falls du dich nicht auf dem richtigen Branch befindest, wechsle dorthin (für main):
git checkout main
Änderungen committen#
Wenn dieser Befehl eine Ausgabe erzeugt, hast du nicht committete Änderungen.
git status --porcelain
Committe sie mit folgendem Befehl
git add .
git commit -m "a description of the changes I made"
Mit Heroku verbinden#
Verbinde deine App mit Heroku (ersetze dies mit dem Namen deiner App).
$ heroku git:remote -a your-apps-name-here
Buildpack festlegen#
Lege das Buildpack fest, damit Heroku weiß, wie mit Vapor umzugehen ist.
heroku buildpacks:set vapor/vapor
Swift-Versionsdatei#
Das Buildpack, das wir hinzugefügt haben, sucht nach einer .swift-version-Datei, um zu wissen, welche Swift-Version verwendet werden soll. (Ersetze 5.8.1 durch die Version, die dein Projekt benötigt.)
echo "5.8.1" > .swift-version
Dies erstellt .swift-version mit 5.8.1 als Inhalt.
Procfile#
Heroku verwendet das Procfile, um zu wissen, wie deine App ausgeführt werden soll. In unserem Fall muss es folgendermaßen aussehen:
web: App serve --env production --hostname 0.0.0.0 --port $PORT
Wir können dies mit folgendem Terminal-Befehl erstellen
echo "web: App serve --env production" \
"--hostname 0.0.0.0 --port \$PORT" > Procfile
Änderungen committen#
Wir haben gerade diese Dateien hinzugefügt, aber sie sind noch nicht committet. Wenn wir pushen, wird Heroku sie nicht finden.
Committe sie mit folgendem Befehl.
git add .
git commit -m "adding heroku build files"
Auf Heroku deployen#
Du bist bereit zum Deployen, führe dies im Terminal aus. Der Build kann eine Weile dauern, das ist normal.
git push heroku main
Skalieren#
Sobald der Build erfolgreich war, musst du mindestens einen Server hinzufügen. Die Preise beginnen bei $5/Monat für den Eco-Plan (siehe Preise), stelle sicher, dass du eine Zahlungsmethode bei Heroku eingerichtet hast. Dann für einen einzelnen Web-Worker:
heroku ps:scale web=1
Fortlaufendes Deployment#
Wann immer du aktualisieren möchtest, hole einfach die neuesten Änderungen in den main-Branch und pushe sie zu Heroku, dann wird neu deployt.
Postgres#
PostgreSQL-Datenbank hinzufügen#
Besuche deine Anwendung auf dashboard.heroku.com und gehe zum Bereich Add-ons.
Gib hier postgres ein und du siehst eine Option für Heroku Postgres. Wähle sie aus.
Wähle den Essential-0-Plan für $5/Monat (siehe Preise) und provisioniere ihn. Heroku erledigt den Rest.
Sobald du fertig bist, erscheint die Datenbank im Tab Resources.
Die Datenbank konfigurieren#
Wir müssen unserer App nun mitteilen, wie sie auf die Datenbank zugreifen soll. Führe in deinem App-Verzeichnis Folgendes aus.
heroku config
Dies erzeugt eine Ausgabe etwa wie diese
=== today-i-learned-vapor Config Vars
DATABASE_URL: postgres://cybntsgadydqzm:2d9dc7f6d964f4750da1518ad71hag2ba729cd4527d4a18c70e024b11cfa8f4b@ec2-54-221-192-231.compute-1.amazonaws.com:5432/dfr89mvoo550b4
DATABASE_URL steht hier für unsere Postgres-Datenbank. Hardcode NIEMALS die statische URL daraus, Heroku rotiert sie und das würde deine Anwendung kaputt machen. Es ist außerdem schlechte Praxis. Lies stattdessen die Umgebungsvariable zur Laufzeit aus.
Das Heroku-Postgres-Addon erfordert, dass alle Verbindungen verschlüsselt sind. Die von den Postgres-Servern verwendeten Zertifikate sind intern bei Heroku, daher muss eine unverifizierte TLS-Verbindung eingerichtet werden.
Das folgende Snippet zeigt, wie man beides erreicht:
if let databaseURL = Environment.get("DATABASE_URL") {
var tlsConfig: TLSConfiguration = .makeClientConfiguration()
tlsConfig.certificateVerification = .none
let nioSSLContext = try NIOSSLContext(configuration: tlsConfig)
var postgresConfig = try SQLPostgresConfiguration(url: databaseURL)
postgresConfig.coreConfiguration.tls = .require(nioSSLContext)
app.databases.use(.postgres(configuration: postgresConfig), as: .psql)
} else {
// ...
}
Vergiss nicht, diese Änderungen zu committen
git add .
git commit -m "configured heroku database"
Deine Datenbank zurücksetzen#
Du kannst deine Datenbank zurücksetzen oder andere Befehle auf Heroku mit dem run-Befehl ausführen.
Um deine Datenbank zurückzusetzen:
heroku run App -- migrate --revert --all --yes --env production
Um zu migrieren:
heroku run App -- migrate --env production