phabricator 服務端搭建過程,我親自試驗後的乾貨分享給大家!

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 界面再去修改。剩餘問題還多....

不懂的留言,我看到了會一一回復的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章