Quick Start
简介
本文介绍Phabricator的安装和配置过程,转至 https://www.jianshu.com/p/d7630e1fe4f9 ,作者 吴关山
Phabricator的安装过程比较繁琐,为了保证得到可靠的过程,步骤在以下公有云平台:
1 | 微软Azure国内 |
分别做了测试。
安装环境为:
1 | Ubuntu 16.04 Server |
以下分两个部分:
安装:Phabricator基本安装、运行和检验
配置:发邮件、基于SSH的Git仓库托管以及配置杂项等
安装
clone Phabricator项目文件
创建目录:
1 | sudo mkdir /var/www/pha |
clone相关项目:
1 | sudo git clone https://github.com/phacility/libphutil.git |
修改目录所有者,用nginx进程的用户,www-data
1 | sudo chown -R www-data:www-data /var/www/pha |
安装Nginx
使用Nginx官方源。命令如下:
1 | sudo apt-get install software-properties-common |
安装后,Nginx应自动启动,检查80端口是否正常:
1 | netstat -na | grep 80 |
应看到类似这样的结果:
1 | tcp6 0 0 :::80 :::* LISTEN |
如能找到,说明Nginx安装成功,如无法外网访问,检查防火墙设置。
有关防火墙的设置
后续安装配置,需要允许如下端口的外网访问:
22,将用于git ssh使用
80,默认http
443,https,phabricator正式环境端口
2222,ssh登录端口
安装PHP环境
Phabricator不支持PHP7.0版本,需要安装7.1版本:
1 | sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php |
修改fpm的配置:
1 | sudo vim /etc/php/7.1/fpm/pool.d/www.conf |
文件内容,在listen = /run/php/php7.1-fpm.sock之后加入2行:
1 | ; Note: This value is mandatory. |
重启PHP:
1 | sudo service php7.1-fpm stop |
测试配置是否生效:
1 | netstat -na | grep 9000 |
如能显示,说明fpm正常启动:
1 | tcp6 0 0 :::9000 :::* LISTEN |
配置Nginx
域名比如是:p.mydomain.com,那么创建配置文件:/etc/nginx/conf.d/p.mydomain.com.conf,内容如下:
1 | server { |
安装和配置MySQL
安装:
1 | sudo apt install mysql-server |
提示输入root用户密码,在本例中,密码是:password
在phabricator目录下(git clone https://github.com/phacility/phabricator.git 的那个目录)执行命令,将mysql密码设置到phabricator:
1 | sudo ./bin/config set mysql.pass 'password' |
为phabricator创建mysql相关数据表:
1 | sudo ./bin/storage upgrade |
设置和重启Nginx
设置下phabricator的url
1 | sudo ./bin/config set phabricator.base-uri 'http://p.mydomain.com' |
Nginx重新加载:
1 | sudo service nginx reload |
设置管理员和认证方式
这时,浏览器应该可以访问Phabricator了:http://p.mydomain.com
作为第一个访问用户,可创建管理员账号。
注意,管理员不是标准用户。
如果能创建管理员,说明安装过程成功。
这时可以添加认证方式(Auth Provider)。phabricator提供了多种认证方式,其中最基本的是用户名/密码的provider。
作为管理员,访问Auth,选择Add Provider ,然后添加 Username/Password Provider即可。
安装过程到此基本结束,但还不能:
发送用户邀请邮件及其他通知邮件
创建git repository
下一部分将解决这些问题。
配置
发送邮件的基本配置
发送邮件的功能是必须配置的,否则无法创建用户,因为需要通过邮件发送邀请通知。
执行如下命令,设置发送邮件邮箱配置:
1 | sudo ./bin/config set metamta.default-address robot@mydomain.com |
这里使用的是qq企业邮箱配置的。
设置完毕,检查是否可以发送邮件:
1 | ./bin/mail send-test --to myname@qq.com --subject hello <README.md |
如果能收到邮件,说明邮箱配置正确。
配置和自启动守护进程
phabricator有个任务队列,并运行一个守护进程,执行队列中的任务。可在 http://p.mydomain.com/daemon 中看到Active Daemons中还没有可用的守护进程。
phabricator守护进程,phd,主要负责:
git repository相关的操作
发送邮件
垃圾回收,如旧的日志和缓存
我们可以直接启动守护进程:
1 | sudo ./bin/phd start |
但是有问题:
- 当前用户权限过大
- 需要设置为自启动服务
创建phd用户
创建phd用户:
1 | sudo adduser phd --home /home/phd |
使phd用户不可远程登录:
1 | sudo usermod -p NP phd |
创建和启动phd自启动服务
创建systemd service文件/tmp/service.file:
1 | [Unit] |
将服务加入到systemd目录:
1 | sudo cp /tmp/service.file /lib/systemd/system/phabricator-phd.service |
使phabricator-phd.service可用:
1 | sudo systemctl enable phabricator-phd.service |
启动phabricator-phd.service服务:
1 | sudo systemctl start phabricator-phd |
如没有报错,访问:http://p.mydomain.com/daemon/ 可以看到Active Daemons不为空了。
将phd用户设置为phd.user:
1 | sudo ./bin/config set phd.user phd |
- 注:其他用户如需操作git命令,需要sudo为phd用户,上面的设置就是告诉它们需要sudo的用户名。
phd用户将守护进程跑起来后,就可以创建新用户了。通过管理员账号,选择people,添加standard用户。会收到邀请邮件,如果phd和邮箱配置都没问题的话。
用这个standard用户登录,并上传public key,后面要用到。
www-data用户的配置
如果将来要用到http git时,需要将www-data用户设置为可sudo为phd用户。
编辑/etc/sudoers,加入:
1 | www-data ALL=(phd) SETENV: NOPASSWD: /usr/lib/git-core/git-http-backend |
实际上,我们没有用到这个,我们用的是SSH Git。
配置SSH Git托管
准备工作
将当前SSH服务转移到2222端口,将来运行的Git SSH服务使用22端口。这是多次配置后,觉得后续比较方便的做法。否则,Git用户都要自定义端口,给开发/部署带来不必要的麻烦。
修改文件:
1 | sudo vim /etc/ssh/sshd_config |
将Port改为2222后重启ssh服务:
1 | sudo service ssh restart |
用2222端口ssh重新登录服务器:
1 | ssh -p2222 p.mydomain.com |
创建git用户
创建用户:
1 | sudo adduser git |
禁止登录:
1 | sudo usermod -p NP git |
设置git可以sudo为phd,修改/etc/sudoers,加入:
1 | git ALL=(phd) SETENV: NOPASSWD: /usr/bin/git-upload-pack, /usr/bin/git-receive-pack |
创建存放git repository的目录:
1 | sudo mkdir /var/repo |
改变目录所有者为phd:
1 | sudo chown -R phd /var/repo |
phabricator设置git-core路径:
1 | sudo ./bin/config set environment.append-paths '["/usr/lib/git-core"]' |
phabricator设置git用户:
1 | sudo ./bin/config set diffusion.ssh-user git |
创建git ssh hook配置文件
phabricator项目中提供了模版文件,将这个文件复制到需要的地方:
1 | sudo cp /var/www/pha/phabricator/resources/sshd/phabricator-ssh-hook.sh /usr/lib/phabricator-ssh-hook.sh |
修改文件权限:
1 | sudo chmod 755 /usr/lib/phabricator-ssh-hook.sh |
修改hook文件:
1 | sudo vim /usr/lib/phabricator-ssh-hook.sh |
文件内容:
1 |
|
创建git ssh配置文件
phabricator也提供了模版文件,复制到需要的地方:
1 | sudo cp /var/www/pha/phabricator/resources/sshd/sshd_config.phabricator.example /etc/ssh/sshd_config.phabricator |
修改sshd_config.phabricator文件:
1 | sudo vim /etc/ssh/sshd_config.phabricator |
文件内容:
1 | # NOTE: You must have OpenSSHD 6.2 or newer; support for AuthorizedKeysCommand |
启动git ssh及测试
这个步骤,是为了检查前面2个文件是否正确。正式启动git ssh需要后面使用systemd的自启动服务方式。
启动git ssh服务:
1 | sudo /usr/sbin/sshd -f /etc/ssh/sshd_config.phabricator |
在客户端终端命令行下:
1 | echo {} | ssh git@p.mydomain.com conduit conduit.ping |
如果出现:
1 | {"result":"hello","error_code":null,"error_info":null} |
就说明成功了。
可能出现的错误:
没有将客户端的public key上传到phabricator,或者不匹配
各种服务器端配置问题,包括用户权限问题
针对服务器端配置问题,可这样启动git ssh服务,参照debug信息一般能找到问题:
1 | sudo /usr/sbin/sshd -d -d -d -f /etc/ssh/sshd_config.phabricator |
或者可阅读官方文档Diffusion User Guide: Repository Hosting的Troubleshooting SSH部分。
这时,需要杀掉当前启动的phd服务,因为后面要设置自动启动它。
设置git ssh自启动服务
复制ssh的服务文件,作为git ssh服务的模版:
1 | sudo cp /lib/systemd/system/ssh.service /lib/systemd/system/phabricator-ssh.service |
修改phabricator-ssh.service:
1 | [Unit] |
即,修改1行(见代码注释),另外,删除最后一行Alias=sshd.service。
然后:
1 | sudo systemctl enable phabricator-ssh |
再次在客户端测试,如果没有问题,基本上就配置好了。
配置杂项
可以在:http://p.mydomain.com/config/issue/ 查看配置上的问题,并根据建议做相应修改。
以下给出一些常用的配置情况。
语法高亮
安装pigment:
1 | sudo apt install -y python-pygments |
phabricator打开pygments功能:
1 | sudo ./bin/config set pygments.enabled true |
最大下载文件限制
编辑php配置文件:
1 | sudo vim /etc/php/7.1/fpm/php.ini |
找到这行并改为:
1 | post_max_size = 100M |
修改Nginx配置文件:
1 | sudo vim /etc/nginx/nginx.conf |
在http块中加入:
1 | client_max_body_size 100m; |
因为默认使用mysql存储,还需要修改对mysql存储的限制,默认是1M,执行命令:
1 | sudo ./bin/config set storage.mysql-engine.max-size 104857600 |
重启Nginx。
增加邮件地址时的报错处理
在添加邮件地址时出现了这样的报错:
1 | Unhandled Exception ("AphrontQueryException") |
原因是sql_mode的限制,可连接msyql:
1 | mysql -u root -ppassword |
然后:
1 | SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); |
这一问题,也可能会出现在有类似数据库操作的地方。
最后,贴一个配置
1 | { |
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !