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中,完成連接
參考來源
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/