如何使用 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
安装过程就不一一赘述了,因为我也没安装过。我觉得使用homebrew
或npm
之类的工具安装使用会更方便一些。
基于 npm 进行安装:
示例代码:
➜ 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 注册一个账户,只需要输入你的邮箱就好了,然后在本地进行认证,认证过程中需要输入你注册时所用的邮箱,然后打开邮箱点击链接进行认证。
示例代码:
➜ ~ 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"
邮件内容:
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 上,需要部署请访问应用程序目录并运行此命令:
➜ 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
示例代码:
module.exports = () => ({
date: new Date
})
package.json
示例代码:
{
"name": "get-started-node",
"version": "0.1.0",
"dependencies": {
"micro": "latest"
},
"scripts": {
"start": "micro"
}
}
然后要部署此应用程序,请访问应用程序根目录并运行此命令:
➜ yourproject/ now
Docker 部署:
如果您的应用程序目录包含一个Docker文件,那么现在考虑一个有效的Docker部署。它将基于Dockerfile构建一个docker映像,并基于此启动容器。
要部署一个简单的Go HTTP服务器,创建一个目录并添加这两个文件:
hello.go
示例代码:
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
示例代码:
FROM golang:alpine
ADD ../../.. /go/src/zeit/hello
RUN go install zeit/hello
CMD ["/go/bin/hello"]
EXPOSE 8000
部署总结:
项目在部署完成之后,我们会得到一个链接,可以通过这个链接来访问部署的项目。
➜ 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 后缀获取域名,只需运行以下命令即可,示例代码 :
$ now alias https://my-web-app-avvuiuuwto.now.sh my-web-app
现在可以使用https://my-web-app.now.sh来访问部署的项目。
###使用now.sh管理的自定义域
如果您想为自己的应用使用自定义域,最简单的方法是使用now
为您的应用购买域名。 只需运行以下alias命令,示例代码:
$ 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命令:
$ now alias https://my-web-app-avvuiuuwto.now.sh my-custom-domain.com
然后,您可以使用https://my-custom-domain.com访问您的应用程序。 您也可以使用my-custom-domain.com的子域,如下所示:
$ 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记录。之后,运行以下命令:
$ 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访问日志很简单,调用这个命令:
$ now logs [deployment-url]
您还可以使用应用的域名来搜索日志:
$ now logs my-web-app.com
有关now
日志的更多信息,请运行help命令:
$ now logs --help
这是一个预先查看 now的日志命令,让您检查最后10个HTTP GET请求:
$ 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提供的免费服务中,您的代码将是公开的和开源的,如果介意可升级账户或放弃使用。