你的服务器可能不会有一个公共IP地址,这就是为什么它只是为您提供了内部IP 172.xx.xxx.xxx
防火墙/负载平衡器做报文转发来自发布的IP地址。确切的安排将取决于谁在托管服务器。
您需要将公共IP地址作为环境变量传递给Meteor,对其进行硬编码(不推荐)或将其放入数据库集合中。
更新:下面是使用保存到蒙戈集合环境变量的解决方案:
假设你的服务器设置允许您指定的环境变量,无论是在shell脚本或配置文件。我的例子使用Nginx/Passenger。
# Tell the app where MongoDB is
passenger_env_var MONGO_URL mongodb://localhost:27017/myproject;
# Tell the app what its other settings are
passenger_env_var ROOT_URL https://dev.myproject.online;
passenger_env_var IMAGE_DIR /var/www/imgserver/public;
在服务器中,一个流星方法读取的环境变量并将其插入到集合:
// Get a list of environment vars and put them in the Environs collection
// - client code will pick these up and handle them.
getEnvirons: function() {
Environs.remove({}); // Force them to be re-read every server startup
var toGet = ["ROOT_URL", "IMAGE_DIR"]; // Edit this as you please
_.each(toGet, function(e){
var val = process.env[e];
Environs.insert({name: e, value: val});
});
},
呼叫从服务器中的流星启动块以上。
所有仍有待完成的事情是发布Environs集合并订阅它。 (我假设你知道如何做到这一点)。环境变量数据的加载过程当然是异步的,因此在代码中允许加载
当然,如果它对您的项目有效,请分享如何使其发挥作用。我会很感激。 –
我为你更新了答案 – Mikkel
我通过普通Mup使用Digital Ocean的Ubuntu安装程序。我必须在哪个文件中放置环境变量?我现在在我的应用程序中将它们设置在'Meteor.isServer'中。这是一个非常长的过程+数据库插入来获取用户的IP。 –