在VPS上部署Swift应用程序:分步指南

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

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

开始课程

在VPS上部署Swift应用程序:分步指南

使用Vapor框架开发服务器端Swift应用程序正变得越来越流行。然而,在编写代码之后,问题来了:如何将Swift应用程序托管到远程服务器上?在本文中,我们将逐步介绍在VPS(Ubuntu 22.04)上部署Swift应用程序的完整过程——从安装必要组件到设置反向代理并以生产模式运行。



1. 服务器准备与Swift安装

首先,通过SSH连接到VPS并更新软件包数据库:

sudo apt update && sudo apt upgrade -y

Swift需要构建依赖项。安装它们:

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/myapp


3. 配置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地址。

博客

书籍推荐