前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Phabricator安装和配置过程记录

Phabricator安装和配置过程记录

作者头像
音视频_李超
发布2020-04-03 17:28:59
4.1K0
发布2020-04-03 17:28:59
举报

简介

本文介绍Phabricator的安装和配置过程。

Phabricator的安装过程比较繁琐,为了保证得到可靠的过程,步骤在以下公有云平台:

  • 微软Azure国内
  • 阿里云国内
  • AWS首尔

分别做了测试。

安装环境为:

  • Ubuntu 16.04 Server
  • Nginx
  • PHP7.1
  • MySQL

以下分两个部分:

  • 安装:Phabricator基本安装、运行和检验
  • 配置:发邮件、基于SSH的Git仓库托管以及配置杂项等

安装

clone Phabricator项目文件

创建目录:

sudo mkdir /var/www/pha

clone相关项目:

sudo git clone https://github.com/phacility/libphutil.git
sudo git clone https://github.com/phacility/arcanist.git
sudo git clone https://github.com/phacility/phabricator.git

修改目录所有者,用nginx进程的用户,www-data

sudo chown -R www-data:www-data /var/www/pha

安装Nginx

使用Nginx官方源。命令如下:

sudo apt-get install software-properties-common
sudo add-apt-repository ppa:nginx/stable
sudo apt-get update
sudo apt install -y nginx

安装后,Nginx应自动启动,检查80端口是否正常:

netstat -na | grep 80

应看到类似这样的结果:

 tcp6       0      0 :::80                   :::*                    LISTEN

如能找到,说明Nginx安装成功,如无法外网访问,检查防火墙设置。


有关防火墙的设置

后续安装配置,需要允许如下端口的外网访问:

  • 22,将用于git ssh使用
  • 80,默认http
  • 443,https,phabricator正式环境端口
  • 2222,ssh登录端口

安装PHP环境

Phabricator不支持PHP7.0版本,需要安装7.1版本:

sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get -y install php7.1 php7.1-mysql php7.1-fpm php7.1-curl php7.1-xml php7.1-mcrypt php7.1-json php7.1-gd php7.1-mbstring

修改fpm的配置:

sudo vim /etc/php/7.1/fpm/pool.d/www.conf

文件内容,在listen = /run/php/php7.1-fpm.sock之后加入2行:

…
; Note: This value is mandatory.
listen = /run/php/php7.1-fpm.sock
listen = 9000 # 增加
listen.allowed_clients = 127.0.0.1 # 增加
...

重启PHP:

sudo service php7.1-fpm stop
sudo service php7.1-fpm start

测试配置是否生效:

netstat -na | grep 9000

如能显示,说明fpm正常启动:

tcp6       0      0 :::9000                 :::*                    LISTEN

配置Nginx

域名比如是:p.mydomain.com,那么创建配置文件:/etc/nginx/conf.d/p.mydomain.com.conf,内容如下:

server {
  server_name p.mydomain.com; # 配置域名
  root        /var/www/pha/phabricator/webroot; # 配置根目录

  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;
  }
}

安装和配置MySQL

安装:

sudo apt install mysql-server

提示输入root用户密码,在本例中,密码是:password

在phabricator目录下(git clone https://github.com/phacility/phabricator.git 的那个目录)执行命令,将mysql密码设置到phabricator:

sudo ./bin/config set mysql.pass 'password'

为phabricator创建mysql相关数据表:

sudo ./bin/storage upgrade

设置和重启Nginx

设置下phabricator的url:

sudo  ./bin/config set phabricator.base-uri 'http://p.mydomain.com'

Nginx重新加载:

sudo service nginx reload

设置管理员和认证方式

这时,浏览器应该可以访问Phabricator了:http://p.mydomain.com

作为第一个访问用户,可创建管理员账号。

注意,管理员不是标准用户。

如果能创建管理员,说明安装过程成功。

这时可以添加认证方式(Auth Provider)。phabricator提供了多种认证方式,其中最基本的是用户名/密码的provider。

作为管理员,访问Auth,选择Add Provider ,然后添加 Username/Password Provider即可。

安装过程到此基本结束,但还不能:

  • 发送用户邀请邮件及其他通知邮件
  • 创建git repository

下一部分将解决这些问题。


配置

发送邮件的基本配置

发送邮件的功能是必须配置的,否则无法创建用户,因为需要通过邮件发送邀请通知。

执行如下命令,设置发送邮件邮箱配置:

sudo ./bin/config set metamta.default-address robot@mydomain.com
sudo ./bin/config set metamta.domain mydomain.com
sudo ./bin/config set metamta.can-send-as-user false
sudo ./bin/config set metamta.mail-adapter PhabricatorMailImplementationPHPMailerAdapter
sudo ./bin/config set phpmailer.mailer smtp
sudo ./bin/config set phpmailer.smtp-host smtp.exmail.qq.com
sudo ./bin/config set phpmailer.smtp-port 465
sudo ./bin/config set phpmailer.smtp-user robot@mydomain.com
sudo ./bin/config set phpmailer.smtp-password my_password
sudo ./bin/config set phpmailer.smtp-protocol SSL

这里使用的是qq企业邮箱配置的。

设置完毕,检查是否可以发送邮件:

./bin/mail send-test --to myname@qq.com --subject hello <README.md

如果能收到邮件,说明邮箱配置正确。


配置和自启动守护进程

phabricator有个任务队列,并运行一个守护进程,执行队列中的任务。可在 http://p.mydomain.com/daemon 中看到Active Daemons中还没有可用的守护进程。

phabricator守护进程,phd,主要负责:

  • git repository相关的操作
  • 发送邮件
  • 垃圾回收,如旧的日志和缓存

我们可以直接启动守护进程:

sudo ./bin/phd start

但是有问题:

  • 当前用户权限过大
  • 需要设置为自启动服务

创建phd用户

创建phd用户:

sudo adduser phd --home /home/phd

使phd用户不可远程登录:

sudo usermod -p NP phd

创建和启动phd自启动服务

创建systemd service文件/tmp/service.file

[Unit]
Description=phabricator-phd
After=syslog.target network.target mysql.service
Before=nginx.service

[Service]
Type=oneshot
User=phd
Group=phd
Enviroment="PATH=/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin"
ExecStart=/var/www/pha/phabricator/bin/phd start
ExecStop=/var/www/pha/phabricator/bin/phd stop
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

将服务加入到systemd目录:

sudo cp /tmp/service.file /lib/systemd/system/phabricator-phd.service

使phabricator-phd.service可用:

sudo systemctl enable phabricator-phd.service

启动phabricator-phd.service服务:

sudo systemctl start phabricator-phd

如没有报错,访问:http://p.mydomain.com/daemon/ 可以看到Active Daemons不为空了。

phd用户设置为phd.user:

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,加入:

www-data ALL=(phd) SETENV: NOPASSWD: /usr/lib/git-core/git-http-backend

实际上,我们没有用到这个,我们用的是SSH Git。


配置SSH Git托管

准备工作

将当前SSH服务转移到2222端口,将来运行的Git SSH服务使用22端口。这是多次配置后,觉得后续比较方便的做法。否则,Git用户都要自定义端口,给开发/部署带来不必要的麻烦。

修改文件:

sudo vim /etc/ssh/sshd_config

Port改为2222后重启ssh服务:

sudo service ssh restart

用2222端口ssh重新登录服务器:

ssh -p2222 p.mydomain.com 

创建git用户

创建用户:

sudo adduser git

禁止登录:

sudo usermod -p NP git

设置git可以sudo为phd,修改/etc/sudoers,加入:

git ALL=(phd) SETENV: NOPASSWD: /usr/bin/git-upload-pack, /usr/bin/git-receive-pack

创建存放git repository的目录:

sudo mkdir /var/repo

改变目录所有者为phd:

sudo chown -R phd /var/repo
sudo chgrp -R phd /var/repo

phabricator设置git-core路径:

sudo ./bin/config set environment.append-paths '["/usr/lib/git-core"]'

phabricator设置git用户:

sudo ./bin/config set diffusion.ssh-user git

创建git ssh hook配置文件

phabricator项目中提供了模版文件,将这个文件复制到需要的地方:

sudo cp /var/www/pha/phabricator/resources/sshd/phabricator-ssh-hook.sh /usr/lib/phabricator-ssh-hook.sh

修改文件权限:

sudo chmod 755 /usr/lib/phabricator-ssh-hook.sh

修改hook文件:

sudo vim /usr/lib/phabricator-ssh-hook.sh

文件内容:

#!/bin/sh

# NOTE: Replace this with the username that you expect users to connect with.
VCSUSER="git"  # 配置

# NOTE: Replace this with the path to your Phabricator directory.
ROOT="/var/www/pha/phabricator" # 配置

if [ "$1" != "$VCSUSER" ];
then
  exit 1
fi

exec "$ROOT/bin/ssh-auth" $@

创建git ssh配置文件

phabricator也提供了模版文件,复制到需要的地方:

sudo cp /var/www/pha/phabricator/resources/sshd/sshd_config.phabricator.example /etc/ssh/sshd_config.phabricator

修改sshd_config.phabricator文件:

sudo vim /etc/ssh/sshd_config.phabricator

文件内容:

# NOTE: You must have OpenSSHD 6.2 or newer; support for AuthorizedKeysCommand
# was added in this version.

# NOTE: Edit these to the correct values for your setup.

AuthorizedKeysCommand /usr/lib/phabricator-ssh-hook.sh  # 配置
AuthorizedKeysCommandUser git # 配置
AllowUsers git # 配置

# You may need to tweak these options, but mostly they just turn off everything
# dangerous.

Port 22 # 配置
Protocol 2
PermitRootLogin no
AllowAgentForwarding no
AllowTcpForwarding no
PrintMotd no
PrintLastLog no
PasswordAuthentication no
AuthorizedKeysFile none

PidFile /var/run/sshd-phabricator.pid

启动git ssh及测试

这个步骤,是为了检查前面2个文件是否正确。正式启动git ssh需要后面使用systemd的自启动服务方式。

启动git ssh服务:

sudo /usr/sbin/sshd -f /etc/ssh/sshd_config.phabricator

在客户端终端命令行下:

echo {} | ssh git@p.mydomain.com conduit conduit.ping

如果出现:

{"result":"hello","error_code":null,"error_info":null}

就说明成功了。

可能出现的错误:

  • 没有将客户端的public key上传到phabricator,或者不匹配
  • 各种服务器端配置问题,包括用户权限问题

针对服务器端配置问题,可这样启动git ssh服务,参照debug信息一般能找到问题:

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服务的模版:

sudo cp /lib/systemd/system/ssh.service /lib/systemd/system/phabricator-ssh.service

修改phabricator-ssh.service:

[Unit]
Description=OpenBSD Secure Shell server
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run

[Service]
EnvironmentFile=-/etc/default/ssh
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS -f /etc/ssh/sshd_config.phabricator # 修改
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify

[Install]
WantedBy=multi-user.target

即,修改1行(见代码注释),另外,删除最后一行Alias=sshd.service

然后:

sudo systemctl enable phabricator-ssh
sudo systemctl start phabricator-ssh

再次在客户端测试,如果没有问题,基本上就配置好了。


配置杂项

可以在:http://p.mydomain.com/config/issue/ 查看配置上的问题,并根据建议做相应修改。

以下给出一些常用的配置情况。

语法高亮

安装pigment:

sudo apt install  -y python-pygments

phabricator打开pygments功能:

sudo ./bin/config set pygments.enabled true

最大下载文件限制

编辑php配置文件:

sudo vim /etc/php/7.1/fpm/php.ini

找到这行并改为:

post_max_size = 100M

修改Nginx配置文件:

sudo vim /etc/nginx/nginx.conf

在http块中加入:

client_max_body_size 100m;

因为默认使用mysql存储,还需要修改对mysql存储的限制,默认是1M,执行命令:

sudo ./bin/config set storage.mysql-engine.max-size 104857600

重启Nginx。


增加邮件地址时的报错处理

在添加邮件地址时出现了这样的报错:

Unhandled Exception ("AphrontQueryException")   
#1055: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'phabricator_system.system_actionlog.actorIdentity' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

原因是sql_mode的限制,可连接msyql:

mysql -u root -ppassword

然后:

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

这一问题,也可能会出现在有类似数据库操作的地方。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 安装
    • clone Phabricator项目文件
      • 安装Nginx
        • 有关防火墙的设置
          • 安装PHP环境
            • 配置Nginx
              • 安装和配置MySQL
                • 设置和重启Nginx
                  • 设置管理员和认证方式
                  • 配置
                    • 发送邮件的基本配置
                      • 配置和自启动守护进程
                        • 创建phd用户
                        • 创建和启动phd自启动服务
                        • www-data用户的配置
                        • 配置SSH Git托管
                        • 配置杂项
                    相关产品与服务
                    云数据库 MySQL
                    腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档