Phabricator部署⼿册
概述
phabricator,由facebook公司开发,是⼀个开源的代码审查系统,帮助软件公司建⽴更好的软件。该系统能够部署在多数linux发⾏版以
及os x系统上。本⽂档仅是该系统部署的⼀个简单指导,详细内容请查看官⽹说明和解释,本说明的部署仅针对Ubuntu 14.04 LTS版本操作系统。
安装
脚本
安装时,需要先选定安装路径,因为安装脚本是默认使⽤当前⼯作路径安装的,当然,你也可以修改脚本上的安装路径。
启动安装脚本,按照提⽰⼀步⼀步的执⾏。安装时会检查系统是否已安装必须的组件(MYSQL、APACHE2等),如果没有安装,则脚本会⾃动安装。安装到最后会提⽰是否修复问题(Fix issue),选择修复并继续执⾏,执⾏完成后,即已安装完成。
安装过程中会从github中克隆出该系统的源码和相关⽂件,这个过程可能会⽐较耗时,需要耐⼼等待。
安装完成后安装⽬录会出现⼀个phabricator⽬录,该⽬录包含了该系统的所有⽂件以及源码。安装完成后请检查MySQL以及Apache2是否安装成功,以及服务是否可以正常启动。
部署webserver
Phabricator安装完成后需要将其使⽤Apache2部署,部署时应该特别注意配置,在不同的操作系统中配置项以及配置⽂件可能不同,这⾥使⽤的是Ubuntu 14.04 LTS版本的Apache2 2.4.7版本。在/etc/apache2⽬录需要注意如下路径:
sites-avaliable:web站点虚拟主机的配置⽂件存在路径。
sites-enabled:sites-avaliable配置⽂件对应的连接⽂件路径。
如果使⽤默认路径时需要在sites-avaliable路径下禁⽤默认的虚拟主机,此时对应的连接⽂件将会被删除;启⽤新的虚拟主机时需要创建对应的连接⽂件。
禁⽤虚拟主机:sudo f
启⽤虚拟主机:sudo f
下⾯是⼀个典型的配置例⼦:
<VirtualHost *:20001>
# Change this to the domain which points to your host.
ServerName ktphabricator
# 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/f配置⽂件中。
需要注意的是,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,具体的邮箱服务请参考官⽅说明。
phpmailer.smtp-port:  设置smto服务器对应的端⼝。多数SMTP服务器默认端⼝时25,如果有特殊的,请参考官⽅说明。
phpmailer.smtp-user: 设置⽤户名。如果你使⽤的是qq邮箱,那么此处应该设定为你的qq号码。
phpmailer.smtp-password: 设置密码。
phpmailer.smtp-protocol:smtp通信⽅式,tls或者ssl,如果选择其中⼀种的话,需要设置phpmailer.smtp-port为对应的端⼝号。默认这⾥不选择,使⽤25端⼝。
上⾯设置完成后还需要设置参数,即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-
urcompany。
现在,为了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 chmod755 /path/to/phabricator-ssh-hook.sh
如果你不做这些事情,sshd将会拒绝执⾏钩⼦命令。
2、创建Phabricator的 sshd_config 配置⽂件在  phabricator/resources/sshd/sshd_
ample 拷贝模板
到 /etc/ssh/sshd_config.phabricator(或者其他路径)。
打开这个⽂件,然后修改 AuthorizedKeysCommand 和 AuthorizedKeysCommandUser 来适配你当前使⽤的系统。git设置用户名和邮箱
该⽂件中保存有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守护进程