使用该方式需要有基本的 Linux 知识
这里介绍的部署方法都是手动,可以帮助理解 Meteor App 在生产环境下是如何运行的
本次记录为全新服务器安装流程 教程来原参见 部署 Meteor 应用到墙内服务器
国内Meteor学习的资料和使用的人太少了,有兴趣添加一起学习
服务器端操作
使用 Ubuntu 14.04 64bit LTS 版本,root 用户就可以了。新开一台 VPS 后使用下面的命令更新一下 Ubuntu 的包列表, 这样 Ubuntu 知道到哪里去下载最新的软件包。
服务器工具安装
通过Xshell远程登陆命令行:
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内置使用版本,在开发环境,即本地电脑使用: meteor node -v 可检查meteor 使用的版本
4:curl -sL https://deb.nodesource.com/setup_4.x| sudo -E bash - //执行下面的解决方法后再操作第4步
5:apt-get install -y nodejs
问题来了:这里阿里云使用了自己的源,安装了几个小时仍然是 100% working...研究了半天,并咨询官方后,解决方法在这里
我的解决方法如下:
打开服务器的文件 vim /etc/apt/apt.conf
Acquire::http::Proxy "http://mirrors.aliyun.com/"; 注释或删除这句话,记得操作前备份文件
6:检查node是否安装成功 执行 node-v 查看到版本号即为成功安装
安装 MongoDB
安装步骤
(注:可以登陆官网,按照官网给出的最新方法安装)
1、查看当前Meteor推荐的mongo版本
meteor运行项目后,重新打开控制台,在项目下运行meteor mongo,会显示当前使用的mongo版本,我这边现在看到的是3.2版本
2、导入公钥所使用的包管理系统:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
3、创建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、重新加载本地包数据库
sudo apt-get update
5、安装MongoDB�
sudo apt-get install -y mongodb-enterprise
6、启动MongoDB
sudo service mongod start
数据库位置在:/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.
需要设置如下语言环境
exportLC_ALL=C
然后再使用下面命令修改 mongod 的配置
nano /etc/mongod.conf
找到 "#replication" 的注释处,改为如下内容
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)
你应该会看到返回
{"ok":1}
最后,再次重启mongo
service mongod restart
要确认 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
}
数据库安装完成
安装 pm2
这里没有什么特别的,就是跟安装其他 npm 包类似。我没有使用淘宝的 cnpm,因为我发现直接使用 npm 也没有太大问题,就是稍微慢点,但是还没有到不可接受的地步。
npm install pm2 -g
pm2 startup
我后来发现这也要看机房,有的机房会很慢很慢,甚至安装不了,比如阿里云最便宜的华北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 安装的一样。
代码文件夹
创建存放 Meteor build 打包成 Node.js app 后的源代码文件夹,我们后面会用到
mkdir /home/meteor
mkdir /home/meteor/build
到现在服务器端配置完毕
本地打包 Meteor App
假设你的 Meteor 源代码在你的本地开发电脑上一个叫 meteor-build-test 的文件夹里,我们在它的同级目录建立一个叫 build 的文件夹。然后运行
cd meteor-build-test
meteor build --architecture=os.linux.x86_64 ../build
上传文件到服务器创建的meteor文件夹build
通过命令行直接上传:meteor-build-test.tar.gzroot@your.server.ip.address:/home/meteor/build
也可以通过工具拷贝上传
上面的命令就是把 Meteor app 打包成普通的 Node.js app,然后上传到我们之前在服务器上创建的文件夹里。
运行
在服务器上进入 /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 就运行在你的服务器上了。最后使
用http://your.server.ip.address:3000访问你的网站。当然你也可以使用其 port,例如 80 端口。
使用80端口访问
端口映射的规则也只需输入如下命令即可:
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000
MongoDB 3.2+ 安全授权登录访问控制
1、添加授权用户
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 :
执行 db.auth 获得数据库操作权限
db.auth
再执行 步骤1,添加授权用户操作即可
2、启动授权登录
vim /etc/mongo.conf
在配置文件中增加
security:
authorization:"enabled"