Tut - Deploy web Nodejs dùng MongoDb với host Openshift

January 18, 2015

Tháng trước để thỏa mãn giáo viên lý thuyết mình phải vật vã cả ngày để up một trang web dùng Nodejs và MongoDb lên Openshift. Nay có lòng tốt muốn giúp các bạn tiết kiệm được một ngày nên sẽ làm tut hướng dẫn chi tiết cách làm thế nào (và cũng để chính mình nhớ luôn). Ai làm theo mà không được dám chừng ăn ở đừng trách mình nhé :3.

Tut gồm có 3 phần chính:

Các bạn cần gì thì xem đó không cần phải step-by-step

I. Phần cài đặt

Để up được host Openshift cơ bản chúng ta bắt buộc có các thứ sau đây:

Chú ý: đối với các bạn ở Việt Nam khi làm 3 bước sau đây thường sẽ bị dính lỗi do setting mặc định trong máy Windows, mình không nhớ rỏ bước nào(làm cả tháng rồi :v). Nên để tránh ức chế đầu tiên các bạn vào Controll Panel -> Region -> Administrative -> Change system locate… và chọn English(United States), sau đó reset máy(nếu nó yêu cầu)

Hình 1

Hình 2

Giải thích thêm: do client tools của Openshift(và đa số các cloud khác Heroku chẳng hạn) không có hỗ trợ Unicode nên đối với các máy ở Việt Nam dùng Unicode thì chắc chắn bị lỗi không thể cài được(nôm na là thế tại mình cũng không hiểu rỏ :v)

Giờ mình vào phần chính:

C:\> gem install rhc

Đến đây, nếu tất cả thành công chúng ta đã hoàn thành phần cài đặt.

II. Phần tạo app trên cloud

Phần này có 2 cách làm một là tạo bằng command line hai là tạo trực tiếp trên web của Openshift, mình không biết dùng command line(gà ><) nên sẽ hướng dẫn tạo trực tiếp. Bước này thực chất rất đơn giản các bạn hoàn toàn có thể tự làm(mình mò đại cũng ra không cần phải xem theo tut :D)

Để tạo cơ sở dữ liệu MongoDb cho trang web các bạn chỉ cần chọn như hình sau đó next next là được.
Hình 8

III. Phần cấu hình và deploy

Cấu hình

Để web của bạn chạy được trên Openshift, có 3 thứ cần phải sửa trong code: package.json, connection string to databse, server ip và port

1
2
3
4
5
6
...
"scripts": {
    "start": "node app.js"		//app.js là file chạy server của bạn
},
"main": "app.js",
...

Việc làm này mục đích là để Openshift biết đâu là file server của bạn để khởi chạy đầu tiên và build web của bạn trên cloud

1
2
3
4
5
6
7
8
...
var mongodb_connection_string = 'mongodb://127.0.0.1:27017/' + 'YourWebName';		//nếu chạy local
//take advantage of openshift env vars when available:
if(process.env.OPENSHIFT_MONGODB_DB_URL){
  mongodb_connection_string = process.env.OPENSHIFT_MONGODB_DB_URL + 'YourWebName';	//nếu chạy trên cloud
}
mongoose.connect(mongodb_connection_string);
...

Đối với các module khác(mongojs, mongod) thì sẽ khác tí chút vì có thể không dùng connection string, mà truyền các tham số như Ip, port, trường hợp đó thì các bạn cứ truyền thẳng các tham số vào nhé.

1
2
3
4
5
...
var server_port = process.env.OPENSHIFT_NODEJS_PORT || 8080;
var server_ip_address = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1';
...
app.listen(server_port, server_ip_address);		//start Express server

Deploy

C:\> git clone SOURCECODE
git add .
git commit -m "whatever"
git push

Mỗi lần bạn cần thay đổi về source code của trang web chỉ cần sửa code ở local, sau đó dùng các lệnh trên đây để push lên server.

Vậy là đã xong web của bạn giờ đã được chạy trên cloud Openshift.

Log in and enjoy it.


Tham khảo