install phabricator on ubuntu 20.04 with LAMP ( apache2, php, MySQL)

2021年5月3日 7338点热度 3人点赞 1条评论

一、写在前面

感觉phabricator挺好用的,想着自己搭建一个。

本安装过程基于如下方案,小白一只,仅供参考 :lol: :lol:

1、腾讯云服务器(PS:也可使用其他品牌的云服务器,或者直接在个人PC上安装 :lol:

2、使用域名进行访问,如果是中国大陆地区的境内服务器,需要先完成备案才能正常访问;如果是香港等境外服务器,则不需要备案即可访问。如果不想申请域名,也可以直接通过IP地址进行访问(PS:通过IP地址访问,对于境内服务器,不需要备案也能访问。只不过要想在同一个服务器上安装不同的网站,可能就只有配置不同的端口才行了 :redface:

3、操作系统:ubuntu server 20.04

4、安装时,没有直接使用root用户,而是使用普通用户安装在home文件夹下,可能这样更安全些

如果你与我的方案不太一样,则很多地方可能有出入,请酌情参考 :redface: :lol:

二、开始吧!

大致分为如下几个步骤:

1、搭建LAMP环境,包括安装apache2,php,mysql,并进行相关配置

2、下载phabricator,并进行安装

3、安装后登录web页面,对phabricator进行相应配置(不在本文介绍范围内)

Step1 - 安装apache2

首先安装apache2(本文对应的软件版本为2.4.41-4ubuntu3.1):

   sudo apt update
   sudo apt install apache2

安装完成后,将Apache加入防火墙的白名单,当然也请确认云服务器端已经开放了相应端口(主要是80和443端口,分别用于HTTP和HTTPS)。PS:其实我的ubuntu系统防火墙默认是关闭的,但还是按照流程操作了一下,万一哪天把防火墙打开了也还是要配置,不如先配置好,而且之后我也手动开启了防火墙。

使用如下命令查看防火墙的应用列表:

   sudo ufw app list

得到类似于如下的输出结果:

   Output
   Available applications:
     Apache
     Apache Full
     Apache Secure
     OpenSSH

与Apache相关的三项解释如下:

1、Apache:只开放80端口

2、Apache Full:开放80和443端口

3、Apache Secure:只开放443端口

出于安全考虑,我们尽量使用TSL/SSL加密(后续再写一篇相关总结文章),因此这里把Apache Full加入防火墙白名单。使用如下命令:

   sudo ufw allow 'Apache Full'

得到类似如下输出:

   Output
   Rules updated
   Rules updated (v6)

当然,我在服务器上刚装完机的纯净系统,防火墙是关闭的,输入如下命令可确认防火墙状态:

   sudo ufw status

得到如下输出,暂时先不管吧:

   Output
   Status: inactive

接下来,再确认安装完之后,Apache是否正常工作。输入如下命令确认服务是否正在运行:

   sudo systemctl status apache2

得到类似如下输出,表明Apache已成功启动:

   Output
    apache2.service - The Apache HTTP Server
        Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
        Active: active (running) since Fri 2021-04-23 09:57:31 CST; 1 day 2h ago
          Docs: https://httpd.apache.org/docs/2.4/
      Main PID: 14260 (apache2)
         Tasks: 55 (limit: 2273)
        Memory: 8.0M
        CGroup: /system.slice/apache2.service
                ├─14260 /usr/sbin/apache2 -k start
                ├─14262 /usr/sbin/apache2 -k start
                └─14263 /usr/sbin/apache2 -k start

   Apr 23 09:57:31 VM-0-12-xxxx systemd[1]: Starting The Apache HTTP Server...
   Apr 23 09:57:31 VM-0-12-xxxx systemd[1]: Started The Apache HTTP Server.

我们通过能否成功访问Apache的默认登陆页面来确认软件能否正常运行,通过如下命令可以查看到我们的云服务器的内网IP地址:

   hostname -I

当然,我们是通过外网IP地址来访问我们的云服务器,可以从服务商控制台页面看到IP,或者终端输入如下命令来查看外网IP:

   curl -4 icanhazip.com

查到外网IP后,在浏览器地址栏中输入如下地址

   http://your_server_ip

应该会看到如下页面:

目前为止一切正常,就只安装了一个软件而已 :lol: 。如下是一些常用的通过systemctl进行管理的命令。

终止web服务:

   sudo systemctl stop apache2

终止后启动web服务:

   sudo systemctl start apache2

重启web服务:

   sudo systemctl restart apache2

如果只是简单更改配置,可以在不终止服务的情况下重新加载配置:

   sudo systemctl reload apache2

取消开机自启动:

   sudo systemctl disable apache2

设置开机自启动(默认开机自启动):

   sudo systemctl enable apache2

Step2 - 安装MySQL

对于Apache的配置,我们可以先放在一边,先安装数据库软件MySQL。输入如下命令进行安装(本文安装的软件版本为8.0):

   sudo apt install mysql-server

安装完成后,输入如下命令,对MySQL进行配置

   sudo mysql_secure_installation

首先是进行root账户的密码相关配置,类似配置如下:

   Output
   Securing the MySQL server deployment.

   Connecting to MySQL using a blank password.

   VALIDATE PASSWORD COMPONENT can be used to test passwords
   and improve security. It checks the strength of password
   and allows the users to set only those passwords which are
   secure enough. Would you like to setup VALIDATE PASSWORD component?

   Press y|Y for Yes, any other key for No: y

   There are three levels of password validation policy:

   LOW    Length >= 8
   MEDIUM Length >= 8, numeric, mixed case, and special characters
   STRONG Length >= 8, numeric, mixed case, special characters and dictionary
   file

   Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
   Please set the password for root here.

   New password:

   Re-enter new password:

   Estimated strength of the password: 100
   Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

设置完密码后,接下来还有一些配置项,都输入“y”即可。

按照上述配置完后,输入如下命令,以root账户登录MySQL:

   sudo mysql

以root账户登录MySQL后,创建一个新的账户,用于Phabricator的数据库:

   mysql> CREATE USER 'mysql_username'@'localhost' IDENTIFIED BY 'mysql_password';

接下来,我们给该账户所有数据库操作的特权,避免后续Phabricator的某些服务没有相应的权限:

   mysql> GRANT ALL PRIVILEGES ON *.* TO 'mysql_username'@'localhost' WITH GRANT OPTION;

之后,输入如下命令,最后输入exit退出MySQL:

   mysql> FLUSH PRIVILEGES;
   mysql> exit;

通过如下命令,我们可以确认MySQL服务是否在运行:

   sudo systemctl status mysql.service

得到类似如下输出,表明MySQL正在运行中:

   Output
    mysql.service - MySQL Community Server
        Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
        Active: active (running) since Sat 2021-04-24 10:09:00 CST; 34min ago
      Main PID: 254466 (mysqld)
        Status: "Server is operational"
         Tasks: 38 (limit: 2273)
        Memory: 333.8M
        CGroup: /system.slice/mysql.service
                └─254466 /usr/sbin/mysqld

   Apr 24 10:09:00 VM-0-12-xxxx systemd[1]: Starting MySQL Community Server...
   Apr 24 10:09:00 VM-0-12-xxxx systemd[1]: Started MySQL Community Server.

Step3 - 安装php

输入如下命令,安装php:

   sudo apt install php libapache2-mod-php php-mysql

安装完成后,可通过如下命令确认php的版本:

   php -v
   Output
   PHP 7.4.3 (cli) (built: Oct  6 2020 15:47:56) ( NTS )
   Copyright (c) The PHP Group
   Zend Engine v3.4.0, Copyright (c) Zend Technologies
       with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

Step4 - 安装Phabricator

在/home/username中新建一个文件夹,我们打算把Phabricator安装在该文件夹里:

   mkdir phabricator

进入该文件夹:

   cd phabricator

下载Phabricator的安装脚本,我喜欢用axel,先安装axel:

   ~/phabricator$ sudo apt install axel

然后再下载文件:

   ~/phabricator$ axel https://p.phcdn.net/file/download/@secure/ik2qrlhcbxpq4planq25/PHID-FILE-aqay7df7y6qq6jksgxmd/install_ubuntu.sh

然后就会下载一个名为install_ubuntu.sh的文件:

   ~/phabricator$ ls
   Output
   install_ubuntu.sh

使用如下命令,使install_ubuntu.sh文件可执行:

   ~/phabricator$ chmod +x install_ubuntu.sh

然后执行安装(PS:不用sudo):

   ~/phabricator$ ./install_ubuntu.sh

安装完成后,可以看到多出了“arcanist”和“phabricator”两个文件夹:

   ~/phabricator$ ls
   Output
   arcanist  install_ubuntu.sh  phabricator

Step5 - 配置Apache

首先新建一个VirtualHost的配置文件,文件名可以用域名或其他相关名称命名,比如yourdomain.conf:

   sudo vim /etc/apache2/sites-available/yourdomain.conf

在文件中编辑如下内容后保存

/etc/apache2/sites-available/yourdomain.conf

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    # Change this to the domain which points to your host.
    ServerName phabricator.example.com

    # Change this to the path where you put 'phabricator' when you checked it
    # out from GitHub when following the Installation Guide.
    #
    # Make sure you include "/webroot" at the end!
    DocumentRoot /home/username/phabricator/phabricator/webroot
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    RewriteEngine on
    RewriteRule ^(.*)$          /index.php?__path__=$1  [B,L,QSA]
</VirtualHost>

之后添加相应目录的访问权限:

   sudo vim /etc/apache2/apache2.conf

在该文件中添加如下内容后保存:

/etc/apache2/apache2.conf

<Directory "/home/username/phabricator/phabricator/webroot">
  Require all granted
</Directory>

接下来我们把默认启用的VirtualHost配置文件取消:

   sudo a2dissite 000-default.conf

然后启用我们刚刚编辑的VirtualHost配置文件(PS:如果后续有新建其他网站的需求,也可以像这样新建一个VirtualHost配置文件然后启用,当然也可以在同一个文件中新增配置):

   sudo a2ensite yourdomain.conf

然后检查一下VirtualHost配置文件中是否有语法错误:

   sudo apache2ctl configtest

最后,重新加载Apache使配置生效:

   sudo systemctl reload apache2

Step6 - 配置MySQL

到此,我们通过浏览器访问Phabricator应该可以看到类似如下页面。因为我们还没有配置数据库,所以应该会看到类似如下页面提示无法连接到数据库:

如果没有出现上述页面,而是出现403 Forbidden信息,则可能是phabricator文件夹或者home下的username文件夹的权限问题,使得phabricator没有相应的读写权限:

使用如下命令可以查看当前路径下所有文件/文件夹的权限:

   ls -l
   Output
   drwxr-xr-x 4 username   username       4096 Apr 24 18:45 phabricator

如果文件夹权限为755,即上述输出的“drwxr-xr-x”,则Phabricator应该有正常的读写权限,如果不是755,则可以把权限改为755。

可使用如下命令赋予相应文件夹755权限(可能不安全,不太懂,先不管,后续有时间再深究文件/文件夹权限问题),然后应该就不会出现403 Forbidden了:

   sudo chmod -R 755 foldername

接下来我们根据浏览器中的提示配置数据库,先进入到phabricator文件夹:

   cd phabricator/phabricator/

首先配置mysql.host:

   ~/phabricator/phabricator$ ./bin/config set mysql.host localhost

然后配置mysql.port,MySQL默认使用的是3306端口:

   ~/phabricator/phabricator$ ./bin/config set mysql.port 3306

接下来配置MySQL数据库的用户名和密码,在Step2中我们已经新建了一个MySQL账户,我们使用该账户。首先配置用户名:

   ~/phabricator/phabricator$ ./bin/config set mysql.user mysql_username

然后配置密码:

   ~/phabricator/phabricator$ ./bin/config set mysql.pass mysql_password

上述四项参数配置完成后,运行如下命令,其中用户名和密码是上述mysql.user和mysql.pass对应的用户名和密码:

   ~/phabricator/phabricator$ ./bin/storage upgrade --user mysql_username --password mysql_password

出现如下信息,输入y继续,等待完成配置即可:

   Output
   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

至此,Phabricator的安装过程就完成了 :lol: 。接下来我们就可以登录web页面并按照提示进行配置啦;另外还有设置SSL证书以便使用https进行访问等等。这些内容打算后续再写 :lol: 。下方Reference中给出了相关内容,可以直接参考这些。

Reference

https://www.digitalocean.com/community/tutorials/how-to-install-the-apache-web-server-on-ubuntu-20-04

https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-20-04

https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu-20-04

https://isabelle-dev.sketis.net/book/phabricator/article/installation_guide/

https://isabelle-dev.sketis.net/book/phabricator/article/configuration_guide/

https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-20-04

https://stackoverflow.com/questions/48078083/lets-encrypt-ssl-couldnt-start-by-error-eacces-permission-denied-open-et

 

本作品采用 知识共享署名 4.0 国际许可协议 进行许可

paopaopoo

这个人很懒,什么都没留下

文章评论

  • haha

    红红火火恍恍惚惚

    2021年5月23日