使用 MUP 将 Meteor 应用程序部署到 Ubuntu EC2 实例

Deploying Meteor application with MUP to Ubuntu EC2 instance

Versions/Background

我使用的是 meteor-up (mup) 的 0.7.6 版,Meteor 1.0.2.1,它使用了我读过的 Mongo v0.10.33。

我正在使用小型 Ubuntu Server 14.04 LTS (HVM),SSD 卷类型 - ami-3d50120d AWS 上的 EC2 实例作为我的 Meteor 应用程序的目标。

我的域指向 ami-3d50120d 实例的弹性 IP(我在这里称之为 domain-name)。

我可以在新 ami-3d50120d 上执行 mup setup,我成功安装了 Mongo 和 Node,输出如下所示:

[domain-name.com] - Installing Node.js
[domain-name.com] ✔ Installing Node.js: SUCCESS
[domain-name.com] - Setting up Environment
[domain-name.com] ✔ Setting up Environment: SUCCESS
[domain-name.com] - Copying MongoDB configuration
[domain-name.com] ✔ Copying MongoDB configuration: SUCCESS
[domain-name.com] - Installing MongoDB
[domain-name.com] ✔ Installing MongoDB: SUCCESS
[domain-name.com] - Configuring upstart
[domain-name.com] ✔ Configuring upstart: SUCCESS

重新创建错误条件的步骤

  1. 创建了一个新的 Ubuntu 实例
  2. 分配了链接到我的域的弹性 IP
  3. 配置了我的 mup.json 文件(将在下面详细说明)
  4. 进行了 mup 设置 -> 一切都安装成功
  5. ssh 进入我的实例并执行 node -v -> v0.10.33
  6. 回到我的 OSX 框 -> 做了一个 node -v -> v0.10.32
  7. 是否部署了 mup -> 出现错误情况

错误条件

[domain-name.com] - Uploading bundle
[domain-name.com] ✔ Uploading bundle: SUCCESS
[domain-name.com] - Setting up Environment Variables
[domain-name.com] ✔ Setting up Environment Variables: SUCCESS
[domain-name.com] - Invoking deployment process
✘ Invoking deployment process: FAILED


-------STDERR----
Warning: Permanently added 'domain-name.com,55.555.5.555' (RSA) to the list of known hosts. sudo: node-gyp: command not found
-------STDOUT-----
=> re-installing binary npm module 'bcrypt' of package 'npm-bcrypt'

备注

我想我的 OSX 盒子上安装了节点 v0.10.32(我的亚马逊实例上安装了节点 v0.10.33),但这不应该影响我的 Meteor 版本 1.2.1 的节点版本,据我所知,它有自己的节点版本。

mup 配置

我的 mup.json,其中 domain-name.com 指向我分配给实例的弹性 IP,如下所示:

{
  // Server authentication info
  "servers": [
    {
      "host": "domain-name.com",
      "username": "ubuntu",
      // or pem file (ssh based authentication)
      "pem": "/Users/user-name/Meteor/pem-file-name.pem"
    }
  ],

  // Install MongoDB in the server, does not destroy local MongoDB on future setup
  "setupMongo": true,

  // WARNING: Node.js is required! Only skip if you already have Node.js installed on server.
  "setupNode": true,

  // WARNING: If nodeVersion omitted will setup 0.10.33 by default. Do not use v, only version number.
  "nodeVersion": "0.10.33",

  // Install PhantomJS in the server
  "setupPhantom": false,

  // Application name (No spaces)
  "appName": "application-name",

  // Location of app (local directory)
  "app": "/Users/user-name/Meteor/application-name",

  // Configure environment
  "env": {
    "PORT": 80,
    "ROOT_URL": "http://domain-name.com",
    "MONGO_URL": "mongodb://localhost:27017/clients-database"
  },

  // Meteor Up checks if the app comes online just after the deployment
  // before mup checks that, it will wait for no. of seconds configured below
  "deployCheckWaitTime": 30
}

在我的例子中,解决方案有两个。同样,我使用的是小型 Ubuntu Server 14.04 LTS (HVM),SSD 卷类型 - ami-3d50120d EC2 实例。


首先,我使用 mup 安装了节点版本 0.10.35,而不是 0.10.33。

https://github.com/meteor/meteor/blob/devel/History.md#upgraded-dependencies 我的印象是节点:0.10.33(从 0.10.29 开始)被 Meteor v1.0.2,2014 年 12 月 19 日使用。


其次,我更改了我的 AWS 安全组的 inbound/outbound 规则。我唯一添加的是 HTTP 入站和所有出站流量类型。