在 Ubuntu 上部署

一旦您准备好 Ubuntu 虚拟机,就可以部署您的 Swift 应用程序了。本指南假设您有一个全新的安装,其中包含一个名为 swift 的非 root 用户。它还假设 rootswift 都可以通过 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,您可能需要安装额外的系统库,例如 libxmltzdata。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 的下载链接。

Download Swift

下载并解压缩 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,以便 swiftroot 可以执行它。

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 服务器应用程序!