Déploiement d'une application Swift sur VPS : pas à pas de A à Z
\n\nSwift a depuis longtemps cessé d'être un langage réservé au développement iOS. Grâce au framework Vapor et au support officiel de Linux, vous pouvez créer des applications serveur hautes performances en Swift et les déployer sur un VPS. Dans ce guide, nous parcourrons tout le chemin, de la configuration du serveur au lancement de la version de production de votre application Swift.
\n\n1. Préparation du VPS et installation de Swift
\n\nPour commencer, vous aurez besoin d'un VPS avec Ubuntu 22.04 LTS (ou 20.04). Connectez-vous en SSH et effectuez la mise à jour du système :
\n\nssh root@votre-ip-serveur\napt update && apt upgrade -y\n\nInstallez les dépendances nécessaires pour Swift :
\n\napt install -y curl git build-essential libssl-dev libcurl4-openssl-dev\napt install -y libxml2-dev libicu-dev libsqlite3-dev libz-dev\n\nTéléchargez et installez maintenant Swift pour Ubuntu. Vérifiez la version actuelle sur swift.org. Au moment de la rédaction de cet article, il s'agit de Swift 5.9 :
\n\ncd /opt\nwget https://download.swift.org/swift-5.9-release/ubuntu2204/swift-5.9-RELEASE/swift-5.9-RELEASE-ubuntu22.04.tar.gz\ntar xzf swift-5.9-RELEASE-ubuntu22.04.tar.gz\necho 'export PATH=/opt/swift-5.9-RELEASE-ubuntu22.04/usr/bin:$PATH' >> ~/.bashrc\nsource ~/.bashrc\n\nVérifiez l'installation :
\n\nswift --version\n\nVous devriez voir la version Swift 5.9.
\n\n2. Création et compilation de l'application Swift/Vapor
\n\nInstallez Vapor Toolbox (optionnel mais pratique) :
\n\ngit clone https://github.com/vapor/toolbox.git\ncd toolbox\nswift build -c release\ncp .build/release/vapor /usr/local/bin/\n\nCréons une application Vapor de test. Si vous avez déjà un projet, copiez-le simplement sur le serveur via SCP ou Git.
\n\ncd ~\nvapor new HelloServer\ncd HelloServer\n\nModifions Sources/App/routes.swift pour ajouter un endpoint simple :
import Vapor\n\nfunc routes(_ app: Application) throws {\n app.get { req async in\n "Hello from Swift on VPS!"\n }\n \n app.get("status") { req async -> HTTPStatus in\n return .ok\n }\n}\n\nCompilez le projet en mode production :
\n\nswift build -c release\n\nLe binaire apparaîtra dans .build/release/HelloServer.
3. Configuration du lancement et du service systemd
\n\nPour que l'application démarre automatiquement après un redémarrage du serveur, créons un service systemd. Créez d'abord un utilisateur pour l'application (sécurité) :
\n\nuseradd -m -s /bin/bash swiftuser\nchown -R swiftuser:swiftuser /root/HelloServer\n\nCréez le fichier de service :
\n\nnano /etc/systemd/system/helloserver.service\n\nInsérez le contenu suivant :
\n\n[Unit]\nDescription=HelloServer Swift App\nAfter=network.target\n\n[Service]\nType=simple\nUser=swiftuser\nWorkingDirectory=/root/HelloServer\nExecStart=/root/HelloServer/.build/release/HelloServer --host 127.0.0.1 --port 8080\nRestart=on-failure\nRestartSec=5\n\n[Install]\nWantedBy=multi-user.target\n\nLancez le service :
\n\nsystemctl daemon-reload\nsystemctl enable helloserver\nsystemctl start helloserver\nsystemctl status helloserver\n\nVérifiez que l'application répond localement :
\n\ncurl http://127.0.0.1:8080\n\n4. Configuration de Nginx comme proxy inverse
\n\nPour un environnement de production, il n'est pas recommandé d'ouvrir le port 8080 directement. Installons Nginx et configurons le proxy avec SSL (Let's Encrypt).
\n\napt install -y nginx certbot python3-certbot-nginx\n\nCréez la configuration Nginx :
\n\nnano /etc/nginx/sites-available/helloserver\n\nInsérez :
\n\nserver {\n listen 80;\