怎样在 CentOS 7 上安装和配置 Phabricator

Phabricator 是一个先进的开源软件开发平台,可用于:

  • 审查和审计代码。
  • 托管 Git/Hg/SVN 存储库。
  • 跟踪错误。
  • 管理项目。
  • 与团队成员沟通。
  • 并且做得更多!

由于其丰富的功能和卓越的性能,Phabricator 在开源软件社区中越来越受欢迎。

在本文中,我将向您展示怎样在 Vultr CentOS 7 服务器实例上安装 Phabricator。

先决条件

  • 从头开始部署一个 Vultr CentOS 7 服务器实例;
  • 使用非 root 从 SSH 终端登录 sudo 用户。

第一步:系统更新

更新你的 CentOS 7 系统,然后重启:

yum update -y && shutdown -r now

系统启动后,以非 root 用户身份登录 sudo 使用权。

第 2 步:安装 MariaDB

安装 MariaDB 服务器:

sudo yum install mariadb mariadb-server

启动并启用 MariaDB 服务:

sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service

出于安全考虑,请运行 MySQL 安全安装实用程序:

sudo /usr/bin/mysql_secure_installation

按照以下说明完成此过程:

Enter current password for root (enter for none): Enter
Set root password? [Y/n]: Y
New password:<your-password>
Re-enter new password:<your-password>
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y

第 3 步:安装 Apache

安装 Apache 使用 YUM 的网络服务器:

sudo yum install httpd

修改默认配置以增强安全性:

sudo sed -i 's/^/#&/g' /etc/httpd/conf.d/welcome.conf
sudo sed -i "s/Options Indexes FollowSymLinks/Options FollowSymLinks/" /etc/httpd/conf/httpd.conf

启动并启用 Apache 服务:

sudo systemctl start httpd.service
sudo systemctl enable httpd.service

第 4 步:安装 PHP

安装 PHP 和必要的扩展:

sudo yum install php php-mysqli php-mbstring php-gd php-curl php-cli php-common php-process

第五步:安装git

sudo yum install git

第 6 步:下载并安装 Phabricator

cd ~
mkdir phabricator
cd phabricator
git clone https://github.com/phacility/libphutil.git
git clone https://github.com/phacility/arcanist.git
git clone https://github.com/phacility/phabricator.git
cd ~
sudo chown -R apache: ~/phabricator
sudo mv ~/phabricator /var/www/html

第 7 步:为 Phabricator 设置虚拟主机

sudo vi /etc/httpd/conf.d/phabricator.conf

填充以下代码段:

笔记: 你需要更换 [email protected], phabricator.example.com, www.phabricator.example.com, /var/log/httpd/phabricator.example.com-error_log, 和 /var/log/httpd/phabricator.example.com-access_log 用你自己的价值观。

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot /var/www/html/phabricator/phabricator/webroot/
    ServerName phabricator.example.com
    ServerAlias www.phabricator.example.com
    RewriteEngine on
    RewriteRule ^/rsrc/(.*)     -                       [L,QSA]
    RewriteRule ^/favicon.ico   -                       [L,QSA]
    RewriteRule ^(.*)$          /index.php?__path__=$1  [B,L,QSA]
    <Directory /var/www/html/phabricator/phabricator/webroot/>
        AllowOverride All
    </Directory>
    ErrorLog /var/log/httpd/phabricator.example.com-error_log
    CustomLog /var/log/httpd/phabricator.example.com-access_log common
</VirtualHost>

Save 并退出:

:wq

重新启动 Apache 服务以使您的修改生效:

sudo systemctl restart httpd.service

第 8 步:为 Phabricator 设置 MariaDB 凭据

在使用 Phabricator 之前,您需要设置 MariaDB 凭据:

cd /var/www/html/phabricator/phabricator/
sudo ./bin/config set mysql.host localhost
sudo ./bin/config set mysql.port 3306
sudo ./bin/config set mysql.user root
sudo ./bin/config set mysql.pass <your-MySQL-root-password>

填充 Phabricator 计划:

./bin/storage upgrade

在此过程中,您需要输入两次“y”:

Before running storage upgrades, you should take down the Phabricator web
interface and stop any running Phabricator daemons (you can disable this
warning with --force).

    Are you ready to continue? [y/N] y

...

MySQL needs to copy table data to make some adjustments, so these migrations may take some time.

    Fix these schema issues? [y/N] y

第 9 步:修改防火墙规则并设置 Phabricator admin 帐户

您需要允许默认 HTTP 端口 80 上的入站流量:

sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --reload

然后使用您的网络浏览器访问:

https://<your-Vultr-server-IP>

您将看到 Phabricator 注册网页。 创建管理员帐户进行日常管理。

现在,让我们看看怎样配置 Phabricator。

步骤 10:修复未解决的设置问题

在您可以安心使用 Phabricator 之前,您必须解决几个设置问题。 设置问题的数量各不相同,就我而言,有 16 个。让我们一一解决它们。

问题 1:未配置基本 URI

单击“未配置基本 URI”链接进入问题详细信息页面,您可以在其中了解有关此问题的更多信息。

为了解决这个问题,您需要在 SSH 终端上执行以下命令。 请务必使用正确的 IP 地址。

cd /var/www/html/phabricator/phabricator/
sudo ./bin/config set phabricator.base-uri 'https://<your-Vultr-server-IP>'

然后在您的 Web 浏览器中,单击问题详细信息页面上的“重新加载页面”按钮。 如果您的修复成功,页面上的文字将变为“问题已解决”。 单击“返回到未解决的问题列表”链接以调查其他问题。

问题 2:未配置身份验证提供程序

单击“未配置身份验证提供程序”链接以进入问题详细信息页面。

为了解决此问题,您需要指定身份验证提供程序。

点击“Auth Application”链接,然后点击“+ Add Provider”按钮进入“Add Auth Provider”页面。 选择合适的身份验证提供程序,然后单击“继续”按钮。 在这里我选择了“用户名/密码”。

在“添加身份验证提供者:用户名/密码”页面中,您可以查看更详细的设置,然后单击“添加提供者”按钮。

您可以以相同的方式添加更多身份验证提供程序,但现在,请单击“您有 X 个未解决的设置问题…”链接来处理其他问题。

问题 3:Phabricator 守护进程没有运行

单击“Phabricator Daemons Are Not Running”链接进入详细信息页面。

为了解决这个问题,请在您的 SSH 终端上运行以下命令:

cd /var/www/html/phabricator/phabricator/
./bin/phd start

单击“重新加载页面”按钮以确认结果。

问题 4:PHP post_max_size 未配置

在 SSH 终端上运行以下命令以解决此问题:

sudo sed -i "s/post_max_size = 8M/post_max_size = 32M/" /etc/php.ini
sudo systemctl restart httpd.service

单击“重新加载页面”按钮以确认您的修改。

问题 5-10:MySQL 相关问题

MySQL相关的问题一共有六个:

  • 小型 MySQL “maxallowedpacket”
  • MySQL STRICTALLTABLES 模式未设置
  • MySQL 正在使用默认停用词文件
  • MySQL 正在使用默认最小值 Word 长度
  • MySQL 使用默认的布尔语法
  • MySQL 可能运行缓慢

为方便起见,让我们一批修复它们。

在您的 SSH 终端上,使用以下命令编辑 MySQL 配置文件 vi

sudo vi /etc/my.cnf

在顶部的三行下:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

添加以下六行:

max_allowed_packet=32M
sql_mode=STRICT_ALL_TABLES
ft_stopword_file=/var/www/html/phabricator/phabricator/resources/sql/stopwords.txt
ft_min_word_len=3
ft_boolean_syntax=' |-><()~*:""&^'
innodb_buffer_pool_size=1600M        # about 40% of your system memory

警告: 您需要根据您的特定服务器大小设置适当的 Innodb 缓冲池大小。 通常,Innodb 缓冲池的大小应该是机器内存量的 40% 左右。 为了 example, 如果你使用的是4G内存的机器,合理的Innodb缓冲池大小为1600M。 如果您使用的机器内存很小(例如 768M),您可能需要分配小于机器内存量(例如 220M)的 40% 的大小,以便为系统节省更多内存。

Save 并退出:

:wq

重启 MariaDB 服务:

sudo systemctl restart mariadb.service

最后,运行以下命令:

mysql -u root -p -e "REPAIR TABLE phabricator_search.search_documentfield"

单击“重新加载页面”按钮以检查您的工作。

问题 11:安装 Pygments 以改进语法高亮

在 CentOS 7 上,Pygments 已安装但默认未启用,您需要手动启用它:

单击链接:编辑“pygments.enabled”,从“数据库值”下拉菜单中选择“使用 Pygments”,然后单击“Save 配置条目”按钮。

问题 12:未配置服务器时区

修改 php.ini 文件:

sudo vi /etc/php.ini

替换行:

;date.timezone =

和:

date.timezone = America/Los_Angeles

Save 并退出:

:wq

笔记: “America/Los_Angeles”是我机器的时区值,你需要为你自己的服务器实例找到合适的时区值 这里.

重新启动 Apache 服务:

sudo systemctl restart httpd.service

单击“重新加载页面”按钮以检查结果。

问题 13:未配置大文件存储

您需要根据自己的设置部署合适的大文件存储解决方案。 现在,您可以单击“忽略设置问题”按钮跳过。

问题 14:未配置备用文件域

假设您已经设置了备用文件域或 CDN,然后在 SSH 终端中:

cd /var/www/html/phabricator/phabricator/
sudo ./bin/config set security.alternate-file-domain <https://files.example.com>

单击“重新加载页面”按钮以检查结果。

问题 15:缺少存储库本地路径

使用以下命令解决此问题:

sudo mkdir /var/repo
sudo chown apache: /var/repo

单击“重新加载页面”按钮以检查结果。

问题 16:未安装 PHP 扩展“APC”

sudo yum install php-pear php-devel httpd-devel pcre-devel gcc make
sudo pecl install apc

在APC安装过程中,始终按 Enter 使用默认选项。

sudo vi /etc/php.ini

在文件末尾添加四行:

extension=apc.so
apc.write_lock = On
apc.slam_defense = Off
apc.stat = Off

Save 并退出:

:wq

重新启动 Apache 服务:

sudo systemctl restart httpd.service

单击“重新加载页面”按钮以检查结果。

就这样。 快乐编码!

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com