文档章节

部署到 Heroku

maweitao
 maweitao
发布于 2014/06/11 21:39
字数 1217
阅读 6631
收藏 10
点赞 0
评论 0

使用 MongoHQ

在把我们的博客部署到 Heroku 之前,我们首先学习下如何使用 MongoHQ 。MongoHQ 是一个提供 MongoDB 存储服务的云平台,使用起来非常简单,提供了在线查询和修改数据库的功能。MongoHQ 的免费套餐提供了 512MB 的存储空间。

注册

https://bridge.mongohq.com/signup

创建一个数据库

注册后,选择一个 Free 的数据库类型,并给数据库起一个名字,点击 Create Database 创建数据库。此时跳转到如下界面:

如图所示,我们可以在命令行中连接远程数据库,也可以通过 Mongo URL 使用数据库。接下来,我们修改博客的代码,使用 MongoHQ 提供的云端数据库取代使用本地数据库。

首先,我们需要给数据库添加一个用户。点击左侧的 Admin ,然后点击 Users 进入用户管理页面。在 username 和 password 处分别填写用户名和密码:

db.addUser('username','password')

点击 Add user 添加用户。

修改 settings.js 为:

module.exports = { 
  cookieSecret: 'myblog', 
  url: 'your_Mongo_URI'
};

将 your_Mongo_URI 替换为你自己创建的数据库的 URL ,将 <user>  <password> 分别替换为刚才添加的用户的名字和密码。

打开 app.js ,将 app.use(express.session(...)); 修改为:

app.use(express.session({
  secret: settings.cookieSecret,
  cookie: {maxAge: 1000 * 60 * 60 * 24 * 30},//30 days
  url: settings.url
}));

删除 db.js ,打开 post.js 、 user.js 和 comment.js ,均作以下修改:

  •  mongodb = require('./db') 修改为 mongodb = require('mongodb').Db
  • 添加 var settings = require('../settings');
  • 将所有 mongodb.open(function (err, db) { 修改为 mongodb.connect(settings.url, function (err, db) {
  • 将所有 mongodb.close(); 修改为 db.close();

现在,无需启动你的本地数据库,运行你的博客试试吧~

注意:Heroku 也提供了 MongoHQ 的 Add-ons ,但需要填写信用卡信息,所以我们这里直接使用外链的 MongoHQ 。

部署到 Heroku

Heroku 是一个主流的 PaaS 提供商,在开发人员中广受欢迎。这个服务围绕着基于 Git 的工作流设计,假如你熟悉 Git ,那部署就十分简单。这个服务原本是为托管 Ruby 应用程序而设计的,但 Heroku 之后加入了对 Node.js 、Clojure 、Scala 、Python 和 Java 等语言的支持。Heroku 的基础服务是免费的。

下面我们使用 Heroku 部署我们的博客。

注册

https://www.heroku.com/

创建一个应用

注册成功后,就进入了控制面板页面,如图所示:

点击 Create a new app ,填写独一无二的应用名称后,点击 creat app 即创建成功,然后点击Finish up 

此时跳转到控制面板页,并且可以看到我们创建的应用了。我们通过 应用名称.herokuapp.com即可访问我们的应用主页。如图所示:

安装 Heroku Toolbelt

Heroku 官方提供了 Heroku Toolbelt 工具更方便地部署和管理应用。它包含三个部分:

  • Heroku client :创建和管理 Heroku 应用的命令行工具
  • Foreman :一个在本地运行你的 app 的不错的选择
  • Git :分布式版本控制工具,用来把应用推送到 Heroku

Heroku Toolbelt 下载地址:https://toolbelt.heroku.com/ 

注意:假如你的电脑上已经安装了 Git ,那么在安装的时候选择 Custom Installation 并去掉安装 Git 的选项,否则选择 Full Installation 

安装成功后,打开 Git Bash ,输入 heroku login ,然后输入在 Heroku 注册的帐号和密码进行登录。Git 会检测是否有 SSH 密钥,如果有,则使用此密钥并上传,如果没有,则创建一个密钥并上传。

Tips:SSH 密钥通常用于授予用户访问服务器的权限。可将它们用于某些配置中,以便无需密码即可访问服务器。许多 PaaS 提供商都使用了此功能。

Procfile

在工程的根目录下新建一个 Procfile 文件,添加如下内容:

web: node app.js

Procfile 文件告诉了服务器该使用什么命令启动一个 web 服务,这里我们通过 node app.js 执行 Node 脚本。为什么这里声明了一个 web 类型呢?官方解释为:

The name “web” is important here. It declares that this process type will be attached to the HTTP routing stack of Heroku, and receive web traffic when deployed.

上传应用

打开 Git Bash ,输入:

$ git init
$ git add .
$ git commit -m "init"
$ git remote add heroku git@heroku.com:yourAppName.git

注意:将 yourAppName 修改为你自己的应用名。

在 push 到 heroku 服务器之前,我们还需要做一个工作。由于我国某些政策的原因,我们需到~/.ssh/ 目录下,新建一个 config 文件,内容如下:

Host heroku.com
User yourName
Hostname 107.21.95.3
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
port 22

然后回到 Git Bash ,输入:

$ git push heroku master

稍等片刻即上传成功。现在你就可以访问 http://yourAppName.herokuapp.com/ 了,如图所示:

注意:假如出现了 Application Error,可能是没有启动应用,到应用面板页勾选 web node app.js ,然后点击 Apply Changes 启动应用。

© 著作权归作者所有

共有 人打赏支持
maweitao
粉丝 10
博文 26
码字总数 26297
作品 0
武汉
使用heroku部署node.js应用

Heroku是一个云应用部署平台,你可以在上面部署简单的应用(包括java、ruby、node.js应用等)。 这里只是做一个测试,所以使用了Express框架,你可以按照heroku的参考说明部署自己的应用。 注册...

DMDGeeker ⋅ 2013/11/30 ⋅ 7

【翻译】Flask大型教程|第十八章:Heroku上的部署

本文翻译自The Flask Mega-Tutorial Part XVIII: Deployment on Heroku 这是Flask Mega-Tutorial系列的第十八部分,我将在其中部署Microblog到Heroku云平台。 在前面的文章中,我向你展示了托...

一进制 ⋅ 04/04 ⋅ 0

Heroku 快速搭建 免费高性能 Jupyter Notebook

Heroku 是一个支持多语言的PaaS。简单来说这是一个可以免费快速将自己的应用部署在上面的云平台。Heroku提供Heroku Buttons 来一键部署应用。我们可以使用 heroku-jupyter的脚本自动配置部署...

AvatarBB ⋅ 05/17 ⋅ 0

Moving to Docker(一)

本文迁移至Docker系列的第一篇,这个系列介绍了我所在的公司是怎么把基础设施从PaaS迁移到Docker上的。如果你对基础已经很了解了,可以直接看本文底部的几个技术专题。 上个月,我一直在折腾...

DockOne ⋅ 2015/01/31 ⋅ 0

用Heroku+snova-c4搭梯子上墙

1.snova-c4(翻墙软件)下载 https://code.google.com/p/snova/downloads/list 服务端 https://snova.googlecode.com/files/snova-c4-java-server-0.22.0.war 客户端 https://snova.googleco......

waylau ⋅ 2014/04/03 ⋅ 0

Scala实战-通过微信聊天窗口实现应答式点餐 1:连接微信API

当前代码tag: v0.0.1,https://github.com/yangbajing/wechat-meal/tree/v0.0.1 微信公众号提供了详尽的API文档说明,提供了明文和加密两种接入方式。这里,我们选择加密的接入方式微信公众号...

羊八井 ⋅ 2015/08/18 ⋅ 0

如何在 Heroku 上安装和使用 Snova 代理

Snova 虽然可以直接在 GAE 上运行,但是只有运行在 Cloud Foundry、Heroku、OpenShift 和/或其他 PaaS 平台上才能够正常访问 HTTPS 链接页面。 上一篇文章介绍了 Cloud Foundry,这篇文章将...

银月光海 ⋅ 2014/04/02 ⋅ 0

heroku全体验

环境之建立git库 Win7, heroku客户端 之所以安装heroku客户端, 是为了更好地使用heroku功能. 首先,你使用heroku login,然后输入用户名,密码。如果登录成功,heroku客户端会上传你的公钥。如...

LiangShao ⋅ 2013/06/08 ⋅ 4

Rabel 发布 1.5 版本,庆祝 Ruby 语言 20 周年!

这次发布的 1.5 版本,主要改进如下: (一)使用 Twitter Bootstrap 重构前端框架 基于 Bootstrap 响应式的设计,Rabel 可以轻松支持移动设备访问。 (二)支持部署到云平台(比如 Heroku)...

daqing ⋅ 2013/02/24 ⋅ 2

学习 HeroKu 的架构设计

这几天给我印象比较深的是 HeroKu ,提供 Ruby 快速部署环境并提供托管能力,他们的架构图做得十分漂亮,一幅图胜过千言万语,要是对 Web 架构感兴趣,都别问架构师了,看看 HeroKu 的架构估...

鉴客 ⋅ 2011/11/10 ⋅ 5

没有更多内容

加载失败,请刷新页面

加载更多

下一页

浅谈springboot Web模式下的线程安全问题

我们在@RestController下,一般都是@AutoWired一些Service,由于这些Service都是单例,所以并不存在线程安全问题。 由于Controller本身是单例模式 (非线程安全的), 这意味着每个request过来,...

算法之名 ⋅ 今天 ⋅ 0

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部