Digitalocean Ubuntu 16.10 Node.js Express ejs 環境建置

情境描述

在Digitalocean上開一台新的主機,安裝Node.js之後,在其上建置使用EJS的Express程式框架。

解題過程

(Digitalocean) 進入Digitalocean,選擇OS版本。

選擇規格

選擇地區

然後把相關開發人員的SSH Key加入主機

(SSH主機) 使用root帳號SSH連進開好的主機

建立webmaster帳號

$ adduser webmaster

輸入相關密碼,通常為it

其他設定基本略過

將Digitalocean產生給root的.ssh資料夾複製進webmaster底下

$ cp -R /root/.ssh /home/webmaster

進入/home/webmaster,將.ssh的權限改成webmaster

$ cd /home/webmaster
$ chown webmaster:webmaster .ssh

再來將webmaster賦予root權限

$ cd ~
$ visudo

找到使用這權限編輯區

將以下程式碼放入後,儲存離開

webmaster    ALL=(ALL)    ALL

重新使用webmaster進入主機,測試是否可以轉換成root

$ sudo -s

輸入密碼後換看到帳號切換成以下結果

root@<電腦名>:/#

回到webmaster

exit

安裝Node.js

$ apt-get update
$ apt-get install nodejs

安裝使用npm時可能會使用到的基礎套件

$ apt-get install build-essential

回到根目錄,製作hello.js測試Node.js是否有正確安裝

$ cd ~
$ nano hello.js
#!/usr/bin/env nodejs
var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(8080, 'localhost');
console.log('Server running at http://localhost:8080/');

讓hello.js可以被執行

$ chmod +x ./hello.js

接著執行測試

$ ./hello.js

會看到以下結果

Server running at http://localhost:8080/

打開另一個SSH視窗連進主機,並呼叫localhost測試

$ curl http://localhost:8080

會看到以下結果

Hello World

不知是否因我在安裝Node.js時未更新apt,安裝的Node.js版本為4.2.6並沒有包含npm,須從apt另外安裝

$ apt-get npm

接著使用npm安裝pm2讓伺服器可以背景執行Node.js執行緒

$ npm install -g pm2

由於Node.js的模組會需要使用symlink來正確的執行與編譯

$ apt-get install nodejs-legacy

接下來可以使用pm2執行hello.js

pm2 start hello.js

正確執行會看到以下結果

[PM2] Spawning PM2 daemon
[PM2] PM2 Successfully daemonized
[PM2] Starting hello.js in fork_mode (1 instance)
[PM2] Done.
┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────────────┬──────────┐
│ App name │ id │ mode │ pid  │ status │ restart │ uptime │ memory      │ watching │
├──────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────────────┼──────────┤
│ hello    │ 0  │ fork │ 3524 │ online │ 0       │ 0s     │ 21.566 MB   │ disabled │
└──────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────────────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an appy

由於在背景執行,故現在可以直接呼叫localhost察看結果

$ curl http://localhost:8080

下一步就可以來安裝express,這裡使用express產生器

$ npm install express-generator -g

安裝完成之後,使用產生器產出以ejs為引擎的完整框架

$ express --view=ejs <專案名>

完成之後進入專案資料夾,讓npm安裝產生專案的需要組件

$ cd <專案名>
$ npm install

接下來可以讓pm2執行express,express執行檔案在bin資料夾裡面的www

$ pm2 start ./bin/www

從瀏覽器連進主機測試,pm2運行時使用的是port 3000

http://<主機ip>:3000/

最後要將整個專案上git,傳送到遠端倉庫

$ git init

新增gitignore檔

$ nano .gitignore

設定主機的git 帳號為it

$ git config --global user.email "[email protected]"
$ git config --global user.name "itnccu"

檢查現在git 檔案狀態

$ git status

將所有檔案放上舞台

$ git add .

確認所有檔案放上舞台

$ git status

確定所有檔案變動下commit

$ git commit -m "initial commit"

(bitbucket) 進入bitbucket,在公司的團隊底下開一個新<專案名>的repository

在專案Overview右上角,連接方法改成SSH,並複製後方連結

(SSH主機) 回到連接主機的SSH視窗,下git remote連接bitbucket,並貼上剛剛複製連結

$ git remote add origin [email protected]:itnccu/<專案名>.git

由於使用SSH存取bitbucket,故需要將主機的Key放進bitbucket帳號,才能推送或拉收遠端倉庫的專案

回到家目錄產生主機的SSH Key

$ cd ~
$ ssh-keygen

進到.ssh把公鑰展開來看

$ cd .ssh
$ cat id_rsa.pub

(bitbucket) 將展開來的整段公鑰複製,在bitbucket使用者的bitbucket設定中,SSH Keys裡面新增一把主機公鑰

(SSH主機) 最後把專案推送到bitbucket上

$ git push -u origin master

可以下pull看看有沒有權限可以拉收專案下來

$ git pull

可以看到以下結果

Already up-to-date.

最後的最後

(slack) 在slack上建立新的專案頻道

在頻道設定中點選加入新的連結(Add an app or integration)

被導進slack的bitbucket設定頁面,新增一條新的設定,選擇新開的頻道

將頻道的Webhook URL複製

(bitbucket) 貼到bitbucket專案設定的webhook中,完成連接

參考來源

https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-16-04

https://www.digitalocean.com/community/tutorials/how-to-install-express-a-node-js-framework-and-set-up-socket-io-on-a-vps

http://expressjs.com/zh-tw/starter/generator.html

http://dreamerslab.com/blog/tw/how-to-setup-a-node-js-development-environment-on-ubuntu-11-04/

results matching ""

    No results matching ""