如何使用 Now.sh来免费部署你的项目?

前言

ZEIT:Our Mission,Make Cloud Computing as Easy and Accessible as Mobile computing.

ZEIT是美国 (域名Ip指向美国华盛顿州西雅图市)一家提供云部署服务的公司,旗下的 Now.sh提供了Realtime global deployments(全球化实时部署)服务。

Now.sh 提供了免费的OSS 服务,配置如下:

名称 配置
带宽 1GB*
日志 100MB*
部署
并发实例 3
- †
MAX文件大小/存储空间 1MB / 1GB
自动增长支持 不支持
团队协作人数 支持

图例:

  • *超出此限额时,您需支付“按需”的价格。服务不中断,不会造成停机。
  • †对于某些开源项目,我们赞助了自定义域的支持。请联系我们,以确定您是否适用。
  • ‡在免费计划中,您的代码将是公开的和开源的,可通过所有部署的路径URL提供。/_src

Reference:https://zeit.co/pricing

Now.sh - 简介:

now allows you to take your JavaScript (Node.js) or Docker powered websites, applications and services to the cloud with ease, speed and reliability. In practical terms, any directory that contains a package.json or Dockerfile can be transported to the cloud with one command: now. Every time you deploy a project, now will provide you with a new, unique URL (even before the upload has finished). These URLs will look like this (my-app is your automatically determined application name): my-app-erkgfjtrna.now.sh. When it’s time to take your deployment to production, you simply pick an appropriate alias (a custom domain).

Reference:https://zeit.co/now#whats-now

Now.sh - 安装:

基于客户端进行安装:

客户端下载地址:https://zeit.co/download

安装过程就不一一赘述了,因为我也没安装过。我觉得使用homebrewnpm之类的工具安装使用会更方便一些。

基于 npm 进行安装:

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
➜  npm install -g now
/usr/local/bin/now -> /usr/local/lib/node_modules/now/download/dist/now

> now@8.2.2 postinstall /usr/local/lib/node_modules/now
> node download/install.js

> For the source code, check out: https://github.com/zeit/now-cli

> Downloading now CLI 8.2.2 [====================] 100%

+ now@8.2.2
added 1 package in 15.18s

如果你还不会使用 npm (Node Package Manager),请翻阅之前发布的 npm使用教程。

Reference:https://www.npmjs.com/package/now

Now.sh - CLI:

以下是所有可用命令的完整列表,以及您可以使用的命令和您每天工作时应记住的命令:

Syntax Description
now deploy [path] 使用此命令时,当前目录中的文件将被上传到now.sh,并将创建一个新的部署。之后,您将立即收到其网址,以便与全球其他人分享。
now ls\list [app] 显示所有部署的列表。如果被定义,它将仅列出该命名空间下的部署。
now rm\remove [id] 从now.sh平台中删除部署。该参数可以是您之前的部署的URL或主机名。
now ln\alias [id] [url] 在现有部署上配置别名或自定义域名。
now domains [name] 允许您直接从命令行管理域名。
now certs [cmd] 默认情况下,now.sh将自动为您的部署配置证书。使用此子命令,您可以看到他们何时到期。
now secrets [name] 如果您需要将敏感信息存储在只能由其中运行的代码访问的部署上。这可以通过使用它来实现,它允许您以安全的方式存储应用程序所需的功能(如API令牌或密码)
now dns [name] 列出使用zeit.world为域创建的所有DNS记录。该列表不包括由名称服务器自动生成的记录(如默认记录,为记录自动创建的记录等)。SOA``A / AAAA``ALIAS
now open 运行此子命令将在默认浏览器的当前目录中打开项目的最新部署(别名此时无效)
now billing\cc 轻松添加或删除帐户中的信用卡,并调整结算方式。
now upgrade\downgrade [plan] 从命令行界面切换您的计划。即使命令运行后,我们也不要求您使用Web界面。整个过程直接发生在你的终端上。
now help 显示终端中的子命令和选项列表
now login 登录你的 ZEIT账户

Reference:https://zeit.co/docs/features/now-cli

Now.sh - 使用:

要使用 Now.sh就必须要再 https://zeit.co 注册一个账户,只需要输入你的邮箱就好了,然后在本地进行认证,认证过程中需要输入你注册时所用的邮箱,然后打开邮箱点击链接进行认证。

示例代码:

1
2
3
4
5
6
➜  ~ now login
> We sent an email to youremail@gmail.com. Please follow the steps provided
inside it and make sure the security code matches Silly Water Buffalo.
✔ Email confirmed
✔ Fetched your personal details
> Ready! Authentication token and personal details saved in "~/.now"

邮件内容:

1
2
3
4
5
6
7
8
Hi!

Login attempt from Shenzhen, China

Verify that the provided security code matches Confident African Civet
before proceeding.

Then please follow this link to verify your email address.

Now.sh - 部署:

Now.sh is free for open-source projects and static deployments. It supports Dockerfile, package.json and static sites out of the box. All builds are reproducible and executed in the cloud.

译:Now.sh对于开源项目和静态部署是免费的。它支持Dockerfile,package.json和静态网站开箱即用。所有的构建都是可重现的,并在云中执行。

现在你可以使用now命令来部署任何 web应用程序,现在 Now.sh 支持三种类型的部署:

  • Static - 静态网页应用
  • Node.js - Node.js 应用
  • Docker - Docker应用(适用于所有其他应用)

Static 部署:

通过静态部署,可以将本地资源部署到 Now.sh 上,需要部署请访问应用程序目录并运行此命令:

1
➜  yourproject/ now

如果你的静态 web 项目中包含index.html文件,则项目可正常显示,否则只会显示文件和文件夹(用来做 ftp 服务器也不错)。

For all static deployments, you will be charged only for the bandwidth. You do not pay for computing resources and storage.

对于所有静态部署,您将仅为带宽收费。您不支付计算资源和存储空间。

Node.js 部署:

如果您的应用程序目录中有一个package.json文件,那么Now.sh会认为有效的Node.js部署。这是一个简单的Node.js部署在微服务的帮助下。

Node.js 应用必须要用以下两个文件才能被 Now.sh 识别。

index.js

示例代码:

1
2
3
module.exports = () => ({
date: new Date
})

package.json

示例代码:

1
2
3
4
5
6
7
8
9
10
{
"name": "get-started-node",
"version": "0.1.0",
"dependencies": {
"micro": "latest"
},
"scripts": {
"start": "micro"
}
}

然后要部署此应用程序,请访问应用程序根目录并运行此命令:

1
➜  yourproject/ now

Docker 部署:

如果您的应用程序目录包含一个Docker文件,那么现在考虑一个有效的Docker部署。它将基于Dockerfile构建一个docker映像,并基于此启动容器。

要部署一个简单的Go HTTP服务器,创建一个目录并添加这两个文件:

hello.go

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main

import (
"io"
"net/http"
)

func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "Hello world!")
})

err := http.ListenAndServe(":8000", nil)
if err != nil {
panic(err)
}
}

Dockerfile

示例代码:

1
2
3
4
5
FROM golang:alpine
ADD . /go/src/zeit/hello
RUN go install zeit/hello
CMD ["/go/bin/hello"]
EXPOSE 8000

部署总结:

项目在部署完成之后,我们会得到一个链接,可以通过这个链接来访问部署的项目。

1
2
3
4
5
6
7
8
9
10
11
12
➜  Index now
> Deploying ~/WorkDir/Index under usrename
> Warning! Skipping file /Users/Uname/WorkDir/Index/img/background.jpg
(size exceeded 1MB)
> Warning! 1 of the files exceeded the limit for your plan.
> Please run `now upgrade` to upgrade.
> Ready! https://index-xxxxxxxxx.now.sh (copied to clipboard) [2s]
> You (Username) are on the OSS plan. Your code and logs will be made public.
> NOTE: You can use `now --public` to skip this prompt
> Synced 3 files (877.42KB) [41s]
> Initializing…
> Deployment complete!

每次更新部署后, url 都会生成一个新的,但是老的 url 都还是可以用的。如果最终网站要产品化,可以很容易的绑定自己的域名。

Reference: https://zeit.co/docs/getting-started/deployment

Now.sh - 域名:

当我们部署完应用程序的时,Now.sh 会为我们生成一个唯一部署URL,如果我们修改项目后进行多次部署,Now.sh 会生成多个 URL 为我们的项目,使用这些特定的 URL 可以访问不同版本的应用,但是这些URL 不容易记住,每次部署新版本都会更新地址,因此我们需要一个固定的域名。我们将使用now alias命令将域名映射到应用的其中一个部署URL。

需要说明的是,自定义域仅适用于付费计划。如果您要为自己的应用使用自定义域,则需要升级您的帐户。具体价格请参考:https://zeit.co/pricing

使用now alias命令的四种不同的方法是:

  • 使用now.sh提供的域名
  • 使用now.sh管理的自定义域名
  • 使用自定义域,由now管理的DNS
  • 使用带有CNAME的自定义域名

使用now.sh提供的域名

这种方法是使用域名的最简单方法。要立即使用now.sh 后缀获取域名,只需运行以下命令即可,示例代码 :

1
$ now alias https://my-web-app-avvuiuuwto.now.sh my-web-app

现在可以使用https://my-web-app.now.sh来访问部署的项目。

###使用now.sh管理的自定义域

如果您想为自己的应用使用自定义域,最简单的方法是使用now为您的应用购买域名。 只需运行以下alias命令,示例代码:

1
$ now alias https://my-web-app-avvuiuuwto.now.sh my-web-app.com

在这里,我们正在尝试将my-web-app.com域名分配给上述部署URL。如果域名可用,您可以在不离开终端的情况下确认并购买。

确认后,现在将处理您的所有技术细节,并允许您的用户使用https://my-web-app.com访问您的应用程序。

在这个过程中,now.sh将为我们的域名设置一个域加密SSL证书。

使用自定义域,由Now管理的DNS

如果您已经有域名,这是您最好的选择。使用此方法,现在将处理您的域名的所有DNS管理。

首先,您需要将域名的域名服务器指向我们的全球DNS服务。这是怎么做到的:

  • 访问您的域名提供商,并找到可以添加自定义nameserver的地方。
  • 从此列表中选择两个或多个nameservers。
  • 将now.sh 提供的nameserver设置为您的自定义域名的nameserver。

这里呢需要将我们购买的域名的解析权交给 now 来做,本网站域名再 godaddy购买,然后将其解析权交给 Dnspod ,使用管理起来更方便,跟 now.sh 原理一致。

例如,假设您的域名是my-custom-domain.com,设置name后,只需运行以下alias命令:

1
$ now alias https://my-web-app-avvuiuuwto.now.sh my-custom-domain.com

然后,您可以使用https://my-custom-domain.com访问您的应用程序。 您也可以使用my-custom-domain.com的子域,如下所示:

1
$ now alias https://my-web-app-avvuiuuwto.now.sh ui.my-custom-domain.com

在这个过程中,now.sh将为我们的域名设置一个域加密SSL证书。

Reference:Godaddy注册的域名如何使用DNSPod?

Reference:now.sh 提供的 Nameservers

使用带有CNAME的自定义域名

如果您正在管理您的域名的DNS设置,您可以使用此选项。 例如,假设您有一个名为my-app.work的域名,并且您已经有一个DNS设置。要映射应用程序的一个部署URL的 ui.my-app.work 域名,请访问您的DNS提供程序,并为ui.my-app.work添加指向alias.zeit.co的CNAME记录。之后,运行以下命令:

1
$ now alias https://my-web-app-avvuiuuwto.now.sh ui.my-app.work

现在您可以使用https://ui.my-app.work访问您的应用程序。

Reference:https://zeit.co/docs/getting-started/assign-a-domain-name

Now.sh - 日志:

日志很重要,因为它可以让您看到应用程序中发生的情况,尤其是在发生异常时。now可以保存所有部署的日志,并允许您搜索它们,让我们来看看如何访问日志:

通过CLI:

通过现在的CLI访问日志很简单,调用这个命令:

1
$ now logs [deployment-url]

您还可以使用应用的域名来搜索日志:

1
$ now logs my-web-app.com

有关now日志的更多信息,请运行help命令:

1
$ now logs --help

这是一个预先查看 now的日志命令,让您检查最后10个HTTP GET请求:

1
$ now logs -a -q "GET" -n 10 my-web-app.com

通过Dashboard:

您还可以通过您的Web信息板访问和搜索日志,网址为https://zeit.co/dashboard。 单击信息中心内的任何部署URL,然后开始搜索日志。

Reference:https://zeit.co/docs/getting-started/logs

Now.sh - 注意事项:

使用 Now.sh来部署应用的优势:

  • 自带的 https
  • 真正的一键部署,不用自己管理服务器,将 severless 进行到底
  • 不翻墙,访问速度很棒

其他注意事项:

  • 为了节省资源,应用一段时间不用就会被 frozen (冻结),但是只要我们去敲链接去访问,就会自动 unfrozen ,只不过初次访问速度会受影响。
  • 在 Now.sh提供的免费服务中,您的代码将是公开的和开源的,如果介意可升级账户或放弃使用。

参考资料: