经过前两篇文章的尝试,我已经了解到了如何从零开始安装并配置好一个带桌面环境的 Arch Linux 系统。为了能够把这个系统作为自己的正式开发环境,还需要完成开发环境的配置。今天这篇文章就是记录我如何在 Arch Linux 系统上搭建一个用于 PHP 开发的环境。
如果你对 Arch Linux 系统的安装还不是很了解,可以回头看看我之前的两篇文章,它们能让你掌握如何安装并配置好一个可用的 Arch Linux 系统:
- 《VirtualBox 虚拟机体验 Arch Linux 基础安装小记》这篇文章记录了如何安装一个基础的 Arch Linux 系统。
- 《Arch Linux 安装并配置桌面环境》这篇文章记录了如何在基础系统之上,配置好图形化的桌面环境,以及中文显示和输入法等内容。
Arch Linux 的安装过程总体来说并不是很复杂,和 Ubuntu 相比,我的体验就是从一个带任务剧情的游戏换成了一个开放世界的游戏,自由度高了,也更加有趣。
环境需求
在正式开始一项工作之前,先分析并确立自己的目标需求是一个比较好的习惯。
我们的目标是搭建一个 PHP 开发环境。那么问题来了,这个 PHP 开发环境具体应该包含哪些内容?
我的思考和分析如下:
- 首先,作为语言本身,PHP 语言的执行环境是必不可少的。
- PHP 的主要应用场景就是 Web 开发,为了方便查看程序执行结果,一个 Web 服务也是少不了的。虽然 PHP 命令端已经通过
-S
参数实现了内置的 Web 服务,但这只能算是临时用途。这里我会选择安装 Nginx。 - 程序开发过程中离不开数据的存储,要方便和高效的存储数据,自然是离不开数据库。作为中小业务的首选,MySQL 自然是当仁不让。另外作为缓存用途,Redis 一样也不能落下。
- Web 程序除了 PHP 这种后端语言,作为支撑界面的前端也是很重要的。目前的前端代码早已过了手写时代,通过 Node.js 和其他各种工具进行转译和打包才是正途,所以 Node.js 也要有。
综合以上,我们归纳出以下需要安装的程序:
- Nginx
- MySQL
- Redis
- Node.js
- PHP
安装服务和执行环境
明确了需求,接下来就是按部就班的开始安装各项所需的软件。不过开始之前,有一件不太重要的小事我觉得有必要先做一下:创建项目目录。
我的习惯就是在当前用户的主目录下创建一个 Projects 目录:
mkdir ~/Projects
好了,让我们继续。
安装 Nginx
使用 pacman
命令安装:
sudo pacman -S nginx
启动 Nginx:
sudo systemctl start nginx
如果想以后每次开机的时候 Nginx 就自动启动,就执行一下下面的命令:
sudo systemctl enable nginx
在浏览器输入 http://localhost,如果出现以下欢迎界面,表示 Nginx 安装成功,可以继续下一项。
安装 MySQL
MySQL 的安装步骤稍微复杂一点,同样也是使用 pacman
命令:
sudo pacman -S mariadb
不熟悉的朋友请不要以为上面的命令打错了。作为 MySQL 的开源社区版本,MariaDB 在使用上和 MySQL 是一样的。
安装命令执行完成后,启动数据库服务之前需要执行一下初始化命令:
sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
然后启动数据库服务:
sudo systemctl start mariadb
接着执行一下安全策略的辅助配置脚本:
sudo mysql_secure_installation
这个脚本以问答交互的方式执行,按提示操作就可以了。注意修改 root 账号密码的那一步,设置一个自己能记住的密码。本地开发用的,不用搞太复杂。
最后就是验证安装结果了,输入以下命令:
mysql -uroot -p
按回车键执行后会问要 root 账号的密码,输入前面一步中设置的密码,如果能进入 MySQL 的 Shell 界面,那就没问题了。
如果希望数据库开机自动启动,执行一次下面的命令:
sudo systemctl enable mariadb
在 Arch Linux 上使用 Workbench 图形化的 MySQL 管理软件时,可能会碰到无法连接 MySQL 服务的问题。如果提示的消息是:The name org.freedesktop.secrets was not provided by any .service files,可以通过 pacman 命令安装
gnome-keyring
组件来解决。
安装 Redis
和 MySQL 相比,Redis 的安装就简单多了。使用以下命令:
sudo pacman -S redis
然后启动 Redis 服务:
sudo systemctl start redis
如果要开启自动启动 Redis 服务,还是和之前相同的命令:
sudo systemctl enable redis
使用下面的命令可以验证 Redis 是否安装成功:
redis-cli
如果出现以下界面,就没问题了:
安装 Node.js
Node.js 也是相同的套路,首先是安装:
sudo pacman -S nodejs
然后输入以下命令:
node -v
能得到下面类似版本号的输出就可以了。
安装 PHP
终于到最后的正主了,作为最后的压轴,我将尝试两种安装 PHP 的方式。一种是跟上面类似的包管理方式。另外一种就是最原始的编译方式。两种安装方式各有自己适合的场景,所以要怎么选择就看各位自己了。
使用 pacman 安装 PHP
使用 pacman
命令安装 PHP 简单快捷:
sudo pacman -S php php-fpm
在当前时间点(2021-09-01),这将会安装最新的 PHP 8。如果你需要安装 PHP 7,需要执行以下命令:
sudo pacman -S php7 php7-fpm
安装 PHP 扩展也是采用类似的方法:
sudo pacman -S php-gd php-redis php-geoip
总之,一切交给 pacman
命令来就行了。
接下来需要配置下 /etc/php/php-fpm.d/www.conf 文件,修改以下几项配置:
user = zzxworld
group = zzxworld
listen = 127.0.0.1:9000
user 和 group 后面的 zzxworld 为当前登录的用户名称,请替换为你自己的登录名。
使用源码编译安装 PHP
使用源码编译的方式就没有这么轻松了,但这种方式可以让我们随心所欲的安装任何 PHP 版本。不论是最新的,还是最老的。它不一定适合所有人,但所有人都有必要了解。(注:这里所有人指的是用 Linux 作为开发环境的人)
源码编译的第一步就是下载源码,用浏览器打开 PHP 官网的下载地址:https://www.php.net/downloads。选择当前稳定版本 7.4.23。
点击第一个 php-7.4.23.tar.gz 下载到本地。
打开终端程序,输入以下命令进入 Downloads 目录:
cd ~/Downloads
通过 ls
命令应该会发现里面有一个 php-7.4.23.tar.gz 文件,解压这个文件:
tar zxvf php-7.4.23.tar.gz
当前目录下会多了个 php-7.4.23 目录。
进入这个目录:
cd php-7.4.23
执行以下编译命令:
./configure --prefix=/usr/local/php7 \
--enable-fpm \
--with-fpm-systemd
--prefix
,--enable-fpm
,--with-fpm-systemd
都是编译参数,用来指定编译的位置,以及需要编译出那些功能。类似的参数还有很多,可以通过以下命令来查询:
./configure --help
这里仅做演示,所以只设置的以上几个参数,实际的业务场景下,会设置更多。比如开启网络请求组件 CURL,启用图片处理组件 GD 等。
开启响应的功能,也会需要提前安装一些依赖的库和软件。如果缺少依赖的软件,编译的过程中会报错并给出提示。拿着这些编译提示消息,通过搜索引擎基本都能解决。
如果你目前的 Arch Linux 系统是按照我前面的两篇文章安装的,如果执行上面的编译命令,大概率会遇到如下的错误:
这是提示缺少 C 编译器,所以要补充安装一下:
sudo pacman -S gcc
再次执行编译命令,顺利执行了一大段代码后,又会碰到这个错误:
貌似是提示没有 pkg-config
脚本,那就安装一个:
sudo pacman -S pkgconf
再次执行编译命令,如果出现“ Thank you for using PHP”,那就完成了编译的第一步。
接下来,需要使用 make
命令来开始编译。首先安装一下 Make:
sudo pacman -S make
然后开始编译:
make
接下来就需要相当长一段时间,等待编译完成。如果电脑性能不佳,去看一集电视剧都可以。
如果中间没有出现任何编译错误,应该会出现 “Build complete“ 的提示,这意味着编译好了,执行编译安装命令:
sudo make install
在一连串的 “Installing ....” 信息之后,就完成了 PHP 的编译安装。但这并不代表编译安装 PHP 的工作流程都结束了,接下来还有一些后续的收尾工作。
首先需要从源码中复制一份 php.ini 文件。源码中提供了有两份,名称分别为 php.ini-development 和 php.ini-production。我们开发环境使用,所以复制 development 命名的这份:
sudo cp php.ini-development /usr/local/php7/lib/php.ini
然后再复制一份 php-fpm 的配置文件:
sudo cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf
sudo cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf
打开 /usr/local/php7/etc/php-fpm.d/www.conf 文件,修改如下的配置项目:
user = zzxworld
group = zzxworld
后面的 zzxworld 为当前登录的用户名称,请替换为你自己的登录名。
最后再复制一份 php-fpm 的服务管理配置文件:
sudo cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/
打开 /usr/lib/systemd/system/php-fpm.service 文件,修改成如下的配置值,否则因为权限问题会无法正常启动 php-fpm。
ProtectSystem=strict
这就算是完工了。
最后的检查和验证
通过以上步骤,我们基本完成了 PHP 开发环境的搭建,接下来要用经典的 phpinfo()
函数来验证一下结果。
还记得开头我们创建的 Projects 目录吗,让我们在里面先创建一个 PHP 脚本文件:
echo "<?php phpinfo();" >> ~/Projects/phpinfo.php
然后打开 Nginx 的配置文件 /etc/nginx/nginx.conf,修改一下下面所示的两处配置:
# ...
user zzxworld;
# ...
server {
location / {
root /home/zzxworld/Projects;
# ...
}
}
# ...
location ~ \.php$ {
root /home/zzxworld/Projects;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
# ...
注意配置项中的 zzxworld,这是我的用户名和目录中的名称,请替换成你自己的。
重启一下 Nginx 服务:
sudo systemctl restart nginx
然后再启动一下 php-fpm 服务:
sudo systemctl start php-fpm
在浏览器中输入 http://localhost/phpinfo.php
,按回车键后如果返回下面这个页面内容,就意味着大功告成。
总结
如果只是纯粹的想学习一下 PHP 这门语言,前面的 Web 服务器,数据库,Node.js 其实都可以不用安装。Web 服务器就用 PHP 命令内置的,数据库可以换成 SQLite,至于缓存,存文件就行了。
这些步骤看起来很繁琐,但基本都是通过命令端在操作。所以完全可以把这些步骤做成一个安装脚本,实现一键安装。我以前就有这样一个 Shell 脚本,在新安装的系统上,执行这个脚本后,去干点别的,过会儿回来看,开发环境就安装好了。不过 Docker 出现后,我的开发环境就开始转向了 Docker。
把 Docker 应用于开发环境,让系统更加的纯粹,也更加优雅的解决了不同项目对语言版本要求不一的问题。不过也带来了另外一些问题,我想接下来应该会写一篇文章,介绍一下我全部用 Docker 搭建一个开发环境的过程和体验。
总之,这是我学习并了解 Arch Linux 的第三篇文章。我已经学会了如何安装 Arch Linux 系统,并配置一个图形化的桌面环境,并开始尝试搭建了一个 PHP 开发环境。不过作为开发环境来说,还缺少一些写代码的工具。所以提前预告一下,下一篇文章我可能会尝试在 Arch Linux 上配置一个愉悦的代码编辑环境。这个愉悦当然只是针对我自己而言的,所以仅希望对各位能有借鉴意义,欢迎关注。