介绍
phabricator不止具有codereview功能,他是一个全家桶,还包含项目管理和wiki,还能聊天
必备环境
php安装(必须)
注:php版本必须要5.5以上,php72w-fpm是如果web服务器选择nginx的话,搭配使用
yum install php72w php72w-mysqlnd php72w-mbstring php72w-gd php72w-curl php72w-cli php72w-common php72w-process
php72w-fpm php72w-pecl-apcu
phacility代码下载(必须)
git clone https://github.com/phacility/arcanist.git
git clone https://github.com/phacility/phabricator.git
语法高亮配置(非必须)——版本对比的预发高亮
yum install python-pygments
webserver安装(必须)
1).Apache +mod_php
2). nginx +php-fpm
3).lighttpd
4)PHP Builtin Server
5)或者其他能运行php的web服务器
我使用的是nginx,用dokcer或者yun安装都可以,yum install nginx或者docker run nginx
mysql(必须)
1.MySQL 版本必须5.5以上,mysql8.0以上数据库连接的密码认证方式变了,Mysql8.0默认采用了新的caching_sha2_password的身份验证方式如果要使用mysql8.0以上,必须使用php8.0以上;如果使用mysql8.0以下,必须使用php7.4以及以下;
2.如果想用mysql8.0,php版本比较低,那就单独创建一个用户使用老的密码认证方式,同时给这个用户授权 CREATE USER 'phabricator'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; GRANT ALL ON *.* TO 'phabricator'@'%';
yum install mysql或者docker run mysql
必知概念,对于服务端安装后运行非常重要
创建用户
www-data用户,就是运行webserver服务的用户,如果使用php-fpm,用root账户启动php-fpm,默认会创建一个apache用户,这个apache就是这个webserver服务对应的用户;
daemon-user用户,就是phabricator的守护进程,运行phd进程的用户,用来收发邮件,或者导入gitlab之类的代码,垃圾回收,日志清理等都是靠这个进程执行,排队执行,跟定时任务有点像;
vcs-user用户,就是clone代码如果要用ssh连接需要;ssh连接像vcs-user@phabricator.yourcompany.com;
注;
1.如果用http方式clone代码可以不用创建vcs-user,www-data用户如果使用php-fpm,也可以不用创建,默认会创建;phd用户必须创建;
2.vcs-user与www-data用户都需要sudo到phd用户来与代码存储库交互;
修改sudoers,sudoers默认只有读的权限,chmod 755 sudoers; vim /etc/sudoers;修改完再收回sudoers的权限 chmod u-w sudoers
在sudoers,sudoers加入这两行,如果不用ssh,不用加vcs-user,/path/to/x是vcs-user与www-data用户需要执行二进制文件对应的路径;
sudoers配置修改完webserver服务和phd进程需要重启才生效
www-user ALL=(daemon-user) SETENV: NOPASSWD: /path/to/x, /path/to/y, ... vcs-user ALL=(daemon-user) SETENV: NOPASSWD: /path/to/x, /path/to/y, ...
www-user和vcs-user所属的组最好也配置下,不然切换daemon-user执行可能还需要输入密码
www-user用户所在组 ALL=(daemon-user) SETENV: NOPASSWD: /path/to/x, /path/to/y, ...
vcs-user用户所在组 ALL=(daemon-user) SETENV: NOPASSWD: /path/to/x, /path/to/y, ...
www-user需要执行的二进制文件, sudo到daemon-user:
- git (如果使用 Git)
- git-http-backend (如果使用Git)
- hg (如果使用 Mercurial)
- ssh (如果配置 clusters)
vcs-user需要执行的二进制文件, sudo到 daemon-user:
- git (如果使用 Git)
- git-upload-pack (如果使用 Git)
- git-receive-pack (如果使用 Git)
- hg (如果使用 Mercurial)
- svnserve (如果使用 Subversion)
- ssh (如果配置 clusters)
环境安装后的配置
php-fpm配置
php-fpm.ini修改监听端口,也可以使用默认的,不用改这个配置,改完重启php-fpm ; sercice php-fpm restart
nginx配置
在nginx的配置nginx.conf加入如下配置,然后重启; nginx -s reload;
server {
root /usr/local/phabricator/phabricator/webroot;
listen 9001;
client_max_body_size 2m;
location / {
index index.php;
rewrite ^/(.*)$ /index.php?__path__=/$1 last;
}
location /index.php {
fastcgi_pass localhost:9000;
fastcgi_index index.php;
#required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
#variables to make the $_SERVER populate in PHP
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
}
}
注:
1)./usr/local/phabricator/phabricator/webroot是git clone https://github.com/phacility/phabricator.git的代码里面有webroot,需要改成你自己下载这个webroot目录;
2).fastcgi_pass这个端口对应上面的配置php-fpm的端口
配置phd
配置文件/conf/local/local.json,phd服务的日志文件在/var/tmp/phd/log/daemons.log,启动有问题可以看这个日志文件,下面执行命令也是在修改这个配置文件,修改完phd的配置,要重启,./bin/phd restart
进去git clone https://github.com/phacility/phabricator.git的目录,可以看到有个bin目录;
配置连接mysql的用户名和密码和host
./bin/config set mysql.host localhost
./bin/config set mysql.port 3306
./bin/config set mysql.user root
./bin/config set mysql.pass ******
./bin/storage upgrad
配置邮箱
在/conf/local/local.json加入下面这一段
"cluster.mailers": [
{
"key": "my-mailer", #随便定一个名字即可
"type": "smtp",
"options": {
"host": "smtp.xx.com", #邮箱的smtp服务
"port": 465, #由于我使用的ssl,所以是465.这个看邮箱服务商的说明
"user": "xxx", #发信邮箱
"password": "xxx", #发信邮箱的smtp授权码不是登录密码
"protocol": "ssl"
}
}
],
"metamta.default-address": "xxx",
测试邮箱配置是否正确,尝试发送邮件 ./mail send-test --to xxxx@xxx.com --subject hello <README.md,如果执行无错误,就是配置正确
配置http下载代码
,如果要使用ssh下载代码,不用配置;配置完,phabricator服务页面会显示一个vsc密码选项,这个是用来配置你下载代码的密码
1). ./bin/config set
diffusion.allow-http-auth true;
2). ./bin/config set environment.append-paths '["/bin","/usr/bin","/usr/local/bin","/usr/libexec/git-core"]' ,/usr/libexec/git-core这个目录是git-http-backend二进制所在目录,修改为你自己的目录
配置phd的运行用户
./bin/config set
phd.user daemon-user
配置uri
./bin/config set
phabricator.base-uri http://xxx.xxx.xxx.xxx:9001;这个端口跟nginx配置的listen端口一致,如果不一致,页面展示没有样式;
创建代码库并配置
mkdir /var/repo
./bin/config set repository.default-local-path '/var/repo'
chown -R daemon-user /var/tmp/phd chown -R daemon-user /var/repo
chmod -R 755 daemon-user /var/repochmod -R 755 daemon-user /var/repo
daemon-user这个也就是phd进程对应的用户一定要有这两个目录的操作权限
使用
登录phabricator服务的网站,我配置的是http://127.0.0.1:9001
按步骤解决感叹号里的问题
设置php的时区,编码,有些有问题可以不用解决,看自己的情况
创建仓库
如果代码托管在gitlab还是要创建仓库,没有代码的话,那使用跟gitlab,创建完仓库,往上面提交代码就行,创建完仓库一定要启用
如果代码托管在gitlab,想使用phabricator,uris里面新建一个,填写gitlab的clone地址,io模式设置为observe,仓库激活就会去拉代码到phabricator的仓库;如果后面gitlab不适用了,等拉取结束就把io模式设置为no i/o;如果gitlab还要使用,就把io模式设置为mirror i/o模式,phabricator会把代码同步到gitlab,gitlab相当于只是个存储库里,使用者提交代码到phabricator,phabricator再同步到gitlab;
注:
1):如果同步有问题,可以看下phd这个守护进程的操作日志,同时进入mysql查看phabricator_repository.repository_pullevent这张表可以看到错误原因;
2)通过http下载代码,还要在web页面里设置,config--> all settings-->diffusion.allow-http-auth-->点开,设置值为:Allow HTTP Basic Auth
官方文档
我写的所有安装步骤官方文档里都有,还有不清楚的请看官方文档,phabricator使用的是2022最新的代码,如果是老代码或者更新的代码可能配置会存在差异,建议看官方文档;
建议要使用别人的dokcer镜像来运行前,官方目前没有镜像,一定要自己按操作步骤先安装遍,不然docker镜像运行报错都解决不了