在 Ubuntu 上部署
一旦您准备好 Ubuntu 虚拟机,就可以部署您的 Swift 应用程序了。本指南假设您有一个全新的安装,其中包含一个名为 swift
的非 root 用户。它还假设 root
和 swift
都可以通过 SSH 访问。有关设置此项的信息,请查看平台指南
打包 指南概述了可用的部署选项。本指南将逐步引导您完成针对 Ubuntu 的每个部署选项。这些示例将部署 SwiftNIO 的 示例 HTTP 服务器,但您可以使用自己的项目进行测试。
二进制部署
本节向您展示如何本地构建您的应用程序并仅部署二进制文件。
构建二进制文件
第一步是在本地构建您的应用程序。最简单的方法是使用 Docker。对于此示例,我们将部署 SwiftNIO 的演示 HTTP 服务器。首先克隆存储库。
git clone https://github.com/apple/swift-nio.git
cd swift-nio
进入项目文件夹后,使用以下命令通过 Docker 构建应用程序,并将所有构建产物复制到 .build/install
中。由于此示例将部署到 Ubuntu 18.04,因此使用 -bionic
Docker 镜像进行构建。
docker run --rm \
-v "$PWD:/workspace" \
-w /workspace \
swift:5.7-bionic \
/bin/bash -cl ' \
swift build && \
rm -rf .build/install && mkdir -p .build/install && \
cp -P .build/debug/NIOHTTP1Server .build/install/ && \
cp -P /usr/lib/swift/linux/lib*so* .build/install/'
提示:如果您正在为生产环境构建此项目,请使用
swift build -c release
,有关更多信息,请参阅为生产环境构建。
请注意,Swift 的共享库正在被包含在内。这很重要,因为 Swift 在 Linux 上不是 ABI 稳定的。这意味着 Swift 程序必须针对与其编译的共享库运行。
在您的项目构建完成后,使用以下命令创建一个归档文件,以便轻松传输到服务器。
tar cvzf hello-world.tar.gz -C .build/install .
接下来,使用 scp
将归档文件复制到部署服务器的主文件夹。
scp hello-world.tar.gz swift@<server_ip>:~/
复制完成后,登录到部署服务器。
ssh swift@<server_ip>
创建一个新文件夹来保存应用程序二进制文件并解压缩归档文件。
mkdir hello-world
tar -xvf hello-world.tar.gz -C hello-world
您现在可以启动可执行文件。提供所需的 IP 地址和端口。绑定到端口 80
需要 sudo,因此我们使用 8080
代替。
./hello-world/NIOHTTP1Server <server_ip> 8080
如果您的应用程序使用 Foundation,您可能需要安装额外的系统库,例如 libxml
或 tzdata
。Swift 的精简 docker 镜像安装的系统依赖项是一个 很好的参考。
最后,通过浏览器或本地终端访问您的服务器 IP,您应该会看到响应。
$ curl http://<server_ip>:8080
Hello world!
使用 CTRL+C
退出服务器。
恭喜您在 Ubuntu 上成功运行了 Swift 服务器应用程序!
源码部署
本节向您展示如何在部署服务器上构建和运行您的项目。
安装 Swift
现在您已经创建了一个新的 Ubuntu 服务器,您可以安装 Swift。您必须以 root
身份(或具有 sudo
访问权限的单独用户)登录才能执行此操作。
ssh root@<server_ip>
Swift 依赖项
安装 Swift 所需的依赖项。
sudo apt update
sudo apt install clang libicu-dev build-essential pkg-config
下载工具链
本指南将安装 Swift 5.2。访问 Swift 下载页面,获取最新版本的链接。复制 Ubuntu 18.04 的下载链接。
下载并解压缩 Swift 工具链。
wget https://swiftlang.cn/builds/swift-5.2-release/ubuntu1804/swift-5.2-RELEASE/swift-5.2-RELEASE-ubuntu18.04.tar.gz
tar xzf swift-5.2-RELEASE-ubuntu18.04.tar.gz
注意:Swift 的使用下载指南包含有关如何使用 PGP 签名验证下载的信息。
安装工具链
将 Swift 移动到易于访问的位置。本指南将使用 /swift
,每个编译器版本都在一个子文件夹中。
sudo mkdir /swift
sudo mv swift-5.2-RELEASE-ubuntu18.04 /swift/5.2.0
将 Swift 添加到 /usr/bin
,以便 swift
和 root
可以执行它。
sudo ln -s /swift/5.2.0/usr/bin/swift /usr/bin/swift
验证 Swift 是否已正确安装。
swift --version
设置项目
现在 Swift 已经安装好了,让我们克隆并编译您的项目。对于此示例,我们将使用 SwiftNIO 的 示例 HTTP 服务器。
首先,让我们安装 SwiftNIO 的系统依赖项。
sudo apt-get install zlib1g-dev
克隆 & 构建
现在我们已经完成了安装,我们可以切换到非 root 用户来构建和运行我们的应用程序。
su swift
cd ~
克隆项目,然后使用 swift build
编译它。
git clone https://github.com/apple/swift-nio.git
cd swift-nio
swift build
提示:如果您正在为生产环境构建此项目,请使用
swift build -c release
,有关更多信息,请参阅为生产环境构建。
运行
项目完成编译后,在端口 8080
上在您的服务器 IP 上运行它。
.build/debug/NIOHTTP1Server <server_ip> 8080
如果您使用了 swift build -c release
,那么您需要运行
.build/release/NIOHTTP1Server <server_ip> 8080
通过浏览器或本地终端访问您的服务器 IP,您应该会看到响应。
$ curl http://<server_ip>:8080
Hello world!
使用 CTRL+C
退出服务器。
恭喜您在 Ubuntu 上成功运行了 Swift 服务器应用程序!