你的服務器可能不會有一個公共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。 –