OS X Server 5 的 Xcode 服務

[華語, cmn-Hant-TW]

有一台機器是用 OS X Server 4.x 架設的,上面提供基本的 redmine/git/svn 服務,使用上沒什麼問題,不過自從升級到 OS X Server 5 之後就變得怪怪的了,一開始除了 redmine 正常外 git/svn 完全不能動作,直接下 git 指令才發現是因為同時升級的 Xcode 7 要先同意條款才能使用,這個問題解決之後 redmine 裡面就可以正常瀏覽 git 跟 svn 檔案庫的內容了,不過奇怪的是遠端存取檔案庫的時候 svn 可以動,但是 git 就一直吃 503 Service Unavailable

看了一下才發現原來 Server 5 的 apache 設定有了很大的變動,基本上所有的網頁內容都是透過 Proxy/Reverse Proxy 從 localhost 上的 port 34580 跟 34543 丟到 port 80 及 443。而系統提供的東西,像是 wiki 或是 Xcode 啦都被歸類為 service,也會在自己的 port 上跑,然後透過 proxy 丟到 port 80 及 443,個人推測這樣的目的是要把網頁服務跟其他服務分離,就算把網頁服務整個關掉,也不會影響到其他有提供網頁介面的服務。

這些系統提供服務的位置是預先就設好的,像 wiki 就是在 /wiki,而且似乎不能改,如果該服務沒開,使用者又嘗試用網頁開啟那個位置的話,會吃到一個還算蠻漂亮的 503 錯誤:

503 Service Unavailable

到這邊就大致上清楚了,git 會不能動不是因為設定有問題,而是設定整個被 Xcode 服務蓋掉,然後我又沒有開啟 Xcode 服務,所以吃到系統給的 503。這樣的話那有三個選擇:

  1. 改 git 服務網址位置 – 不要用 /git 就好了,不過這樣的話用戶端會改到爽
  2. 完全關掉 Xcode 的 git – 把網頁服務裡面 /git 相關的 proxy 關乾淨,要動到的地方似乎不少
  3. 把 Xcode 的 git 的位置指到我們的 git – 設定相對簡單,不過 Xcode 服務要打開才能用

後來是用第三個方法,要改的檔案是
/Applications/Xcode.app/Contents/Developer/usr/share/xcs/httpd_xcs.conf

有可能每次更新 Xcode 之後都要重改一次。至於 Xcode 6 的話似乎得改別的檔案,沒有特別去測試,但是從檔名來看應該是
/Library/Server/Web/Config/apache2/httpd_xcs_v6.conf

因為我們是透過 mod_perl 來用 Redmine 做認證,所以要把 mod_perl 加進去,關於 mod_perl 的使用方式可以參考 Redmine 官網這篇說明,另外 mod_perl 在 osx 下面很有可能也得自己編一個,細節就不詳述了。

改完設定檔後把 Server 的 Xcode 服務打開應該就可以用了,如果要看跑的情況的話可以看:
/var/log/apache2/services/xcode_access_log
/var/log/apache2/services/xcode_error_log

畢竟這個是 Xcode 服務的網頁界面,不是網頁服務,所以記錄檔是分開的,當然底層使用的網頁伺服器還是 apache 就是

Leave a Reply

Your email address will not be published. Required fields are marked *