用 Shipit 部署 node server

  1. 1. 前置作業
  2. 2. 在開發機安裝相關套件
  3. 3. ShipIt!
  4. 4. 額外命令
  5. 5. 基本設定的樣子
  6. 6. 參考來源

前置作業

假設是全新的 Linux,帳號為 deploy

  1. 在 github 等託管服務中登錄 deploy server 的 ssh public key。
  2. 設定 ssh 免密碼遠端登入:在 .ssh/authorized_keys 裡貼上開發機的 ssh public key。
  3. 如有需要,將 server 裡的 global package 裝好,如 bower、sails、grunt-cli 等等。
  4. 設定 server 裡程式碼的存放位置,假設為 /usr/src
1
2
mkdir -p /usr/src/my-project-name
chown deploy:deploy /usr/src/my-project-name

在開發機安裝相關套件

1
2
sudo npm i shipit-cli -g
npm i shipit-deploy shipit-npm --save-dev

ShipIt!

在專案資料夾目錄產生 shipitfile.js

內容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
module.exports = function (shipit) {
require('shipit-deploy')(shipit); // remote deploy
require('shipit-npm')(shipit); // remote auto install npm packages

var config = {
default: {
workspace: '/tmp/project-name-in-deploy-server',
deployTo: '/usr/src/project-name-in-deploy-server',
repositoryUrl: 'your git remote url (github, bitbucket, etc...)',
ignores: ['.git', 'node_modules'],
keepReleases: 2,
},
staging: {
servers: '[email protected]'
}
};

shipit.initConfig(config);
};

輸入 shipit staging deploy 開始部署

額外命令

1
2
3
4
5
6
7
8
9
10
11
12
shipit.initConfig(config);
// code 加在這行之後

var current = config.default.deployTo + '/current';
// shipit 會將 source code 放在 deploy server 專案資料夾裡的 current 中
shipit.task('server-on', function() {
return shipit.remote('cd ' + current + ' && bower i && npm start');
});

shipit.task('start', function() {
shipit.start(['deploy', 'server-on']);
});

執行 shipit staging start

基本設定的樣子

參考來源