蚊章汇 - Tj Holowaychuk
type: channel
link: https://linuxcn.bwsl.wang/author/745/
description: Tj Holowaychuk
items: Up：在几秒钟内部署无服务器应用程序

Up：在几秒钟内部署无服务器应用程序
type: item
date: 2017-10-18T06:23:42+08:00
description: 去年，我为 Up 规划了一份蓝图，其中描述了如何以最小的成本在 AWS 上为大多数构建块创建一个很棒的无服务器环境。这篇文章则是讨论了 Up 的初始 alpha 版本。为什么关注 无服务器 serverless ？对于初学者来说，它可以节省成本，因为你可以按需付费，且只为你使用的付费。无服务器方式是自愈的，因为每个请求被隔离并被视作“无状态的”。最后，它可以无限轻松地扩展 —— 没有机器或集群要管理。部署你的代码就行了。大约一个月前，我决定开始在 apex/up 上开发它，并为动态 SVG 版本的 GitHub 用户投票功能写了第一个小型无服务器示例程序 tj/gh-polls。它运行良好，成本低于每月 1 美元即可为数百万次投票服务，因此我会继续这个项目，看看我是否可以提供开源版本及商业的变体版本。其长期的目标是提供“你自己的 Heroku” 的版本，支持许多平台。虽然平台即服务（PaaS）并不新鲜，但无服务器生态系统正在使这种方案日益萎缩。据说，AWS 和其他的供应商经常由于他们提供的灵活性而被人诟病用户体验。Up 将复杂性抽象出来，同时为你提供一个几乎无需运维的解决方案。安装你可以使用以下命令安装 Up，查看这篇临时文档开始使用。或者如果你使用安装脚本，请下载二进制版本。（请记住，这个项目还在早期。）curl -sfL https://raw.githubusercontent.com/apex/up/master/install.sh | sh 只需运行以下命令随时升级到最新版本：up upgrade 你也可以通过 NPM 进行安装：npm install -g up 功能这个早期 alpha 版本提供什么功能？让我们来看看！请记住，Up 不是托管服务，因此你需要一个 AWS 帐户和 AWS 凭证。如果你对 AWS 不熟悉，你可能需要先停下来，直到熟悉流程。我遇到的第一个问题是：up(1) 与 apex(1) 有何不同？Apex 专注于部署功能，用于管道和事件处理，而 Up 则侧重于应用程序、API 和静态站点，也就是单个可部署单元。Apex 不为你提供 API 网关、SSL 证书或 DNS，也不提供 URL 重写，脚本注入等。单命令无服务器应用程序Up 可以让你使用单条命令部署应用程序、API 和静态站点。要创建一个应用程序，你只需要一个文件，在 Node.js 的情况下，./app.js 监听由 Up 提供的 PORT'。请注意，如果你使用的是package.json，则会检测并使用start和build` 脚本。const http = require('http') const { PORT = 3000 } = process.env http.createServer((req, res) => { res.end('Hello World\n') }).listen(PORT) 额外的运行时环境也支持开箱可用，例如用于 Golang 的 “main.go”，所以你可以在几秒钟内部署 Golang、Python、Crystal 或 Node.js 应用程序。package main import ( "fmt" "log" "net/http" "os" ) func main() { addr := ":" + os.Getenv("PORT") http.HandleFunc("/", hello) log.Fatal(http.ListenAndServe(addr, nil)) } func hello(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello World from Go") } 要部署应用程序输入 up 来创建所需的资源并部署应用程序本身。这里没有模糊不清的地方，一旦它说“完成”了那就完成了，该应用程序立即可用 —— 没有远程构建过程。后续的部署将会更快，因为栈已被配置：使用 up url --open 测试你的程序，以在浏览器中浏览它，up url --copy 可以将 URL 保存到剪贴板，或者可以尝试使用 curl：curl `up url` Hello World 要删除应用程序及其资源，只需输入 up stack delete：例如，使用 up staging 或 up production 和 up url --open production 部署到预发布或生产环境。请注意，自定义域名尚不可用，它们将很快可用。之后，你还可以将版本“推广”到其他环境。反向代理Up 的一个独特的功能是，它不仅仅是简单地部署代码，它将一个 Golang 反向代理放在应用程序的前面。这提供了许多功能，如 URL 重写、重定…