文档章节

部署到 Heroku

maweitao
 maweitao
发布于 2014/06/11 21:39
字数 1217
阅读 6695
收藏 10

使用 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
粉丝 11
博文 27
码字总数 26297
作品 0
武汉
【翻译】Flask大型教程|第十八章:Heroku上的部署

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

一进制
04/04
0
0
使用heroku部署node.js应用

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

Haffe
2013/11/30
0
7
Heroku 快速搭建 免费高性能 Jupyter Notebook

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

AvatarBB
05/17
0
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
0
Moving to Docker(一)

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

DockOne
2015/01/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot 使用parent方式引用时 获取值属性方式默认@

采用官网提供的 引入依赖时,application.properties中的值变量,无法通过${}获取,这是由于Spring Boot 已经将字符方式调整为 <resource.delimiter>@</resource.delimiter>。故如果在,工程中...

翱翔fly
14分钟前
1
0
HTTPS证书验证流程及SSL证书生成步骤【附nginx开启https配置】

------------------------------------------------------------ HTTPS证书验证流程(极简化版) 1.客户端向服务端请求证书(server.crt) 2.服务端下发证书(server.crt) 3.客户端用预制的...

xiaomin0322
15分钟前
1
0
预编译sql语句和参数化sql能有效防止——sql注入攻击——

预编译和参数化处理sql原理类似: 参数化处理sql 是将参数进行了字符串化处理,把参数中的单引号,井号#,等都做了转义处理,进而在执行sql语句时不会被当做sql中的定界符和指定符来执行。 ...

fang_faye
16分钟前
1
0
springboot最全配置解释

​​​​​​​# ----------------------------------------# 核心属性# ----------------------------------------# 文件编码banner.charset= UTF-8# 文件位置banner.locati...

废柴大叔
17分钟前
57
1
(大致了解下)从单机到2000万QPS: 知乎Redis平台发展与演进之路

导读:知乎存储平台团队基于开源Redis 组件打造的知乎 Redis 平台,经过不断的研发迭代,目前已经形成了一整套完整自动化运维服务体系,提供很多强大的功能。本文作者是是该系统的负责人,文...

Ocean_K
25分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部