在Meteor開發(fā)者群里發(fā)現(xiàn)很多人在問如何部署Meteor項目,我自己也在部署Meteor項目時遇到了很多問題,所以在這整理一下Meteor部署的方法,雖然主要是針對CentOS系統(tǒng),但里面涉及的一些問題和解決方法也適合于其他平臺。
文章分為兩部分,一部分說明部署的流程,二部分是介紹一個工具,一鍵部署。
第一部分,Meteor項目部署的步驟和坑點
首先說一下Meteor項目部署的步驟流程和一些細節(jié)點,這部分內(nèi)容適合在任何平臺上部署的情況。
1,項目打包
meteor build ../production --architecture os.linux.x86_64
這里 --architecture 參數(shù)非常重要,這個是指定你部署服務(wù)器的運行環(huán)境,打包的過程會根據(jù)這個環(huán)境來編碼和打包源代碼。
../production 代表打包好的包文件在../production 這個目錄里,這個地址你可以任意指定。
2,將發(fā)布包上傳到服務(wù)器
cd ../production
scp ?my-project.tar.gz ?root@192.168.0.100:/opt/www/
上傳到服務(wù)器可以用任何合適的方法,我為了演示簡便就使用scp的方式。
3,解壓發(fā)布包
ssh root@192.168.0.100
cd /opt/www/
tar zxvf my-project.tar.gz
注意:這部分內(nèi)容是在服務(wù)器上操作的
找到這個發(fā)布包,解壓發(fā)布包
4,配置安裝項目所需要的插件包
cd bundle/programs/server
npm install
my-project.tar.gz文件會解壓出一個bundle目錄,而bundle/programs/server目錄就是項目server代碼所在的目錄。
所以進入這個目錄,運行npm install,npm會自動安裝所需的插件、組件。
5,運行meteor
cd ../../
node main.js
或者
export ROOT_URL=http://www.xxx.com?
node main.js
雖然服務(wù)器代碼在 bundle/programs/server 目錄里,但入口文件在 bundle 目錄下,所以退出來到 bundle,然后運行node main.js 啟動服務(wù)。
在啟動之前可以通過 export ROOT_URL=http://www.xxx.com 方式設(shè)置一些環(huán)境變量來配置meteor項目的運行。
6,服務(wù)器環(huán)境搭建和配置
如果在第五步發(fā)現(xiàn)你無法運行或者報錯了,有可能是你沒有安裝nodejs,也有可能是你的nodejs版本不對。
meteor 1.3.2 所需要的 nodejs 版本是0.10.43,過高的nodejs版本也會導(dǎo)致meteor項目部署運行報錯。
在這說一下nodejs的版本號的問題,不要看0.10.43版本號好像很小,懷疑它不是穩(wěn)定的版本,之所以nodejs現(xiàn)在最大的版本號會有6.2.0這種很大的編號,是因為之前nodejs的開發(fā)團隊分裂過,現(xiàn)在有合并在一起了,所以導(dǎo)致版本號比較混亂。6.2.0如果以之前的版本號演進的話大概也就是0.16.0。
不管你是否安裝過nodejs或者版本不對,都先安裝nvm,鑒于nodejs這么混亂的版本號所以需要一個nvm這樣的工具來管理不同的nodejs版本。
安裝nvm
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash
安裝和使用 nodejs 0.10.43
nvm install 0.10.43
nvm use 0.10.43
通過這一系列的操作,你基本部署完成你的項目了,但每次開發(fā)一個新版本就要這樣部署一下有些麻煩,所以就有人寫了一些部署meteor項目的工具。
第二部分,一鍵部署工具介紹和使用
其中官方推薦的是mup,mup是將meteor項目部署到服務(wù)器主機上。mup還有一個版本mupx,可以將meteor項目部署到docker容器上。
但mup和mupx都只支持ubuntu/debian架構(gòu)的服務(wù)器,而且在國內(nèi)的網(wǎng)絡(luò)環(huán)境下運行非常慢,因為它們都沒有針對國內(nèi)的網(wǎng)絡(luò)環(huán)境優(yōu)化npm pacakge服務(wù)器。
所以我在mupx的基礎(chǔ)將服務(wù)器代碼移植到CentOS平臺上,項目地址在這?mup for centos,如果需要在CentOS上部署,可以到這里去下載使用。github的項目首頁有詳細的使用說明。在這里我簡單的講一下如何使用mup for centos一鍵部署Meteor項目到服務(wù)器。
1,下載、安裝mup for centos
cd /usr/local
git clone https://github.com/romejiang/mupx.git
ln -s mupx/bin/mup bin/mup
mup
進入/usr/local/目錄,一般的第三方工具都安裝在這。
git下載工具源碼,ln連接mup命令
然后執(zhí)行 mup 命令,如果有顯示幫助信息就說明安裝完成了。
2,建立項目部署目錄
cd ~/projects/myproject
mkdir .deploy
cd .deploy
mup init
進入你的meteor項目所在的目錄,建立一個隱藏目錄 .deploy,并進入目錄,在目錄里初始化部署腳本。
3,編輯部署腳本 mup.json
{
? "servers": [
? {
? "host": "jcw", // 部署服務(wù)器的地址 ip 或者 域名
"username": "root", ?// 服務(wù)器用戶名
// "password": "password", // 服務(wù)器密碼
"pem": "~/.ssh/id_rsa", // 可以用ssh驗證,就不需要配置密碼了
"env": {} // 服務(wù)器需要的環(huán)境變量
}
],
"appName": "zhiq", // 項目的名稱,這個很重要,如果是多個項目部署到一個服務(wù)器上,這個名字不能重復(fù),否則會覆蓋其他項目
"app": "/Users/rome/Projects/meteor/zhiq", // meteor項目在你本地的目錄地址
"env": {
"PORT": 8181, // 端口,多個項目部署到同一個服務(wù)器,也需要修改為不同的端口
"ROOT_URL": "http://app.yijianapp.com/test" // 項目真實的訪問地址
},
"dockerImage": "romejiang/meteor:v53" // 使用的 Docker 鏡像
}
部署腳本里有很多參數(shù),但上面這幾個是你會用到的,其他的參數(shù)可以不用動,默認(rèn)值就好。
4,初始化服務(wù)器環(huán)境
mup setup
mup會根據(jù)需要對服務(wù)器的配置部署環(huán)境,會自動安裝docker,mongodb,更新一些包。
5,部署項目
mup deploy
部署項目,項目會部署到服務(wù)器的/opt/目錄下。
6,再次部署
mup deploy
一次每次更新了代碼再次部署是只需要運行 , mup deploy 即可。