【问题标题】:How to control where Meteor runs如何控制 Meteor 的运行位置
【发布时间】:2012-12-02 02:16:59
【问题描述】:

我正在我的 AWS EC2(微型)实例上安装 Meteor(框架)并按照说明进行操作,在创建测试项目后,我在该目录上运行 meteor,给了我预期的结果

[[[[[ /var/www/html/meteortest ]]]]]

Running on: http://localhost:3000/

但我无法在浏览器中导航到服务器的 localhost 以查看 hello world 示例项目。有没有办法让流星在类似的东西上工作:

http://mydomain.com/meteortest/

http://mydomain.com/meteortest:3000

【问题讨论】:

  • 我刚开始使用 EC2,一周前还没有做任何服务器工作。我绝对是 n00b。
  • 您是否正在开发或部署到此服务器?
  • 不管怎样,这个服务器设置脚本可以为您处理所有这些:gist.github.com/matb33/5322002

标签: amazon-ec2 localhost meteor


【解决方案1】:

Meteor 设置 ROOT URL 的方式是使用名为 ROOT_URL 的环境变量:

http://docs.meteor.com/#meteor_absoluteurl

所以你可以像这样运行你的 Meteor 实例:ROOT_URL="http://mydomain.com/" meteor --port 80

但是,如果您想从文件夹(如http://mydomain.com/meteortest)提供流星实例,则必须使用 nginx 来转发端口(参见 Tyr 的示例)但替换以下行:

location / {

与:

location /meteortest {

并适当地更改您的 ROOT_URL。如果您仍然无法从外部访问您的域,则您可能没有为 EC2 正确设置安全组。您必须打开端口 80。有关如何执行此操作的更多信息可以在这里:http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/using-network-security.html

【讨论】:

  • 如果您想从 localhost 测试任何 accounts-* 软件包(或者如果您像我一样有一个指向工作环境 IP 地址的域),这将特别有用。
【解决方案2】:

您可以将 nginx 设置为代理端口 3000 到您的域。比如:

server {
  listen 80;
  server_name meteortest.mydomain.com;
  access_log /var/log/nginx/meteortest.access.log;
  error_log /var/log/nginx/tmeteortest.error.log;
  location / {
    proxy_pass http://localhost:3000;
    include /etc/nginx/proxy_params;
  }
}

请参阅http://wiki.nginx.org/HttpProxyModule 了解更多信息。

但是,在端口 3000 上运行流星是一个开发环境。如果您想在生产中使用它,请运行“meteor bundle”,然后按照生成的 tarball 中的 README 进行操作。

【讨论】:

    【解决方案3】:

    我认为问题在于端口 3000 可能被亚马逊的防火墙阻止了。你可以看看打开它,试试 Tyr 的解决方案,或者试着用

    运行流星
    meteor --port 80
    

    您可能需要 root 权限(即 sudo)才能执行此操作。

    【讨论】:

      【解决方案4】:

      直接在端口 80 上运行需要 root 权限,而您并不真正希望您的 Web 服务器以该权限运行 - 以 root 身份启动它并降级为普通用户是可能的,但也不是很理想,因为您可能会发现某个编程错误有时会忘记降级 privs,而您不会从中看到任何错误。

      在许多情况下,我真的不希望/不需要运行负载均衡器来使用多核,尤其是当我在 AWS 单核 t1 或 t2 实例类型上运行时,我只是根据需要对其进行横向扩展-- 因此我对seen 的最佳建议是简单地使用 Linux 内核进行端口转发,将端口 80 映射到端口 3000,就像这样

      $ sudo iptables -A PREROUTING -t nat -i eth0 -p tcp \
                                --dport 80 -j REDIRECT --to-port 3000
      

      很好,很容易,没有其他事情可做 - 并且超级高效,同时在处理请求时不涉及额外的进程。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-27
        • 1970-01-01
        • 2015-08-13
        • 1970-01-01
        相关资源
        最近更新 更多