起因

最近在研究Node.js,这个东西十分强大,打算自己琢磨琢磨后端,于是就试着随便写个接口玩玩。不过既然要学习,不部署到公网玩咋行

网上查了下资料,最后总结出三种方案:

  1. 服务器/VPS部署

    鉴于我自己的服务器资源有限,而且还挂着网站和代理,再运行个Nodejs实在吃力,干脆放弃了这个想法。

  2. 云函数部署

    云函数的话目前只能选国内的,按量计费环境怎么想心里都不太安稳,而且云函数的Nodejs还要用专门的一套接口,麻烦。

  3. Heroku部署

    Heroku是国外的一家应用平台,支持PHP,Ruby,Nodejs等多种环境,而且有免费套餐,不用担心扣费,于是就决定是它了。

使用Heroku Toolbelt

Heroku Toolbelt是Heroku的一个本地命令行工具,使用该工具可以将本地的项目部署到Heroku

下载并安装完成后,在 shell 中输入heroku login,用创建heroku账号的email密码登陆

1
2
3
4
5
$ heroku login
Enter your Heroku credentials.
Email: adam@example.com
Password (typing will be hidden):
Authentication successful.

配置Heroku程序

我们本地运行Node程序时一般都是自己指定的端口,而Heroku的web服务端口需要再运行进程的环境变量中获取。

修改Server监听逻辑:

1
2
3
4
5
6
var port = process.env.PORT || 8081

const server = app.listen(port,() => {
const port = server.address().port
console.log(`Server is running at http://localhost:${port}/`)
})

另外,Heroku有一个叫Procfile的启动配置:

Heroku 需要知道使用哪个命令启动程序。命令在一个名为Procfile(没有后缀)的特殊文件中指定。这个文件必须放在程序的顶级文件夹中。

在程序根目录创建Procfile文件,在里面输入:

1
web: node app.js

这里的web是任务的名称,而web这个名称在启动web程序时名称是被指定的。

部署到Heroku

首先我们在本地要有一个git仓库:

1
2
3
git init
git add .
git commit -m "Inital Commit"

然后用Heroku的命令行工具创建app并部署:

1
2
heroku create my-nodejs-app
git push heroku master

此时Heroku1便会将仓库上传到云端安装依赖并运行。

使用CloudFlare加速

不得不说Heroku的美国服务器在中国访问是真的慢…于是套了一个CloudFlare的CDN,勉强能用。

CloudFlare自选节点部署请参考文章:CloudFlare 自选节点教程,我用的Partener是笨牛

Demo

下面的图片就是直接调用此随机壁纸接口,每次刷新本页面图片都会改变。

部署好的API地址:https://api.revincx.icu ,私人站点,请勿滥用。