參考:https://secure.phabricator.com/book/phabricator/article/installation_guide/
概述
phabricator,由facebook公司開發,是一個開源的代碼審查系統,幫助軟件公司建立更好的軟件。該系統能夠部署在多數linux發行版以及os x系統上。本文檔僅是該系統部署的一個簡單指導,詳細內容請查看官網說明和解釋,本說明的部署僅針對Ubuntu 14.04 LTS版本操作系統。
安裝
腳本
官方網站提供了一個安裝腳本,大大簡化了安裝過程。該腳本路徑https://secure.phabricator.com/diffusion/P/browse/master/scripts/install/install_ubuntu.sh。
安裝時,需要先選定安裝路徑,因為安裝腳本是默認使用當前工作路徑安裝的,當然,你也可以修改腳本上的安裝路徑。
啟動安裝腳本,按照提示一步一步的執行。安裝時會檢查系統是否已安裝必須的組件(MYSQL、APACHE2等),如果沒有安裝,則腳本會自動安裝。安裝到最后會提示是否修復問題(Fix issue),選擇修復並繼續執行,執行完成后,即已安裝完成。
安裝過程中會從github中克隆出該系統的源碼和相關文件,這個過程可能會比較耗時,需要耐心等待。
https://github.com/phacility/libphutil.git
https://github.com/phacility/arcanist.git
https://github.com/phacility/phabricator.git
安裝完成后安裝目錄會出現一個phabricator目錄,該目錄包含了該系統的所有文件以及源碼。安裝完成后請檢查MySQL以及Apache2是否安裝成功,以及服務是否可以正常啟動。
部署webserver
Phabricator安裝完成后需要將其使用Apache2部署,部署時應該特別注意配置,在不同的操作系統中配置項以及配置文件可能不同,這里使用的是Ubuntu 14.04 LTS版本的Apache2 2.4.7版本。在/etc/apache2目錄需要注意如下路徑:
ports.conf:web站點可用的端口,默認為80,使用不同端口時需要修改或者該文件中的監聽端口。
sites-avaliable:web站點虛擬主機的配置文件存在路徑。
sites-enabled:sites-avaliable配置文件對應的連接文件路徑。
如果使用默認路徑時需要在sites-avaliable路徑下禁用默認的虛擬主機,此時對應的連接文件將會被刪除;啟用新的虛擬主機時需要創建對應的連接文件。
禁用虛擬主機:sudo a2dissite 000-default.conf 啟用虛擬主機:sudo a2ensite 000-default.conf
下面是一個典型的配置例子:
<VirtualHost *:20001> # Change this to the domain which points to your host. ServerName ktphabricator.com # Change this to the path where you put 'phabricator' when you checked it # out from GitHub when following the Installation Guide. # # Make sure you include "/webroot" at the end! DocumentRoot /home/test/habricator/webroot RewriteEngine on RewriteRule ^/rsrc/(.*) - [L,QSA] RewriteRule ^/favicon.ico - [L,QSA] RewriteRule ^(.*)$ /index.php?__path__=$1 [B,L,QSA] <Directory "/home/test/habricator/webroot"> Require all granted </Directory> </VirtualHost>
ServerName
這里使用一個域名作為ServerName值,這個域名可以無效也可以是一個可解析或者已注冊的域名。
DocumentRoot
這里是Phabricator站點文件保存的路徑,也就是安裝路徑。這些設置需要重啟Apache2服務器才能生效使用,可以使用Service apache2 restart命令重啟。
啟用該配置文件后,打開瀏覽器輸入主機IP或者域名和端口訪問該站點。
Port
該端口是該站點的監聽端口,例如20001。該監聽端口必須保存在/etc/apache2/ports.conf配置文件中。
需要注意的是,Phabricator需要獨占一個域名。在瀏覽器中訪問時需要輸入該域名訪問。如果使用默認的80端口,那么也應該需要
配置
數據庫MySQL
如果MySQL數據庫設定了root賬戶密碼的話,安裝成功會在瀏覽器進入站點時,會出現無法鏈接數據庫的錯誤提示頁面。此時需要對數據庫連接做配置,修改數據庫連接的主機、端口、用戶名以及用戶登錄密碼。
Phabricator默認使用MySQL的root賬戶連接數據庫服務器,所以此時應該使用配置其密碼或者更改為其他的賬戶。
如果連接的數據庫是其他主機的話,那么還需要配置數據庫連接的主機以及端口號。
連接設定成功后刷新頁面將會出現另一個數據庫問題,該問題是該系統的一個初始動作,必須執行!按照頁面上的提示執行數據庫存儲升級即可。該過程可能會耗時較長,請耐心等待。需要注意的是該命令對應的程序時保存在phabricator安裝路徑下的bin目錄。
./bin/storage upgrade
系統管理員配置
設定成功后刷新頁面應該進入系統管理員配置頁面了,此時注冊並設定系統管理員賬戶,該賬戶將會擁有超級權限,能夠修改系統任何內容!
只有設定了系統管理員后才能執行后續的設置操作,而這個才是剛剛開始!
Setup Issues
系統管理員配置完成后,將會真正的進入到了該系統。此時出現的是系統setup issues頁面。
該頁面之處系統安裝和部署時存在的潛在的問題。這些問題不是所有都是嚴重的,多數是系統運行的潛在性能問題以及系統使用是否方便。下面幾個問題是必須解決的,否則系統運行不正常!
No Authentication Providers Configured
該問題是用戶登錄配置,系統剛剛安裝完成是沒有登錄途徑的,也沒有注冊途徑。此時應該選定一個,后期可以繼續增加用戶注冊授權方式。
點擊進入issue頁面 → 點擊“using the "Auth" application” → 點擊"Add Authentication Provider",可以看到如下頁面。
選擇一種登陸或身份驗證方式。這里我們選擇“用戶名/密碼”的方式。確認添加后進入下一頁,將所有選項都進行勾選(默認),也可以是根據需要進行設置。這里有一個最短密碼長度的設置account.minimum-password-length,可以在之后進行設置。當再次確認后,登陸方式就被確認應用了。再次刷新頁面,這個issue就被修復了。
No Sendmail Binary Found
該問題是郵件收發服務問題。系統很功能后台會執行郵件收發動作,所以必須配置系統使用的郵件收發服務。該配置有些麻煩,並且容易出問題!請查看“郵件服務配置”一節。
Server Timezone Not Configured
這個事設置服務器的時區的。系統很多操作將會產生時間戳保存到數據庫或者其他的通信操作,所以應該設定,否則系統默認使用格林威治標准時間,和北京時間差了正好8個小時。點擊進入issue頁面,會出現如下圖的顯示:
選擇“Edit phabricator.timezone”連接執行設定。
Missing Repository Local Path
該操作執行本地代碼庫以及網絡代碼庫本地保存路徑。該路徑可以是該系統默認使用的/var/repo,也可以其他的可用路徑。系統剛安裝完成是/var/repo路徑是不存在的,如果使用它的話必須先創建。
請確保該程序運行用戶具有該路徑的讀寫執行權限,否則系統核心的審查功能將無法使用!
點擊issue,進入對應頁面,會出現如下圖所示的內容:
Phabricator Daemons Are Not Running
后台守護進程將會執行系統跟蹤、檢測以及郵件收發等操作。所以該問題應該修復,后期如果出現了問題或者刷新的話,可以對它停止、調試、重啟等操作。特別是在郵件收發服務失敗時,應該多次重啟這個守護進程。
在phabricator安裝目錄下的bin目錄下執行phabricator/bin/ # ./phd start 后,出現一下提示代表守護線程已經被開啟。
PhabricatorRepositoryPullLocalDaemon
PhabricatorGarbageCollectorDaemon
PhabricatorTaskmasterDaemon
刷新頁面后,這個issue也就被修復了。
如果守護進程出問題或者途中宕掉了,那么在系統管理員登錄后的首頁會重新出現該問題的提示
如果phabricator升級了或者修改了配置,那么daemons需要重啟!
郵件服務設置
該系統運行時將會執行許多的郵件收發,所以需要設定並檢查配置。
Phabricator郵件設置有多種方式,這里使用最簡單的SMTP方式。
設定郵件適配器,適配器的選擇需要和設定的方式對應。這里使用SMTP對應的適配器
PhabricatorMailImplementationPHPMailerAdapter。如果不想使用郵件服務則使用
PhabricatorMailImplementationTestAdapter適配器, 這個值將完全禁用郵件發送。如果你不想對外發送郵件,可以使用該值。
適配器默認使用的是PhabricatorMailImplementationPHPMailerLiteAdapter,其對應SendMail郵件服務,該sendmail相當難配置,同時收發郵件效率低下,建議不使用!
多數SMTP服務器需要認證,為了使 Phabricator使用SMTP, 需要對如下的關鍵字進行配置:
phpmailer.mailer: 設置為 "smtp".
phpmailer.smtp-host: 設置smtp服務器的名字,比如qq、設定為smtp.qq.com,具體的郵箱服務請參考官方說明。
phpmailer.smtp-port: 設置smto服務器對應的端口。多數SMTP服務器默認端口時25,如果有特殊的,請參考官方說明。
phpmailer.smtp-user: 設置用戶名。如果你使用的是qq郵箱,那么此處應該設定為你的qq號碼。
phpmailer.smtp-password: 設置密碼。
phpmailer.smtp-protocol:smtp通信方式,tls或者ssl,如果選擇其中一種的話,需要設置phpmailer.smtp-port為對應的端口號。默認這里不選擇,使用25端口。
上面設置完成后還需要設置metamta.default-address參數,即phabricator收發郵件的地址。請保持與smtp服務商一致。
設置完成后需要檢查配置是否成功。檢查時需要確保后台守護進程是否正常運行。檢查時使用./mail list-outbound命令檢查系統郵件收發狀態,結果就像下面這面:
Sent表示發送成功,queued表示仍在排隊,可能是在等待發送,也可能是后台進程運行不正常,此時應該嘗試重啟,甚至多次重啟后台守護進程。每條記錄可以使用./mail show-outbound --id id-value命令查看郵件的詳細內容。
SSH config
在使用phabricator審查代碼,或者操作repository前,需要對ssh做配置。
配置系統用戶賬號
Phabricator 擁有3種系統用戶賬號。他們作為系統用戶賬號在Phabricator主機上運行,而不是普通用戶賬號。
配置系統賬號有以下幾種:
1) 作為守護進程運行的,我們稱之為“daemon-user”。
2) 作為web主機運行的,我們稱之為“www-user”。如果你不打算使用HTTP協議訪問代碼庫,你就沒必要對這個用戶進行特別的配置。
3) 通過SSH連接運行的,我們稱之為“vcs-user”。如果你不打算使用SSH協議訪問代碼庫,你就沒必要對這個賬戶進行特別的配置。
如何配置這些賬戶:
l 當沒有daemon-user時,需要創建一個“daemon-user”。當你啟動線程時,也就使用了這些賬號。推薦使用root賬號。
l 當沒有www-user時,需要創建一個“www-user”。通過web主機來啟動這個賬號。注意,啟動的用戶一定要存在才行。
l 當沒有vcs-user時,需要創建一個“vcs-user”。對於Git和Hg,其名字是相同的。當用戶clone代碼庫時,他們會用到類似的地址 vcs-user@phabricator.yourcompany.com。
現在,為了vcs-user和www-user如同daemon-user一樣可以使用sudo命令,需要對sudoers進行配置。這里,需要使用visudo或sudoedit命令,將這些用戶加入/etc/sudoers文件中。
如果配置ssh,則添加:
vcs-user ALL=(daemon-user) SETENV: NOPASSWD: /path/to/bin/git-upload-pack, /path/to/bin/git-receive-pack, /path/to/bin/hg, /path/to/bin/svnserve
如果配置http,則添加:
www-user ALL=(daemon-user) SETENV: NOPASSWD: /usr/bin/git-http-backend, /usr/bin/hg
其中的三個賬戶相應的替換為真實賬戶。
配置完sudoers后,需要對phabricator進行配置:
phabricator/ $ ./bin/config set phd.user daemon-user phabricator/ $ ./bin/config set diffusion.ssh-user vcs-user
這里也應該替換為真實的賬號。
SSH服務配置
注意,這里的操作很危險!所以需要格外小心,並確保可跟蹤!
對SSH服務的配置分七步。
1、創建 phabricator-ssh-hook.sh
可以從 phabricator/resources/sshd/phabricator-ssh-hook.sh 拷貝模板到 /usr/libexec/phabricator-ssh-hook.sh (或其他你喜歡的路徑)。並且編輯它來配合當前的配置。然后,讓他被root用戶擁有,並限制對其的編輯:
sudo chown root /path/to/phabricator-ssh-hook.sh sudo chmod 755 /path/to/phabricator-ssh-hook.sh
如果你不做這些事情,sshd將會拒絕執行鈎子命令。
2、創建Phabricator的 sshd_config 配置文件在 phabricator/resources/sshd/sshd_config.phabricator.example 拷貝模板到 /etc/ssh/sshd_config.phabricator(或者其他路徑)。
打開這個文件,然后修改 AuthorizedKeysCommand 和 AuthorizedKeysCommandUser 來適配你當前使用的系統。
該文件中保存有ssh port 22,這是ssh默認端口,請不要修改該配置項!但是在使用它之前需要遷移默認ssh服務的端口為其他。
以上步驟會將phabricator-ssh-hook.sh和sshd_config關聯起來,在sshd執行時會自動執行。
3、遷移默認的ssh端口
所在的系統應該安裝有ssh,ssh默認使用22端口。
這里需要先將默認的端口遷移為另外一個端口,假設為222. 22端口會被phabricator sshd使用!
遷移ssh端口
Ssh的配置保存在/etc/ssh/sshd_config文件中,找到
Port 22
這一行,並修改22為222,然后保存。使用
Service ssh restart重啟ssh服務。此時修改成功。
可以通過以下命令測試設置是否成功
ssh -p 222 the_host_ip
4、啟動新的SSH守護進程
設置成功后,啟動phabricator sshd守護進程,請使用以下命令:
/path/to/sshd -f /etc/ssh/sshd_config.phabricator
Sshd必須是全路徑!而sshd_config應該選擇上面第二步驟的sshd_config.phabricator。只有這樣才能夠成功!
5、創建ssh public key
Phabricator的ssh協議是使用ssh public key無密碼登錄驗證的。所以,需要生成公私密鑰對。
這里需要驗證的是上面設置的vcs_user的key,先登錄vcs_user,該賬號的根目錄下應該會存在一個隱藏文件夾.ssh,如果沒有,請創建之。
進入.ssh目錄,使用ssh-keygen創建秘鑰,該命令會提示輸入秘鑰文件名,可以不輸入,直接回車。接下來還提示你輸入密碼,可以不輸入直接會回車。
執行完成后,該目錄下回生成兩個文件id_rsa、id_rsa.pub。id_rsa是私鑰文件,id_rsa.pub是公鑰文件。
6、upload ssh public key
將生成的id_rsa.pub文件內容復制保存到phabricator,具體的說就是進入phabricator站點,進入setting模塊,該模塊下有SSH Public Keys部分,此時選擇【Upload Public Key】按鈕保存即可,key name可自定義!
7、測試
上述配置完成后,應該檢查是否配置成功!可以使用如下命令
echo {} | ssh vcs-user@phabricator.yourcompany.com conduit conduit.ping
這里的phabricator.yourcompany.com可以是一個公司內可用的真正phabricator的域名,或者局域網的域名,也可以是ip。
如果配置成功,那么應該得到如下結果:
{"result":"orbital","error_code":null,"error_info":null}
如果配置不成功,請詳細檢查上述步驟!另外請詳細參考官網:
https://secure.phabricator.com/book/phabricator/article/diffusion_hosting/
SSH配置完成后,就可以在diffusion中的repositon使用ssh協議了,此時可以執行使用phabricator相關工具執行code review, repository pull/push.
Arcanist
安裝
Arcanist的安裝很簡單,可從源碼安裝,也可安裝包安裝。
源碼安裝僅需把代碼clone下來,然后執行路徑下的/bin路徑的arc程序進行配置即可。
Arcanist git路徑參考Phabricator。
安裝包安裝在Ubuntu下執行如下命令:
sudo apt-get install arcanist
配置
按照官方說明步驟如下:
1、設置你phabricator部署的域名,此處假設https://phabricator.wikimedia.org/
./arc set-config default https://phabricator.wikimedia.org/
該步驟執行成功后會提示如下文本:
Set key 'default' = "https://phabricator.wikimedia.org/" in global config (was null)
2、安裝個人私鑰
./arc install-certificate
按照官方的步驟的話,該步驟執行失敗,因為不會去連接我們自己的域名或者路徑,而是官方的路徑。
正確的操作應該是,進入arcanist路徑,該路徑下有一個.arcconfig隱藏文件,編輯該文件中的pharicator.uri參數為我們自己的域名路徑,保存退出后再進入bin目錄執行
./arc install-certificate
然后按照提示執行操作即可。
Daemons
Daemons是Phabricator后台守護進程,它是一系列守護進程的集合。主要服務於郵件服務、代碼repository管理和審查!所以請時刻確保該守護進程運行正常!
這些守護進程可以通過phd腳本執行,路徑在/phabricator/bin。
重啟Daemons
./bin/phd restart
運行狀態
./bin/phd status
停止Daemons
./bin/phd stop
啟動Daemons
./bin/phd start