【问题标题】:deploying meteor app on a EC2 AWS server在 EC2 AWS 服务器上部署流星应用程序
【发布时间】:2017-04-04 15:49:25
【问题描述】:

我目前正在做一个学校项目:

我必须使用 PeerJS、Meteor 和 WebRTC 来制作视频聊天应用。

我的基于this tutorial,仅添加了 CSS。

我成功地创建了一个在本地工作的(在 localhost:3000 上一切正常,一旦

流星

命令在项目文件夹中运行。

我正在使用 Windows 10,我使用 mupx 在我的 EC2 服务器上部署应用程序。

我关注了this tutorial,一切正常,我可以访问我的应用程序、登录并查看我的网络摄像头源。但是一旦我尝试给另一个用户打电话,链接就没有了。我认为这是因为 mongoDB 或流星服务缺少某些东西,但我不知道是什么。

我的 mup.json 看起来像这样:

{
  "servers": [
    {
      "host": "IP.OF.METEOR.APP.EC2",
      "username": "ubuntu",
      "pem": "C:/Path/to/file.pem"
    }
  ],
  "setupMongo": true,
  "enableUploadProgressBar": true,
  "appName": "PeerChat",


  "app": "C:/pth/to/PeerChat",
    "buildOptions": {
     "debug": true,
     "executable": "meteor"
  },
  "env": {
      "PORT" : 80,
      "ROOT_URL" : "http://ec2-ip-to-meteor-app.us-west-2.compute.amazonaws.com",
      "MONGO_URL" : "http://IP.TO.MONGO.EC2:27017"
  },
  "deployCheckWaitTime": 300
}

有人可以就如何成功部署我的应用程序给我建议吗?我一直在尝试很多很多东西,但到目前为止都没有奏效。

感谢您的帮助!

【问题讨论】:

  • 你在运行 https 吗?您将需要它用于 webrtc。您还需要自己运行 peerjs-server,因为这也需要 https。我已经使用 nginx 和 phusion 乘客成功设置了流星,peerjs-server 独立运行(即不在代理后面)
  • 你能解释一下你为此做了什么吗?我目前正在使用 HTTP 访问我的 EC2,但不知道如何启动 peerjs-server 也不知道如何使用 nginx

标签: mongodb amazon-web-services meteor deployment amazon-ec2


【解决方案1】:

最近浏览器更改为阻止 webrtc over http。如果您尝试运行它,您将在控制台日志中收到某种拒绝访问错误。

这意味着一切都需要使用 https 运行。在您的情况下,这意味着 Meteor 和 peerjs-server。

查看 mupx 文档,我假设这对您来说没问题,它使用 nginx 本身,所以应该没问题。自己做是很有可能的,但需要一些系统管理员能力。这也是正确的(对 peerjs-server 的影响较小)

Peerjs 服务器

peerjs-server 位于https://github.com/peers/peerjs-server 就目前而言,它可以从命令行运行,但问题是像 nginx/Passenger 这样的工具不做命令行选项,所以我做了一个接受环境变量的 fork。我的叉子在https://github.com/mikkelking/peerjs-server

这是 peerjs-server 的启动文件,它使用了一个名为 forever 的东西。 https://github.com/foreverjs/forever

一个简单的 CLI 工具,用于确保给定脚本连续运行 (即永远)。

先决条件:

  • Nodejs
  • 名为 peerjs 的用户
  • 我的 peerjs-server 端口解压到 /var/www/peerjs
  • 了解如何永久安装和运行

运行 peerjs-server 的脚本:

#!/bin/bash
export PEERJS_PORT=9000;
export PEERJS_KEY=some-unique-string;
export PEERJS_SSLKEY=/etc/nginx/ssl/myserver.key;
export PEERJS_SSLCERT=/etc/nginx/ssl/myserver.pem;
export PEERJS_DEBUG=1;
cd /var/www/peerjs

forever start -l forever.log --append -o out.log -e err.log ./bin/peerjs --debug 2&>1 >./peerjs.log

此脚本将确保 peerjs 即使在崩溃后也能运行,并且在服务器重新启动后仍然存在。

您可能还需要这个文件:

~peerjs/.forever/config.json

{
  "root": "/home/peerjs/.forever",
  "pidPath": "/home/peerjs/.forever/pids",
  "sockPath": "/home/peerjs/.forever/sock",
  "loglength": 100,
  "logstream": false,
  "columns": [
    "uid",
    "command",
    "script",
    "forever",
    "pid",
    "id",
    "logfile",
    "uptime"
  ]
}

我希望这会有所帮助。

【讨论】:

  • 似乎没有解决问题,我想我会从一个新的 AWS EC2 实例重新开始。你能(如果你有时间的话)告诉我如何一步一步地做这一切吗?顺序重要吗?我正在考虑只创建一个 EC2 实例并在 localhost:27017 上获取 mongoDB,而不是仅用于此目的的另一台服务器,这就是我的老师告诉我的。
  • 另外,myserver.key 和 myserver.pem 文件是什么?我在哪里可以找到它们?
  • 购买SSL证书时会生成myserver.pem和myserver.key文件,提供者很多,au.godaddy.com/offers/…其中之一
  • 对不起,我没有时间写一个循序渐进的教程。这是一个名为 sysadmin 的兔子洞。 github.com/foreverjs/forever 网站上有关于如何使用节点程序永久设置的很好信息,但它还假设您了解服务器和命令行(我猜您不知道)。
【解决方案2】:

如果这只是一个演示,您不需要去建立一个完整的网站。您可以使用端口转发来允许第二台机器参与。

假设您在本地计算机上的端口 3000 上运行流星。找出您的本地网络 IP 地址是什么,例如 192.168.1.101

在第二台机器上使用如下命令进行端口转发:

ssh -L 3000:192.168.1.101:3000 localhost

它会要求你提供本地用户的密码。

现在用户可以访问 localhost:3000 并访问您的流星应用程序。将允许视频通话,因为浏览器认为您在本地机器上

另一种选择是在同一台机器上使用匿名窗口并以不同的用户身份登录。不过不如在两台电脑上做。

【讨论】:

  • 一百次谢谢,我想它明天应该可以用于我的演示,我会在学校网络上尝试一次! (我是新用户,所以我的点赞不计入您的帖子...)
  • 我认为您可以将答案标记为正确 :)
  • 刚做了,再次感谢您的帮助,非常感谢
猜你喜欢
  • 2019-11-02
  • 1970-01-01
  • 2015-03-18
  • 2020-05-08
  • 2017-12-23
  • 2014-05-21
  • 2017-06-12
  • 2015-08-21
  • 1970-01-01
相关资源
最近更新 更多