Bereitstellung einer Swift-App auf einem VPS: Schritt-für-Schritt-Anleitung
Die Entwicklung von Serveranwendungen in Swift mit dem Framework Vapor gewinnt an Popularität. Nachdem der Code geschrieben ist, stellt sich jedoch die Frage: Wie hoste ich eine Swift-Anwendung auf einem Remote-Server? In diesem Artikel werden wir den gesamten Bereitstellungsprozess einer Swift-Anwendung auf einem VPS (Ubuntu 22.04) durchgehen – von der Installation der erforderlichen Komponenten bis zur Konfiguration eines Reverse Proxy und dem Start im Produktionsmodus.
1. Servervorbereitung und Installation von Swift
Zuerst verbinden wir uns per SSH mit dem VPS und aktualisieren die Paketdatenbank:
sudo apt update && sudo apt upgrade -ySwift benötigt Abhängigkeiten für die Kompilierung. Wir installieren sie:
sudo apt install clang libicu-dev libcurl4-openssl-dev libssl-dev python3 pkg-config -yAnschließend laden wir Swift für Ubuntu herunter und installieren es. Zum Zeitpunkt der Erstellung dieses Artikels ist Version 5.9 aktuell. Wir laden das Archiv herunter:
wget https://download.swift.org/swift-5.9-release/ubuntu2204/swift-5.9-RELEASE/swift-5.9-RELEASE-ubuntu22.04.tar.gzWir entpacken es und verschieben es nach /usr/share:
tar xzf swift-5.9-RELEASE-ubuntu22.04.tar.gzsudo mv swift-5.9-RELEASE-ubuntu22.04 /usr/share/swiftWir fügen Swift zum PATH hinzu. Öffnen Sie ~/.bashrc:
nano ~/.bashrcFügen Sie die folgende Zeile am Ende der Datei hinzu:
export PATH="/usr/share/swift/usr/bin:$PATH"Wenden Sie die Änderungen an:
source ~/.bashrcWir überprüfen die Installation:
swift --versionEs sollte die Swift-Version 5.9 angezeigt werden.
2. Kompilieren der Swift-Anwendung (Vapor) auf dem Server
Wir klonen das Repository mit der Anwendung oder kopieren die Dateien per SCP. Als Beispiel erstellen wir ein Testprojekt mit Vapor:
mkdir ~/myapp && cd ~/myappswift package init --type executableWir fügen Vapor zu Package.swift hinzu (Beispiel für einen minimalen Server):
// swift-tools-version:5.9import PackageDescription
let package = Package( name: "myapp", platforms: [.macOS(.v13)], dependencies: [ .package(url: "https://github.com/vapor/vapor.git", from: "4.89.0") ], targets: [ .executableTarget(name: "myapp", dependencies: [ .product(name: "Vapor", package: "vapor") ]) ])Wir erstellen die Datei Sources/myapp/main.swift:
import Vapor
let app = try Application(.detect())app.get { req in return "Hello, Swift on VPS!"}try app.run()Wir kompilieren das Projekt im Release-Modus:
swift build -c releaseNach der Kompilierung befindet sich die Binärdatei in .build/release/myapp. Wir kopieren sie an einen geeigneten Ort:
cp .build/release/myapp /usr/local/bin/myapp3. Konfiguration von Nginx als Reverse Proxy
Die Swift-Anwendung wird auf Port 8080 lauschen, und Nginx wird den Datenverkehr von Port 80 (oder 443 für HTTPS) weiterleiten. Wir installieren Nginx:
sudo apt install nginx -yWir erstellen eine Konfigurationsdatei für unsere Anwendung:
sudo nano /etc/nginx/sites-available/myappInhalt der Datei:
server { listen 80; server_name your-domain.com;
location / { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; }}Wir aktivieren die Konfiguration und starten Nginx neu:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/sudo nginx -tsudo systemctl restart nginxVergessen Sie nicht, einen DNS-A-Eintrag für Ihre Domain zu konfigurieren, der auf die IP-Adresse des VPS verweist.