使用該方式需要有基本的 Linux 知識
這里介紹的部署方法都是手動氛谜,可以幫助理解 Meteor App 在生產(chǎn)環(huán)境下是如何運行的
本次記錄為全新服務(wù)器安裝流程? 教程來原參見 ?部署 Meteor 應(yīng)用到墻內(nèi)服務(wù)器
國內(nèi)Meteor學(xué)習(xí)的資料和使用的人太少了,有興趣添加一起學(xué)習(xí)
服務(wù)器端操作
使用 Ubuntu 14.04 64bit LTS 版本酝惧,root 用戶就可以了榴鼎。新開一臺 VPS 后使用下面的命令更新一下 Ubuntu 的包列表, 這樣 Ubuntu 知道到哪里去下載最新的軟件包。
服務(wù)器工具安裝
通過Xshell遠(yuǎn)程登陸命令行:
1:apt-get update? ? ? ? //升級包列表
2:apt-get install curl? //安裝 curl
3:apt-get install git? ? //安裝 git
4:aapt-get install vim ?//安裝vim編輯器
安裝 Node.js 4
重點:安裝node.js 4.x 由于meteor 1.4 不支持4.x以上版本晚唇,所以使用4.x版本的node.js
檢查meteor內(nèi)置使用版本巫财,在開發(fā)環(huán)境,即本地電腦使用: meteor node -v 可檢查meteor 使用的版本
4:curl -sL https://deb.nodesource.com/setup_4.x| sudo -E bash - ? //執(zhí)行下面的解決方法后再操作第4步
5:apt-get install -y nodejs
問題來了:這里阿里云使用了自己的源缺亮,安裝了幾個小時仍然是 100% working...研究了半天翁涤,并咨詢官方后,解決方法在這里
我的解決方法如下:
打開服務(wù)器的文件 ?vim /etc/apt/apt.conf
Acquire::http::Proxy "http://mirrors.aliyun.com/"; ?注釋或刪除這句話萌踱,記得操作前備份文件
6:檢查node是否安裝成功? 執(zhí)行 node-v 查看到版本號即為成功安裝
安裝 MongoDB
安裝步驟
(注:可以登陸官網(wǎng)葵礼,按照官網(wǎng)給出的最新方法安裝)?
1、查看當(dāng)前Meteor推薦的mongo版本
meteor運行項目后并鸵,重新打開控制臺鸳粉,在項目下運行meteor mongo,會顯示當(dāng)前使用的mongo版本园担,我這邊現(xiàn)在看到的是3.2版本
2届谈、導(dǎo)入公鑰所使用的包管理系統(tǒng):
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
3、創(chuàng)建list文件
echo"deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse"|sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
4弯汰、重新加載本地包數(shù)據(jù)庫
sudo apt-get update
5艰山、安裝MongoDB?
sudo apt-get install -y mongodb-enterprise
6、啟動MongoDB
sudo service mongod start
數(shù)據(jù)庫位置在:/var/log/mongodb
日志文件在:/var/lib/mongodb
按照前面步驟完成 MongoDB 安裝后運行mongo測試是否安裝成功咏闪。如果遇到下面的錯誤
Failed global initialization: BadValue Invalidorno user locale set. Please ensure LANGand/orLC_* environment variables are set correctly.
需要設(shè)置如下語言環(huán)境
exportLC_ALL=C
然后再使用下面命令修改 mongod 的配置
nano /etc/mongod.conf
找到 "#replication" 的注釋處曙搬,改為如下內(nèi)容
replication:
replSetName:meteor
然后重啟 mongo
service mongod restart
重啟后,運行mongo進入 mongo shell鸽嫂,在 mongo shell 里鍵入
var config = {_id:"meteor",members[{_id:0,host:"127.0.0.1:27017"}]}
rs.initiate(config)
你應(yīng)該會看到返回
{"ok":1}
最后纵装,再次重啟mongo
service mongod restart
要確認(rèn) mongo 是否運行正常,可以進入 mongo shell据某,然后運行rs.status(), 如果正诚鹇Γ可以看到類似如下的返回
{
"set" : "meteor","date" : ISODate("2017-01-16T15:46:09.314Z"),
"myState" : 1,
"term" : NumberLong(1),
"heartbeatIntervalMillis" : NumberLong(2000),
"members" : [
{
"_id" : 0,
"name" : "127.0.0.1:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 177,
"optime" : {
"ts" : Timestamp(1484581483, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2017-01-16T15:44:43Z"),
"infoMessage" : "could not find member to sync from",
"electionTime" : Timestamp(1484581482, 2),
"electionDate" : ISODate("2017-01-16T15:44:42Z"),
"configVersion" : 1,
"self" : true
}],
"ok" : 1
}
數(shù)據(jù)庫安裝完成
安裝 pm2
這里沒有什么特別的,就是跟安裝其他 npm 包類似癣籽。我沒有使用淘寶的 cnpm挽唉,因為我發(fā)現(xiàn)直接使用 npm 也沒有太大問題,就是稍微慢點筷狼,但是還沒有到不可接受的地步橱夭。
npm install pm2 -g
pm2 startup
我后來發(fā)現(xiàn)這也要看機房,有的機房會很慢很慢桑逝,甚至安裝不了棘劣,比如阿里云最便宜的華北1 機房。但是青云的華南機房就沒有問題楞遏,原版的 npm 包安裝起來很快茬暇。
如果你的 npm 安裝有問題,可以使用cnpm寡喝,先安裝淘寶的 cnpm 包
npm install cnpm -g --registry=https://registry.npm.taobao.org
然后通過 cnpm 來安裝 pm2糙俗,安裝方式和 npm 幾乎一樣
cnpm install pm2 -g
pm2 startup
安裝后的使用方式和通過 npm 安裝的一樣。
代碼文件夾
創(chuàng)建存放 Meteor build 打包成 Node.js app 后的源代碼文件夾预鬓,我們后面會用到
mkdir /home/meteor
mkdir /home/meteor/build
到現(xiàn)在服務(wù)器端配置完畢
本地打包 Meteor App
假設(shè)你的 Meteor 源代碼在你的本地開發(fā)電腦上一個叫 meteor-build-test 的文件夾里巧骚,我們在它的同級目錄建立一個叫 build 的文件夾。然后運行
cd meteor-build-test
meteor build --architecture=os.linux.x86_64 ../build
上傳文件到服務(wù)器創(chuàng)建的meteor文件夾build
通過命令行直接上傳:meteor-build-test.tar.gzroot@your.server.ip.address:/home/meteor/build
也可以通過工具拷貝上傳
上面的命令就是把 Meteor app 打包成普通的 Node.js app,然后上傳到我們之前在服務(wù)器上創(chuàng)建的文件夾里劈彪。
運行
在服務(wù)器上進入 /home/meteor/build竣蹦,然后運行
tar zxvf meteor-build-test.tar.gz
解壓完成后,運行
cd bundle/programs/server && npm install
或者使用 cnpm沧奴,如果連接 npm 源有問題
cd bundle/programs/server && cnpm install
安裝打包完成后的 Node app 使用到的 npm 包痘括。安裝完成后回到 bundle 目錄,運行
nano pm2.json
再把
{
"apps":[{
"name":"mozibrand",
"cwd":"/home/meteor/build/bundle",
"script":"main.js",
"env":{
"NODE_ENV":"production",
"WORKER_ID":"0",
"PORT":"3000",
"ROOT_URL":"http://www.mozibrand.com",
"MONGO_URL":"mongodb://localhost:27017/meteor",
"MONGO_OPLOG_URL":"mongodb://localhost:27017/local",
"HTTP_FORWARDED_COUNT":"1",
"METEOR_SETTINGS":{}
}
}]
}
pm2 start pm2.json
拷貝過去滔吠,記得把 ROOT_URL 改為你用的地址纲菌。
最后運行pm2 start pm2.json命令, 你的 meteor 就運行在你的服務(wù)器上了。最后使
用http://your.server.ip.address:3000訪問你的網(wǎng)站疮绷。當(dāng)然你也可以使用其 port翰舌,例如 80 端口。
使用80端口訪問
端口映射的規(guī)則也只需輸入如下命令即可:
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000
MongoDB 3.2+ 安全授權(quán)登錄訪問控制
1冬骚、添加授權(quán)用戶
use admin
db.createUser({user:"mongoadmin", pwd:"mongoadmin", roles: ["userAdminAnyDatabase","dbAdminAnyDatabase","readWriteAnyDatabase"]});
此時如果提示灶芝,如下所示代碼:
E QUERY? ? [thread1] Error: couldn't add user: No role named userAminAnyDatabase@admin :
執(zhí)行 db.auth 獲得數(shù)據(jù)庫操作權(quán)限
db.auth
再執(zhí)行 步驟1,添加授權(quán)用戶操作即可
2唉韭、啟動授權(quán)登錄
vim /etc/mongo.conf
在配置文件中增加
security:
? ?authorization:"enabled"