在把我們的博客部署到 Heroku 之前,我們首先學(xué)習(xí)下如何使用 MongoHQ 。MongoHQ 是一個提供 MongoDB 存儲服務(wù)的云平臺,使用起來非常簡單,提供了在線查詢和修改數(shù)據(jù)庫的功能。MongoHQ 的免費套餐提供了 512MB 的存儲空間。
https://bridge.mongohq.com/signup
注冊后,選擇一個 Free 的數(shù)據(jù)庫類型,并給數(shù)據(jù)庫起一個名字,點擊 Create Database 創(chuàng)建數(shù)據(jù)庫。此時跳轉(zhuǎn)到如下界面:
http://wiki.jikexueyuan.com/project/express-mongodb-setup-blog/images/8.1.jpg" alt="" />
如圖所示,我們可以在命令行中連接遠程數(shù)據(jù)庫,也可以通過 Mongo URL 使用數(shù)據(jù)庫。接下來,我們修改博客的代碼,使用 MongoHQ 提供的云端數(shù)據(jù)庫取代使用本地數(shù)據(jù)庫。
首先,我們需要給數(shù)據(jù)庫添加一個用戶。點擊左側(cè)的 Admin ,然后點擊 Users 進入用戶管理頁面。在 username 和 password 處分別填寫用戶名和密碼:
db.addUser('username','password')
點擊 Add user 添加用戶。
修改 settings.js 為:
module.exports = {
cookieSecret: 'myblog',
url: 'your_Mongo_URI'
};
將 your_Mongo_URI 替換為你自己創(chuàng)建的數(shù)據(jù)庫的 URL ,將
打開 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 ,均作以下修改:
注意:Heroku 也提供了 MongoHQ 的 Add-ons ,但需要填寫信用卡信息,所以我們這里直接使用外鏈的 MongoHQ 。
Heroku 是一個主流的 PaaS 提供商,在開發(fā)人員中廣受歡迎。這個服務(wù)圍繞著基于 Git 的工作流設(shè)計,假如你熟悉 Git ,那部署就十分簡單。這個服務(wù)原本是為托管 Ruby 應(yīng)用程序而設(shè)計的,但 Heroku 之后加入了對 Node.js 、Clojure 、Scala 、Python 和 Java 等語言的支持。Heroku 的基礎(chǔ)服務(wù)是免費的。
下面我們使用 Heroku 部署我們的博客。
注冊成功后,就進入了控制面板頁面,如圖所示:
http://wiki.jikexueyuan.com/project/express-mongodb-setup-blog/images/8.2.jpg" alt="" />
點擊 Create a new app ,填寫?yīng)氁粺o二的應(yīng)用名稱后,點擊 creat app 即創(chuàng)建成功,然后點擊 Finish up 。
此時跳轉(zhuǎn)到控制面板頁,并且可以看到我們創(chuàng)建的應(yīng)用了。我們通過 應(yīng)用名稱.herokuapp.com 即可訪問我們的應(yīng)用主頁。如圖所示:
http://wiki.jikexueyuan.com/project/express-mongodb-setup-blog/images/8.3.jpg" alt="" />
Heroku 官方提供了 Heroku Toolbelt 工具更方便地部署和管理應(yīng)用。它包含三個部分:
注意:假如你的電腦上已經(jīng)安裝了 Git ,那么在安裝的時候選擇 Custom Installation 并去掉安裝 Git 的選項,否則選擇 Full Installation 。
安裝成功后,打開 Git Bash ,輸入 heroku login ,然后輸入在 Heroku 注冊的帳號和密碼進行登錄。Git 會檢測是否有 SSH 密鑰,如果有,則使用此密鑰并上傳,如果沒有,則創(chuàng)建一個密鑰并上傳。
Tips:SSH 密鑰通常用于授予用戶訪問服務(wù)器的權(quán)限。可將它們用于某些配置中,以便無需密碼即可訪問服務(wù)器。許多 PaaS 提供商都使用了此功能。
在工程的根目錄下新建一個 Procfile 文件,添加如下內(nèi)容:
web: node app.js
Procfile 文件告訴了服務(wù)器該使用什么命令啟動一個 web 服務(wù),這里我們通過 node app.js 執(zhí)行 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 修改為你自己的應(yīng)用名。
在 push 到 heroku 服務(wù)器之前,我們還需要做一個工作。由于我國某些政策的原因,我們需到 ~/.ssh/ 目錄下,新建一個 config 文件,內(nèi)容如下:
Host heroku.com
User yourName
Hostname 107.21.95.3
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
port 22
然后回到 Git Bash ,輸入:
$ git push heroku master
稍等片刻即上傳成功?,F(xiàn)在你就可以訪問 http://yourAppName.herokuapp.com/ 了,如圖所示:
http://wiki.jikexueyuan.com/project/express-mongodb-setup-blog/images/8.4.jpg" alt="" />
注意:假如出現(xiàn)了 Application Error,可能是沒有啟動應(yīng)用,到應(yīng)用面板頁勾選 web node app.js ,然后點擊 Apply Changes 啟動應(yīng)用。