phabricator 服務端搭建過程
在以前公司一直在用這個,來管理別人代碼,一般我們都是簡單配置一些文件。這次輪到我自己搭建整個服務了,我來說說我中間踩的坑(配置日期爲 2020.5.16 日,不用懷疑代碼過期的問題)
一,我的安裝環境 dell 電腦,centos6.8,Apache 2.2.15, mysql 5.6, php 5.6, phabricator, arcanist, libphutil 如果和我採用一抹一樣的安裝,這樣就可以了
二,linux 安裝教程
1,設置 u 盤啓動
https://jingyan.baidu.com/article/3d69c55126805bf0cf02d7ed.html
2.安裝細節
https://www.runoob.com/linux/linux-install.html
照着這個來問題不大
複製代碼
二,安裝腳本
https://secure.phabricator.com/source/phabricator/browse/master/scripts/install/install_rhel-derivs.sh
進入/opt,新建文件install_rhel-derivs.sh,拷貝腳本內容保存,修改文件權限,執行
這兒裏面有點問題,這兒下載的 php爲默認 5.3,到之後後面 Arcanist 肯定會出問題,支持最小版本爲 5.5,所有建議在這兒修改 install_rhel-derivs.sh 裏面 php 版本爲 5.6,爲什麼 5.6...因爲後面還有問題,而且我是 centos 6.8 的,最大支持 7.1,7.0 版本也有問題。
第二個數據庫的問題 下載的數據庫版本是也是 5.3,爲了避免問題,最好是也改下配置。
當然,php mysql 都不改也行,安裝完了我們再改,我是這麼坑過來的....
複製代碼
三,解決 版本問題 (要是上一步版本到位,直接忽略本條,本條也可以最後處理)
1,php 版本 升級到 5.6
https://www.cnblogs.com/insoleis/p/5587691.html
2.數據庫升級到 5.6...5.7 開始很大,5.6 就 70 多 M 吧
1)先卸載
https://my.oschina.net/u/3754001/blog/1828361
2)安裝
https://my.oschina.net/vipsdc/blog/1600750
親測有效。
要是版本出問題,可能最後加載出來顯示源碼的問題。儘量版本差不多吧,不然坑多
複製代碼
四,開始配置服務
1.移動phabricator相關文件到apache的發佈目錄下:
新建一個項目目錄,如:code-review:
$ mv /opt/arcanist /var/www/html/code-review
$ mv /opt/libphutil /var/www/html/code-review
$ mv /opt/phabricator /var/www/html/code-review
2.關閉防火牆和SELinux
$ service iptables status # 查看防火牆狀態
$ service iptables stop # 先臨時關閉防火牆
$ chkconfig iptables off # 再永久關閉,開機不啓動
3.關閉SELinux
$ getenforce # 查看SELinux狀態 或sestatus查看詳細
$ setenforce 0 # 臨時關閉SElinux
$ vi /etc/selinux/config # 修改SELINUX=disabled,重啓後永久關閉
4.修改apache配置:
$ vi /etc/httpd/conf/httpd.conf
或新建: /etc/httpd/conf.d/vhost.conf # 在httpd.conf中有Include包括
// 重點,這兒我是採用 Include包含,這兒不用手動添加,這兒不用手動添加這兒不用手動添加,自動包含的
添加虛擬機:
ServerName localhost
Listen 8080
<VirtualHost *:8070>
ServerName localhost
DocumentRoot "/var/www/html/code-review/phabricator/webroot"
DirectoryIndex index.php index.html index.html.var
RewriteEngine on
RewriteRule ^/rsrc/(.*) - [L,QSA]
RewriteRule ^/favicon.ico - [L,QSA]
RewriteRule ^(.*)$ /index.php?__path__=$1 [B,L,QSA]
</VirtualHost>
$ service httpd restart # 重啓apache
$ chkconfig httpd on # 設置開機啓動
如果啓動apche訪問不到任何信息,說明監聽端口不對,查找Listen字段,修改相應端口;
如果啓動apche出現內部錯誤,說明RewriteEngine有問題;
若啓動命令時,提示ServerName相關錯誤,將虛擬機上一行的ServerName localhost註釋去掉;
apache日誌路徑:/var/log/httpd
5.配置數據庫:
1.設置數據庫
$ service mysqld restart # 重啓mysql
$ chkconfig mysqld on # 設置開機啓動
設置數據庫root密碼:
$ mysql -u root # 若進不了,說明數據庫有密碼,查看後面的二、相關問題
Mysql> use mysql;
Mysql> update user set password=password("新密碼") where user="root"; # 不能直接password="新密碼"
Mysql> flush privileges;
Mysql> quit;
2.修改數據庫默認編碼:
$ service mysqld stop
$ vi /etc/my.cnf # 修改mysql配置文件
# 在下面兩項中添加:
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
$ service mysqld restart
要是提示數據庫升級什麼的話
不熟悉就不要這個時候來升級數據庫了,等搞完了按照 第二步驟來。
// 出現問題
1、mysql擦除root密碼
$ mysql –skip-grant-table &
Mysql> use mysql;
Mysql> update user set password=password("新密碼") where user="root";
Mysql> flush privileges;
Mysql> quit;
這裏需要注意的是每句命令需要用分號“;”結尾,執行完以上得操作,root的密碼就被清空。
ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'錯誤:
原因:mysql數據庫的user表裏,存在用戶名爲空的賬戶即匿名賬戶,導致登錄的時候是雖然用的是root,但實際是匿名登錄的.
處理方案:
# 1.關閉mysql
$ service mysqld stop
# 2.屏蔽權限
$ mysqld_safe --skip-grant-table
屏幕出現: Starting demo from .....
# 3.新開起一個終端輸入
$ mysql -u root mysql
Mysql> update user set password=password("新密碼") where user="root";
Mysql> flush privileges;
Mysql> quit;
2.my.sock 找不到話,也是數據庫的問題,(though 。。。 my.sock)
按照第二步驟重裝吧,我也是經歷了這個問題了
複製代碼
五.修改phabricator配置:
phabricator的主要配置都在放在項目目錄下./conf/local/local.json中,可以配置一些數據庫訪問、自動郵件等,
或phabricator目錄下用./bin/config set mysql.pass 000000 逐條設置。
$ vi ./conf/local/local.json
# 修改內容(注意替換配置中的相關字段):
{
"phabricator.base-uri": "http:\/\/172.16.11.235:8070\/",
"mysql.pass": "123456",
"mysql.user": "root",
"mysql.host": "localhost",
"mysql.port": "3306",
"differential.require-test-plan-field": false,
"cluster.mailers": [
{
"key": "my-mailer",
"type": "smtp",
"options": {
"host": "smtp.exmail.qq.com",
"port": 465,
"user": "[email protected]",
"password": "123456",
"protocol": "ssl"
}
}
],
"metamta.default-address": "[email protected]"
}
// 郵件發不出去的問題: 去郵箱開啓 smtp 功能,或者 用 protocol:ssl 的端口。或者直接去掉這一樣,看你郵箱情況,這兒出問題概率大
複製代碼
六。訪問網址,部署郵件 在上面的配置文件中設置好了郵箱配置後
// 發送郵件服務
./bin/mail send-test --to [email protected] --subject hello <README.md
重啓郵件服務:
$ ./bin/phd restart
// 這兒提示喊你看 .log 記得看,一般都是出錯了
p.mydomain.com -> 你的 ip:port
http://p.mydomain.com/daemon 這人能看到 activity daemon 服務已經啓動了
發送郵件試試,查看郵件發送是否正常:
$ ./bin/mail list-outbound
到第五步,基本已經可疑使用了。嗯,剩下就是觀察倉庫了。
複製代碼
七.倉庫管理
倉庫管理分爲兩種,一種觀察着模式,第二種全權代理模式,第一種能 review,但是不能攔截代碼入庫,只是對倉庫檢查。
第二種就是我們常用的服務,可以審覈代碼入庫
1、觀察已存在的遠端倉庫(這兒不能 arc diff)
如果不想讓Phabricator託管git倉庫,可以以觀察者模式導入一個已存在的git項目,並設置一些策略,當用戶有提交時,會觸發一些審覈策略,實現代碼review,這是重點具體創建過程如下:
1.) 創建觀察倉庫
a. 創建一個新倉庫(Create a new repository);
b. 點擊左側菜單URIs,再右側Add New URI,填寫URI(已存在的遠端倉庫),設置I/O模式爲Observe;
c. 如果需要,配置一些認證(私鑰等);
d. 在Basics項中啓用倉庫,並點立即更新,開始導入;
2.) 創建Herald規則
在更多應用裏,添加Herald到左側常用菜單上,進入Herald,創新一個"提交"類型(非commit Hook)的規則
我全部都監測了,你看英文,能看懂的
複製代碼
2.託管倉庫
1.) 賬戶配置
$ useradd git # 添加一個git賬戶,可設密碼或不設
$ vi /etc/shadow # 最底部查看git用戶的第二字段是不是!!,如果是,改爲空,如果有密碼也沒事,只要不是!!
$ vi /etc/passwd # 找到git用戶對應的那行,如果有類似於這樣的配置/bin/false,請修改爲 /bin/sh,沒有就不用修改
2.) 修改Phabricator配置
進入phabricator目錄:
$ ./bin/config set phd.user root
$ ./bin/config set diffusion.ssh-user git # 這裏的設置會表現在clone的url裏
$ ./bin/phd restart
3.) 配置git賬戶運行權限
運行visudo命令,或vi /etc/sudoers,或沒有sodu,需要運行yum install sudo安裝。
查找Defaults requiretty字段,如果未註釋,註釋掉,在文件尾部添加如下代碼:
git ALL=(root) SETENV: NOPASSWD: /bin/sh, /usr/bin/git-upload-pack, /usr/bin/git-receive-pack
4.) 配置ssh端口
$ vi /etc/ssh/sshd_config
修改端口爲:
#Port 22 # 註釋掉22端口,在後面另起的git項目ssh服務裏用
Port 2222 # 更改遠程登錄端口爲2222
其它ListenAddress字段都不要改,保持註釋狀態
$ vi service sshd restart # 重啓ssh服務
如果不用默認22端口,需要在phabricator配置裏添加設置,或在本地~/.ssh/config裏添加Port端口
$ ./bin/config set diffusion.ssh-port 2222
如果都設置了,還是不行,考慮是不是端口被遠程佔用或啓動phabricator ssh服務。
5.) 添加腳本及ssh服務
進入phabricator下resources/sshd/目錄
a.) 添加phabricator ssh腳本:
$ cp phabricator-ssh-hook.sh /usr/libexec/phabricator-ssh-hook.sh
$ chown root /usr/libexec/phabricator-ssh-hook.sh
$ chmod 755 /usr/libexec/phabricator-ssh-hook.sh # 千萬不要用錯成chown 755命令了
$ vi /usr/libexec/phabricator-ssh-hook.sh
修改兩個字段:
VCSUSER="git" # ssh帳戶
ROOT="/var/www/html/code-review/phabricator" # phabricator安裝目錄路徑
b.) 添加phabricator ssh配置文件:
$ cp sshd_config.phabricator.example /etc/ssh/sshd_config.phabricator
$ vi /etc/ssh/sshd_config.phabricator
修改:
AuthorizedKeysCommand /usr/libexec/phabricator-ssh-hook.sh # 此處路徑應該與a.)步驟中腳本路徑一致
AuthorizedKeysCommandRunAs git
#記得查看版本 openSSH6.2以上,此字段爲AuthorizedKeysCommandUser
AllowUsers git
Port 22 # 啓用ssh默認端口22,爲避免衝突,應註釋掉ssh默認配置文件/etc/ssh/sshd_config中22端口
c.) 啓動phabricator ssh服務:
先用調試模式啓動,查看錯誤及端口綁定是否成功:
$ /usr/sbin/sshd -d -d -d -f /etc/ssh/sshd_config.phabricator
正式啓用:
$ /usr/sbin/sshd -f /etc/ssh/sshd_config.phabricator # 此ssh服務跟系統默認ssh不是一個進程
重啓只要執行上面相同的命令即可,若要關閉服務:
$ ps -ef | grep sshd
$ kill <id>
6.) 添加ssh公鑰
a.) 生成ssh密鑰:
$ ssh-keygen -t rsa -f ~/.ssh/phabricator -C <郵箱> # -f 可修改生成名
b.) ~/.ssh/config添加一條:
# phabricator
Host 172.16.11.16
HostName 172.16.11.16
Port 22
PreferredAuthentications publickey
IdentityFile ~/.ssh/phabricator
c.) 登錄phabricator審覈網站,個人管理頁面,SSH Public Keys菜單裏添加phabricator.pub公鑰
$ cat ~/.ssh/phabricator.pub
完成後測試一下:
$ ssh -T -p 22 [email protected] # -p 可修改端口,默認22,可不加參數
這上面的步驟,不要懷疑版本,有些是生成文件,照着做,就算你本地沒有這些配置,都完全照抄下來,就能正常跑起來的。剩餘的 issues 進去 phb 界面再去修改。剩餘問題還多....
不懂的留言,我看到了會一一回復的