在VPS上部署Swift应用程序:分步指南
使用Vapor框架开发服务器端Swift应用程序正变得越来越流行。然而,在编写代码之后,问题来了:如何将Swift应用程序托管到远程服务器上?在本文中,我们将逐步介绍在VPS(Ubuntu 22.04)上部署Swift应用程序的完整过程——从安装必要组件到设置反向代理并以生产模式运行。
1. 服务器准备与Swift安装
首先,通过SSH连接到VPS并更新软件包数据库:
sudo apt update && sudo apt upgrade -ySwift需要构建依赖项。安装它们:
sudo apt install clang libicu-dev libcurl4-openssl-dev libssl-dev python3 pkg-config -y然后下载并安装适用于Ubuntu的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解压并将其移动到/usr/share目录:
tar xzf swift-5.9-RELEASE-ubuntu22.04.tar.gzsudo mv swift-5.9-RELEASE-ubuntu22.04 /usr/share/swift将Swift添加到PATH环境变量。打开~/.bashrc:
nano ~/.bashrc在文件末尾添加以下行:
export PATH="/usr/share/swift/usr/bin:$PATH"应用更改:
source ~/.bashrc验证安装:
swift --version应显示Swift版本5.9。
2. 在服务器上构建Swift应用程序(Vapor)
克隆应用程序仓库或通过SCP复制文件。例如,创建一个测试Vapor项目:
mkdir ~/myapp && cd ~/myappswift package init --type executable将Vapor添加到Package.swift(最小服务器示例):
// 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") ]) ])创建文件Sources/myapp/main.swift:
import Vapor
let app = try Application(.detect())app.get { req in return "Hello, Swift on VPS!"}try app.run()以发布模式构建项目:
swift build -c release构建完成后,二进制文件将位于.build/release/myapp。将其复制到方便的位置:
cp .build/release/myapp /usr/local/bin/myapp3. 配置Nginx作为反向代理
Swift应用程序将监听8080端口,Nginx将把来自80端口(或443端口用于HTTPS)的流量重定向到该端口。安装Nginx:
sudo apt install nginx -y为我们的应用程序创建配置文件:
sudo nano /etc/nginx/sites-available/myapp文件内容:
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; }}激活配置并重启Nginx:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/sudo nginx -tsudo systemctl restart nginx不要忘记配置域名的DNS A记录,指向VPS的IP地址。