在VPS上部署Swift应用程序:从A到Z的分步指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么要在VPS上部署Swift?

Swift不仅仅是用于iOS和macOS应用程序的语言。得益于Vapor框架和对Linux的原生支持,您可以使用Swift创建高性能的服务器端解决方案。将此类应用程序部署到VPS(虚拟专用服务器)上,为创建自己的API、网站和微服务提供了可能性。

在本文中,我们将介绍在运行Ubuntu 22.04的远程服务器上部署Swift应用程序的完整流程。您将学习如何准备环境、编译项目、配置自动启动和代理服务器。本指南既适合新手,也适合希望系统化知识的有经验的开发者。



1. 服务器准备与安装Swift

第一步是租用VPS(建议2核,2 GB RAM)。通过SSH连接后,执行系统更新并安装依赖项。



1.1. 基本设置

ssh root@您的服务器IPapt update && apt upgrade -yapt install curl git build-essential pkg-config libssl-dev zlib1g-dev -y


1.2. 安装Swift工具链

对于Ubuntu 22.04,请使用官方的Swift发行版。在swift.org上查看最新版本。

# 下载Swift 5.9(示例)wget https://download.swift.org/swift-5.9-release/ubuntu2204/swift-5.9-RELEASE/swift-5.9-RELEASE-ubuntu22.04.tar.gz

# 解压tar -xzf swift-5.9-RELEASE-ubuntu22.04.tar.gzmv swift-5.9-RELEASE-ubuntu22.04 /usr/share/swift

# 添加到PATHecho 'export PATH=/usr/share/swift/usr/bin:$PATH' >> ~/.bashrcsource ~/.bashrc

# 验证swift --version


2. 编译与配置应用程序

我们来部署一个典型的Vapor应用程序。假设您的项目已经在Git仓库中。



2.1. 克隆与构建

cd /var/www/git clone https://github.com/您的用户名/您的仓库.git myappcd myapp

# 以Release模式构建swift build -c release

编译成功后,可执行文件将位于.build/release/Run。Vapor默认使用8080端口。



2.2. 运行与测试

# 临时运行(按Ctrl+C停止).build/release/Run serve --hostname 0.0.0.0 --port 8080

检查运行情况:在浏览器中打开http://您的服务器IP:8080。如果您看到响应,说明一切正常。



3. 配置systemd以实现自动启动

为了让应用程序在服务器重启后自动启动,我们将创建一个systemd服务。



3.1. 创建服务

nano /etc/systemd/system/myapp.service

粘贴以下代码(将路径替换为您自己的):

[Unit]Description=Swift Vapor ApplicationAfter=network.target

[Service]Type=simpleUser=www-dataGroup=www-dataWorkingDirectory=/var/www/myappExecStart=/var/www/myapp/.build/release/Run serve --hostname 127.0.0.1 --port 8080Restart=on-failureRestartSec=5

[Install]WantedBy=multi-user.target


3.2. 激活与启动

systemctl daemon-reloadsystemctl enable myappsystemctl start myappsystemctl status myapp

如果状态显示active (running),则表示服务正在运行。现在应用程序将自动启动。



4. 配置Nginx和SSL(HTTPS)

Nginx代理服务器对于处理静态文件、负载均衡和添加SSL证书是必需的。



4.1. 安装Nginx

apt install nginx -y


4.2. 代理配置

为您的域名或IP创建配置文件:

nano /etc/nginx/sites-available/myapp
server {    listen 80;    server_name 您的域名.ru;

location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $ho

博客

书籍推荐