ubuntu install phabricator

下载 phabricator

创建文件夹
mkdir -pv /opt/www/pha
cd /opt/www/pha
将源码拉下来
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
cd ..
sudo chown -R www-data:www-data /opt/www/pha

安装php环境 version>7.0

sudo LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php

sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php
apt update
sudo apt install git mysql-server apache2 libapache2-mod-php php php-mysql php-gd php-curl php-apcu php-cli php-json php-mbstring

sudo apt install git php php-mysql php-gd php-curl php-apcu php-cli php-json php-mbstring

安装 php-fpm

apt install php-fpm

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

chmod 666 /run/php/php7.3-fpm.sock

测试 php-fpm 配置是否生效
ps -ef|grep fpm
netstat -an|grep 9000

fpm + nginx 有两种配置方式,分别是 tcpunix domain socket, 如果 nginxphp-fpm 在同一台机器,推荐使用 unix domain socket 方式,效率更高。 php7.3-fpm

user = www-data
group = www-data
#listen = /run/php/php7.2-fpm.sock
listen = 9000
listen.allowed_clients = 127.0.0.1 # 增加

nginx 采用 docker-compose 配置, pha.xqghp.com.conf

server {
    listen 80;
    server_name pha.xqghp.com;
    root        /opt/www/pha/phabricator/webroot; # 配置根目录

    location / {
        index index.php;
        rewrite ^/(.*)$ /index.php?__path__=/$1 last;
    }

    location /index.php {
        fastcgi_pass    unix:/run/php/php7.3-fpm.sock;
        #fastcgi_pass    127.0.0.1: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;
    }

    access_log /var/log/nginx/access_manage.log main;
}

配置 phabricator

./bin/config  set mysql.pass pilot123
./bin/config  set mysql.user
./bin/config  set mysql.user root
./bin/config  set mysql.port 3377
./bin/config  set mysql.host 127.0.0.1
./bin/config  set phabricator.base-uri http://pha.xqghp.com

创建数据库
./bin/storage upgrade
销毁数据库
./bin/storage destory

reset password

/opt/www/pha/phabricator/bin/auth recover xqghp

conf/local/local.json

{
    "metamta.default-address": "xqghp@xqghp.com",
    "cluster.mailers": [
        {
            "key": "stmp-mailer",
            "type": "smtp",
            "options": {
                "host": "smtp.exmail.qq.com",
                "port": 465,
                "user": "xqghp@xqghp.com",
                "password": "password",
                "protocol": "ssl"
            }
        }
    ],
    "phabricator.base-uri": "http://pha.xqghp.com",
    "mysql.host": "127.0.0.1",
    "mysql.port": "3377",
    "mysql.user": "root",
    "mysql.pass": "pilot123"
}

配置

配置出站邮箱

./bin/config metamta.default-address xqghp@xqghp.com

/opt/www/pha/phabricator/bin/config set cluster.mailers --stdin < mailers.json

[
   {
       "key": "stmp-mailer",
       "type": "smtp",
       "options": {
           "host": "smtp.exmail.qq.com",
           "port": 465,
           "user": "xqghp@xqghp.com",
           "password": "password",
           "protocol": "ssl"
       }
   }
]

测试邮件发送
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.

phabricator/ $ ./bin/mail send-test --to xqghp@126.com --subject hello <README.md

配置和自启动守护进程

./bin/phd start
./bin/phd stop

但是有问题:

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

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

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

创建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=/opt/www/pha/phabricator/bin/phd start
ExecStop=/opt/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://pha.xqghp.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 可以 sudophd ,修改 /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 /opt/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 /opt/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

journalctl -xefu phabricator-ssh

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

配置杂项

可以在:http://pha.xqghp.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',''));

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

参考
Phabricator User Documentation
Phabricator安装和配置过程记录

  • qq_43638135
    妲己再美究为妃: 博主没有想过自己接一些私活干吗?我现在还没毕业,但是我也确实听说外挂市场自动化游戏脚本市场挺火热的,并且报酬也很丰厚,但是具体的我也不是很清楚,求解答。 (1个月前 #47楼) 查看回复(2) 举报 回复
    22