之前一直忽視了這個問題,直接導致taiga-front的部署的時候不能通過其他IP訪問。
如圖:
首先是提示
app-loader.js:1 Your conf.json file is not a valid json file, please review it.
這樣導致用默認的conf 也就是后面那句:
Failed to load resource: net:localhost:8000/api/v1/stats/discover Failed to load :ERR_CONNECTION_REFUSED
現在因為部署版本的conf.json讀取失敗(因為注釋的原因),導致加載了默認的開發時配置。默認的conf.json:
{ "api": "http://localhost:8000/api/v1/", "eventsUrl": null, "eventsMaxMissedHeartbeats": 5, "eventsHeartbeatIntervalTime": 60000, "debug": true, "debugInfo": false, "defaultLanguage": "en", "themes": ["taiga"], "defaultTheme": "taiga", "publicRegisterEnabled": true, "feedbackEnabled": true, "privacyPolicyUrl": null, "termsOfServiceUrl": null, "maxUploadFileSize": null, "contribPlugins": [] }
而部署版的conf.json:
{
"api": "http://192.168.1.152/api/v1/", "eventsUrl": "ws://192.168.1.152/events", "debug": true, "publicRegisterEnabled": true, "feedbackEnabled": true, "privacyPolicyUrl": null, "termsOfServiceUrl": null, "maxUploadFileSize": null, "contribPlugins": [] }
最大的區別就是后端api 的地址
localhost:8000。相當於本機開發前端,在本機起后端。
而部署時,這里是要替換成域名或主機IP的。
1客戶機訪問 ip地址(80端口)
2nginx相應請求,跳轉的taiga-frontend
3frontend對后端發起請求,即調用ip地址/api/...
4前端節點的nginx根據后面的/api 做反代,才轉到內網后端IP:端口/api/...上
那么如果用默認conf.json從外網訪問,沒有訪問taiga主機的IP,而是去找客戶機的localhost:8000,直接導致無法注冊、跳轉(直接卡死在首頁上)
——其實,taiga這樣設計也有問題,第3步,按說應該完全封裝內網不應該找不到,不應該再從客戶端看見這種報錯了。
——解決方案:老實把注釋刪了,留下11行的json
心得:不要想當然,要相信報錯。
自己用pyhon的json.load() 讀一下conf.json,就確認無疑了,再去上網查一下,就確認問題了。
直接用報錯信息搜索,是搜不到答案的。(也許恰恰是自己太弱智了,別人都沒遇到)。
——后記,之后還時報這個錯,發現另外一個問題:
frontend 復制配置文件在 COPY或-v掛源代碼之前了。這樣根據docker image的堆疊機制,導致conf.json被覆蓋(沒有)
源碼的配置文件,是源碼的一部分,在外面生成好,一起掛進去,OK