# 部署到 DigitalOcean 本指南将引导你将一个简单的 Hello, world Vapor 应用程序部署到 [Droplet](https://www.digitalocean.com/products/droplets/)。要遵循本指南,你需要有一个付费的 [DigitalOcean](https://www.digitalocean.com) 帐户。 ## 创建服务器 让我们从在 Linux 服务器上安装 Swift 开始。 使用创建菜单创建一个新的 Droplet。 ![Create Droplet](../images/digital-ocean-create-droplet.png) 在发行版下,选择 Ubuntu 22.04 LTS。以下指南将以此版本为例。 ![Ubuntu Distro](../images/digital-ocean-distributions-ubuntu.png) !!! note "注意" 你也可以选择 Swift 支持的其它 Linux 发行版。在撰写本文时。你可以在 [Swift Releases](https://swift.org/download/#releases) 页面上查看官方支持哪些操作系统。 选择完发行版后,选择你喜欢的套餐和数据中心所在区域。然后设置一个 SSH 密钥以在创建服务器后访问它。最后, 点击创建 Droplet 并等待新服务器启动。 新服务器准备完毕后,鼠标悬停在 Droplet 的 IP 地址上,然后单击复制。 ![Droplet List](../images/digital-ocean-droplet-list.png) ## 初始化设置 打开你的终端,使用 SSH 通过 root 身份登录到服务器。 ```sh ssh root@your_server_ip ``` 在 [Ubuntu 22.04](https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-22-04) 上初始化服务器设置,DigitalOcean 提供了深入指南。 本指南将快速介绍一些基础知识。 ### 配置防火墙 允许 OpenSSH 通过防火墙并且启用它。 ```sh ufw allow OpenSSH ufw enable ``` ### 添加用户 除了 `root` 用户在创建一个新用户。本指南创建了一个 `vapor` 用户。 ```sh adduser vapor ``` 允许新创建的用户使用 `sudo`。 ```sh usermod -aG sudo vapor ``` 复制 root 用户的 SSH 密钥到新创建的用户。允许新用户通过 SSH 登录。 ```sh rsync --archive --chown=vapor:vapor ~/.ssh /home/vapor ``` 最后,退出当前 SSH 会话,用新创建的用户进行登录。 ```sh exit ssh vapor@your_server_ip ``` ## 安装 Swift 现在你已经创建了一个新的 Ubuntu 服务器并且通过非 root 身份登录到服务器,你可以安装 Swift。 ### 使用 Swiftly CLI 工具自动安装(推荐) 访问 [Swiftly 网站](https://swiftlang.github.io/swiftly/)获取在 Linux 上安装 Swiftly 和 Swift 的说明。之后,安装 Swift 使用如下命令: #### 基本用法 ```sh $ swiftly install latest Fetching the latest stable Swift release... Installing Swift 5.9.1 Downloaded 488.5 MiB of 488.5 MiB Extracting toolchain... Swift 5.9.1 installed successfully! $ swift --version Swift version 5.9.1 (swift-5.9.1-RELEASE) Target: x86_64-unknown-linux-gnu ``` ## 使用 Vapor 工具箱安装 Vapor 现在已经安装了 Swift,让我们 Vapor工具箱来安装 Vapor。你需要通过源码在构建工具箱。在 GitHub 上查看工具箱的[发布](https://github.com/vapor/toolbox/releases)版本,以查找最新版本。在本例中,我们使用 18.6.0 版本。 ### 克隆并构建 Vapor 克隆 Vapor 工具箱仓库。 ```sh git clone https://github.com/vapor/toolbox.git ``` 切换到最近的发布版本。 ```sh cd toolbox git checkout 18.6.0 ``` 构建 Vapor 并将二进制文件移动到你的 path 中。 ```sh swift build -c release --disable-sandbox --enable-test-discovery sudo mv .build/release/vapor /usr/local/bin ``` ### 创建 Vapor 项目 使用工具箱的 new 命令初始化项目。 ```sh vapor new HelloWorld -n ``` !!! tip "建议" `-n` 标志表示自动回答所有问题为 no,并提供一个基础的模板。 ![Vapor Splash](../images/vapor-splash.png) 命令执行完成后,切换到新创建的文件夹: ```sh cd HelloWorld ``` ### 打开 HTTP 端口 为了访问服务器上的 Vapor 程序,需要开启相应 HTTP 端口。 ```sh sudo ufw allow 8080 ``` ### 运行 现在 Vapor 已经设置好了,并且有了公开的端口,让我们启动它吧。 ```sh swift run App serve --hostname 0.0.0.0 --port 8080 ``` 通过浏览器或者本地终端访问服务器的 IP, 你应该会看到 “It works!”。本例中的 IP 地址为 `134.122.126.139`。 ``` $ curl http://134.122.126.139:8080 It works! ``` 回到服务器上,你应该会看到测试请求的日志。 ``` [ NOTICE ] Server starting on http://157.245.244.228:80 [ INFO ] GET / ``` 使用 `CTRL+C` 退出服务器。可能需要一秒钟才能关闭。 恭喜你的 Vapor 应用程序运行在 DigitalOcean Droplet 上了! ## 下一步 本指南的其余部分指向的资源用于改进你的部署。 ### Supervisor Supervisor 是一个进程控制系统,可以运行和监控你的 Vapor 可执行文件。通过设置 supervisor, 服务器启动时应用程序自动启动,并在崩溃是重新启动。了解有关 [Supervisor](../deploy/supervisor.md) 的更多信息。 ### Nginx Nginx 是一个速度极快、经过实战考验并且易于配置的 HTTP 服务器和代理。虽然 Vapor 支持直接的 HTTP 请求,但 Nginx 背后的代理可以提供更高的性能、安全性和易用性。了解有关 [Nginx](../deploy/nginx.md) 的更多信息。