本文主要是介绍用 mup 部署 meteor app 到云端服务器的过程已经如何配置 mup.js。像国外Galaxy,Modulus 和 Heroku 这种高级自动化的 PaaS 云部署平台在国内都无法正常访问。目前国内又没有同类产品,所以只能自己手动买服务器部署。还好 mup 工具极大的简化了这个过程,它会把服务器和 MongoDB 数据库分别以两个分开的 docker container 形式部署,非常高效。而且整个过程只用执行 mup setup 和 mup deploy 两个命令就够了(国外网络畅通的情况下)。
原文可见我在知乎上的自问自答,这里做一下重述。
我用的是阿里云ECS上1核2G的Ubuntu 14.04 64位服务器。我的 Meteor 版本是1.4.2.1,React 做前端。由于服务器在国内,颇经历了一些波折,才部署成功,以下是我的流程。
我一开始的 mup.js 配置文件是这样的:
刚执行 mup setup 等了一会儿,就遇到的第一个问题,下载docker太慢报错:
解决方案是直接通过阿里云连接进入主机,手动执行 apt-get install -y -q docker-engine (错误信息中有提示),手动进去安装的速度还挺快,安装好再执行 mup setup 成功:
紧接着执行 mup deploy,遇到第二个错误,装不了npm:
继续远程进入主机,手动执行 apt-get install npm,又安装成功:
之后再执行 mup deploy,遇到第三个错误,AssertionError: "undefined" === "function":
查了一下发现Github([meteor 1.4] AssertionError: "undefined" === "function" · Issue #1091 · arunoda/meteor-up · GitHub)上很多人有同样的问题,是 mup 支持 meteor 1.4 需要 docker image 用 abernix/meteord:base 格式,所以只要把 mup.js 里面相关的字段改掉就好:
再来一次 mup deploy,这个错过去了,但是新错又出现了!
mup 验证部署的时候 curl 服务器没有响应,它认为是部署失败了,检查 mup logs 发现原来配置文件里的 ROOT_URL: 'oneshot.io' 格式错误,需要加上http或者https,但 mup 默认的可没有加啊!但是改成 ROOT_URL: 'http://oneshot.io' 终于可以了!以下是我最终的 mup.js 配置文件内容。
之后其实又 mup deploy 又报了一个 curl 没响应的错,但这可能是因为它默认60秒以后检测部署,但这个时候服务器还没有准备好。因为我又看了一下 mup logs,刚才的 ROOT_URL 错误已经消失。再打开浏览器,app已经部署上去了!
网友评论