Centos7搭建配置phabricator开源的可视化代码审查工具

Posted by Yancy on 2017-01-07

Phabricator是由Fackbook开发的一个开源的可视化代码审查工具。

公司项目管理和代码审查一直用jiragit来做,最近发现一个不错的开源的项目管理平台 自己搭建下感觉还挺好用的话就转移过来了。

简介

在Phabricator中,可以非常方便的针对每一段代码进行交际讨论;负责审查的工程师可以接受代码改变,可以提出疑问要求原作者继续修改等等。

在Pharbricator中,可以新建代码仓库(也就是在phabricator中宿主仓库),也可以导入外部仓库(从外部仓库拉取数据,并跟踪该外部仓库保持数据同步,phabricator内部有一个更新机制);支持http ,也支持ssh(不过配置比较麻烦点); Phabricator支持两种代码审查工作流:“提交前审查”和“audit”(提交后审查)。

在Phabricator的主面板中主要有以下几个工具:

  • 差分 - 审查代码:管理预推代码审查工作流程;
  • Maniphest - 任务和错误:管理成员的所有任务和Bug,可对任务或Bug展开讨论;
  • Diffusion - 主机和浏览存储库:管理代码仓库,支持Git / Hg / SVN;
  • 审计 - 浏览和审计提交:管理后推代码审查工作流程;
  • Phriction - Wiki:文档管理;
  • 项目 - 组织:工程管理,可关联资源库;
  • 源代码托管在Github

特性:

代码审查(Code Review)
git仓库
跟踪bug
项目管理
团队沟通

关于phabricator更多的介绍,访问项目官网:phabricator

环境要求:

Phabricator是一个LAMP应用套件,因此最基本的要求就是LAMP环境:

1
2
3
4
5
6
7
8
9
* Linux系统环境:centos7.1 64位
* Apache(或nginx,或lighttpd):需要Apache 2.2.7以上版本。
* MySQL:MySQL必需
* PHP:需要PHP5.2以上版本
这里我安装版本:
* Apache 2.2.15
* mysql 5.6.29
* php 5.4.16

phabricator安装

参考:官网phabricator安装

具体过程不描述,以我参考的网络资源进行说明。网上的资源参考了特别多,只放我认为最有帮助的。

首先,phabricator是基于php的,同时需要发送邮件(提醒代码审查者),所以假定服务器上已经配置好了php,mysql,nginx,postfix等环境;同时,官方推荐开启APC性能.

###1 安装MariaDB数据库

1
yum install mariadb mariadb-server

启动Mariadb服务:

1
2
systemctl start mariadb
systemctl enable mariadb

运行MySQL初始化安装脚本:

1
mysql_secure_installation

默认密码为空。

这里需要配置优化my.cnf 如果默认不优化也是可以的不过安装完成以后可以看到我下面文章会出现10多个问题 大部分都是跟MySQL相关的。

配置优化MariaDB数据库:
1
2
3
4
5
6
7
vim /etc/my.cnf
[mysqld]
innodb_buffer_pool_size = 1600M
max_allowed_packet = "33554432"
sql_mode=STRICT_ALL_TABLES
ft_stopword_file=/var/www/html/phabricator/resources/sql/stopwords.txt
ft_min_word_len = 3
需要执行的SQL语句:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@Phabricator sql]# mysql -uroot -pqwde1dsdfg3.com
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 75
Server version: 5.5.52-MariaDB MariaDB Server
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> REPAIR TABLE phabricator_search.search_documentfield;
+-----------------------------------------+--------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+-----------------------------------------+--------+----------+----------+
| phabricator_search.search_documentfield | repair | status | OK |
+-----------------------------------------+--------+----------+----------+
1 row in set (0.00 sec)
  • mysql 5.6安装,不过这里我最后启用的是5.6版本,原因已经说明了.

2 安装Apache

1
#yum -y install httpd

配置Apache,提高一点安全性:

1
2
sed -i 's/^/#&/g' /etc/httpd/conf.d/welcome.conf # 注释掉每一行
sed -i "s/Options Indexes FollowSymLinks/Options FollowSymLinks/" /etc/httpd/conf/httpd.conf

启动Apache web服务:

1
2
systemctl start httpd
systemctl enable httpd

3 安装PHP和一些模块

1
yum install php php-mysqli php-mbstring php-gd php-curl php-cli php-common php-process

配置优化 不然安装成功以后会出现问题错误提现❌:

1
2
3
4
5
6
7
8
9
10
11
1. 未配置服务器时区
[root@Phabricator sql]# vim /etc/php.ini
;date.timezone =
改成:
date.timezone = Asia/Shanghai
PHP post_max_size未配置
将PHP 配置中的post_max_size 调整为至少32MB。设置为较小值时,大文件上传可能无法正常工作。
post_max_size = 32M
  • php5.4版本可以直接使用phabricator.sh提供的脚本安装,这个脚本会检查phabricator需要的环境,没有的会自动安装,之后会安装好phabricator,安装参考phabricator安装向导.

4 安装Git

1
yum install git

可参考网上防火墙和selinux建议根据此文章配置一下.

如果你已经设置好LAMP环境,你可以已经获得你所需的任何东东。如何安装LAMP可以查看我写yum一键安装与卸载LAMP环境

5 下载安装Phabricator

既然你已经安装以上所需的依赖环境服务,下面获取Phabricator以及其依赖包:

1
2
3
4
5
6
mkdir /var/www/html/
cd /var/www/html/
git clone https://github.com/phacility/libphutil.git
git clone https://github.com/phacility/arcanist.git
git clone https://github.com/phacility/phabricator.git
chown -R apache: /var/www/html/*

6 创建Apache虚拟主机配置文件

1
vim /etc/httpd/conf.d/phabricator.conf

写入内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<VirtualHost *:80>
ServerAdmin phabricator.ihaozhuo.com
DocumentRoot /var/www/html/phabricator/webroot/
ServerName phabricator.ihaozhuo.com
ServerAlias phabricator.ihaozhuo.com
RewriteEngine on
RewriteRule ^/rsrc/(.*) - [L,QSA]
RewriteRule ^/favicon.ico - [L,QSA]
RewriteRule ^(.*)$ /index.php?__path__=$1 [B,L,QSA]
<Directory /var/www/html/phabricator/webroot/>
AllowOverride All
</Directory>
ErrorLog /var/log/httpd/phabricator.ihaozhuo.com-error_log
CustomLog /var/log/httpd/phabricator.ihaozhuo.com-access_log common
</VirtualHost>

❗️❗️注意替换上面的域名。
其中/var/www/html/phabricator/webroot是我的phabricator安装路径,大家使用时候换成自己的即可。
安装好phabricator之后,需要使用phabricator安装目录下bin文件夹下的命令来更新下.

重启apache服务:

1
systemctl restart httpd

7 设置MariaDB数据库

配置Phabricator连接MariaDB需要的信息:

1
2
3
4
5
cd /var/www/html/phabricator/
./bin/config set mysql.host localhost
./bin/config set mysql.port 3306
./bin/config set mysql.user root
./bin/config set mysql.pass <your-MySQL-root-password>

创建数据库:

出现问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@phabricator bin]# ./storage upgrade
MySQL Credentials Not Configured
Unable to connect to MySQL using the configured credentials. You must
configure standard credentials before you can upgrade storage. Run these
commands to set up credentials:
phabricator/ $ ./bin/config set mysql.host __host__
phabricator/ $ ./bin/config set mysql.user __username__
phabricator/ $ ./bin/config set mysql.pass __password__
These standard credentials are separate from any administrative credentials
provided to this command with __--user__ or __--password__, and must be
configured correctly before you can proceed.
Raw MySQL Error: Attempt to connect to root@localhost failed with error
#2002: Can't connect to local MySQL server through socket
'/var/lib/mysql/mysql.sock' (2).

出现这一步问题 就是因为没有配置好MySQL的连接地址信息。配置下mysql的user和pass就行。

1
2
3
4
5
6
7
[root@Phabricator local]# cat /var/www/html/phabricator/conf/local/local.json
{
"mysql.pass": "qwde1dsdfg3.com",
"mysql.user": "root",
"mysql.port": "3306",
"mysql.host": "localhost"
}

重新初始化数据库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@Phabricator phabricator]# ./bin/storage upgrade
Before running storage upgrades, you should take down the Phabricator web
interface and stop any running Phabricator daemons (you can disable this
warning with --force).
Are you ready to continue? [y/N] y
Loading quickstart template onto "localhost:3306"...
Applying patch "phabricator:db.packages" to host "localhost:3306"...
Applying patch "phabricator:20160201.revision.properties.1.sql" to host "localhost:3306"...
Applying patch "phabricator:20160201.revision.properties.2.sql" to host "localhost:3306"...
Applying patch "phabricator:20160706.phame.blog.parentdomain.2.sql" to host "localhost:3306"...
Applying patch "phabricator:20160706.phame.blog.parentsite.1.sql" to host "localhost:3306"...
Applying patch "phabricator:20160707.calendar.01.stub.sql" to host "localhost:3306"...
Applying patch "phabricator:20160711.files.01.builtin.sql" to host "localhost:3306"...
.....
.....
Missing Key
phabricator_search search_documentfield corpus Surplus Key
phabricator_search search_documentfield key_corpus Missing Key
phabricator_worker worker_archivetask key_modified Missing Key
Applying schema adjustments...
Done.
Completed applying all schema adjustments.

8 查看数据库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
[root@Phabricator phabricator]# mysql -uroot -pqwde1dsdfg3.com
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 177
Server version: 5.5.52-MariaDB MariaDB Server
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------------+
| Database |
+--------------------------+
| information_schema |
| mysql |
| performance_schema |
| phabricator_almanac |
| phabricator_audit |
| phabricator_auth |
| phabricator_badges |
| phabricator_cache |
| phabricator_calendar |
| phabricator_chatlog |
| phabricator_conduit |
| phabricator_config |
| phabricator_conpherence |
| phabricator_countdown |
| phabricator_daemon |
| phabricator_dashboard |
| phabricator_differential |
| phabricator_diviner |
| phabricator_doorkeeper |
| phabricator_draft |
| phabricator_drydock |
| phabricator_fact |
| phabricator_feed |
| phabricator_file |
| phabricator_flag |
| phabricator_fund |
| ....... |
+--------------------------+
61 rows in set (0.01 sec)

❗️❗️注:upgrade之后,show databases你会发现建立了许多phabrictor开头的数据库。

###8.1 配置URL:

未配置此安装的基本URI,并且在配置之前,主要功能将无法正常工作。
您应该将基本URI设置为您将用于访问Phabricator的URI,如“http://phabricator.example.com/”。
如果使用的端口不是80(http)或443(https),请包括协议(http或https),域名和端口号。
基于此请求,正确的设置似乎是:http : //phabricator.ihaozhuo.com/
要配置基本URI,请运行以下命令。

1
2
[root@Phabricator phabricator]# ./bin/config set phabricator.base-uri 'http://phabricator.ihaozhuo.com/'
Set 'phabricator.base-uri' in local configuration.

9 设置防火墙

1
2
firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --reload

9.1 Phabricator Daemons Are Not Running

启动守护进程

1
phabricator/ $ ./bin/phd start

10 完成安装

配置phabricator:

1
2
3
cd /var/www/html/phabricator/
./bin/config set phabricator.base-uri 'http://your_domain_or_IP'
./bin/phd start

使用浏览器访问:http://your_domain_or_IP

然后根据提示修复一些问题。

登录进来管理界面:

创建项目例子:

Projects ——》 Create Project ——》填写好项目名称 ——》Create New Project

创建完成效果:

安装完成以后出现10多个问题解决:

汉化翻译过来:

❓说明:按问题提示操作解决故障。一般都有问题修复解决方法的,官方这点还是很不错的。

  • 棘手问题1 如果遇到这个问题:Alternate File Domain Not Configured

操作了这条命令失效 最好别操作:

1
2
3
phabricator/ $ ./bin/config set security.alternate-file-domain <domain>
[root@Phabricator phabricator]# ./bin/config set security.alternate-file-domain http://cdn.phabricator.com

如果是CDN数据存放可以使用这个命令。不然会出现访问失败。
我是参考这篇文档解决问题:Phabricator not rendering resources over https删除security.alternate-file-domain可以访问。

1
2
3
4
5
6
# yum install php-pear
# pecl install apc
# echo "extension=apc.so" >> /etc/php.ini
# echo "apc.enabled=1" >> /etc/php.ini
# cp /usr/share/pear/apc.php /var/www/html/apc.php (this step is optional)
# /etc/init.d/httpd restart

phabricator官网配置说明Configuration Guide

1. 身份验证提供者

Phabricator登录的方法被称为身份验证提供者(Authentication Providers)。例如,当我们设置了一个”用户名/密码”身份验证提供者,那么用户可以通过传统的用户名和密码登录。Phabricator支持多种登录系统。当我们使用Administrators登录到后台之后,我们就可以启用或禁用这些Providers,配置用户如何注册或登录到Phabricator。

在公司内部使用,我们一般使用Username/Password或LDAP,对于开源项目,我们也可以使用类似于GitHub等OAuth第三方登录。在使用Username/Password登录方式时,我们还可以限制注册用户时的邮箱后缀,我们可以设置成公司的邮箱域名。

1.1 修改登录方式

网页上可以对其进行相应的修改。具体位置在:
左侧菜单Auth -> Add Provider -> username/password(账号密码方式登录)
支持 账号密码登录以及第三方(facebook、github等)账号登录。另外,可以选择用户自主注册,或者禁用(管理员配置)。

这里选择LDAP同步需要安装PHP LDAP扩展:

1
2
3
Before you can set up or use LDAP, you need to install the PHP LDAP extension. It is not currently installed, so PHP can not talk to LDAP. Usually you can install it with `yum install php-ldap`, `apt-get install php5-ldap`, or a similar package manager command.
yum install php-ldap -y

注:如果第一次管理员登录以后,没有修改登录方式,接着退出。下次登录可能会被锁住,需要使用以下命令解锁。

1
/bin/auth recover <username>

1.2 设置用户登录认证方式

使用管理员账号登录,在左侧的菜单中选择 Auth ,然后点击右上侧 Add Provider,在列表中选则你需要的认证方式。

我选择是Username/Password的方式,即用户自己注册Phabricator账号。为了保障安全,我设置了只允许公司邮箱地址注册:Config ---> Core Settings ---> Authentication ---> auth.email-domains。你还可以选择 auth.require-approval ,即新注册用户需要管理员批准。

1.3 设置邮件发送服务参数

首先,配置 mail-adapter (邮件发送方式):Config ---> Core Settings ---> Mail ---> metamta.mail-adapter,我选择的是 PhabricatorMailImplementationPHPMailerAdapter ,通过SMTP的方式发送邮件。在选择完之后,需要设置SMTP服务器地址、账号和密码:Config —> Core Settings —> PHPMailer —> metamta.mail-adapter,根据你自己邮箱的配置,相应的设置 phpmailer.smtp-host、phpmailer.smtp-port、phpmailer.smtp-protocol、phpmailer.smtp-user、phpmailer.smtp-password、phpmailer.smtp-encoding 。

2.邮箱关联

切换到phabricator/bin/目录下运行daemon:./bin/phd start。 注意每次重启需要再次启用,因此建议放到启动脚本上。

配置mail:通过web访问phabricator并在页面上进行配置:(这里使用的是外部SMTP server的方式,更多方式参见phabricator docs)

用administrator账号登录后,在administration栏选择Config进入

1)选择mail,设置
metamta.default-address – xxxx@163.com // 注意:这里必须要用与smtp服务器对应的邮箱地址,不然邮件发不出去

metamta.domain -- phabricator.myproject.com // 随意

metamta.mail-adapter: set to "PhabricatorMailImplementationPHPMailerAdapter"

metamta.send-immediately: Send Via Daemons (目前版本貌似没有)

2)选择PHPMailer,设置:(以163.com的SMTP server为例)
phpmailer.mailer: set to “smtp”. (默认)

phpmailer.smtp-host: smtp.163.com 

phpmailer.smtp-port: 25 (默认)

phpmailer.smtp-user: xxxx

phpmailer.smtp-password: xxxx

目前版本页面上不能配置PHPMailer,只能使用工具/bin/config工具set相对应的配置项。

1
2
3
phabricator/ $ ./bin/mail list-outbound # List outbound mail.
phabricator/ $ ./bin/mail show-outbound # Show details about messages.
phabricator/ $ ./bin/mail send-test # Send test messages.

3. 参考:

https://www.oschina.net/question/191440_125562 Phabricator入门手册

http://blog.csdn.net/zzllabcd/article/details/49997421 10.04Ubuntu安装

http://www.cnblogs.com/clovn/p/5103611.html debian7安装

https://secure.phabricator.com/book/phabricator/article/installation_guide/ 官方guider

https://liuzhichao.com/p/1992.html Phabricator 实践之配置账号和注册

https://www.oschina.net/question/191440_125562 入门手册

http://www.jianshu.com/p/b1a75a14638c 简书中的分享(较为完整)

http://www.cnblogs.com/ToDoToTry/p/3956687.html git server搭建指南

https://my.oschina.net/miger/blog/775609 linux平台arc工具的使用

http://blog.csdn.net/peapon/article/details/29881575 windows中arc的使用