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