查看原软体仓库
在 CentOS 8 系统中通过以下命令可以查看 dnf 上的 PHP 版本:
dnf module list php
会发现 预设 AppStream 软体仓库(repo,repository)提供的 PHP 版本为 7.3
:
CentOS-8 - AppStream
Name Stream Profiles Summary
php 7.2 [d] common [d], devel, minimal PHP scripting language
php 7.3 common [d], devel, minimal PHP scripting language
而查看 PHP 官网会发现最新版是 8.0
,所以我们需要更换其他软体仓库来安装 PHP 8.0
。
更换软体仓库并安装最新版 PHP
运行以下命令,启用 Remi 软体仓库:
dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-8.rpm
再次运行 dnf module list php
,会发现 Remi 软体仓库中的 PHP 版本信息:
CentOS-8 - AppStream
Name Stream Profiles Summary
php 7.2 [d] common [d], devel, minimal PHP scripting language
php 7.3 common [d], devel, minimal PHP scripting language
Remi's Modular repository for Enterprise Linux 8 - x86_64
Name Stream Profiles Summary
php remi-7.2 common [d], devel, minimal PHP scripting language
php remi-7.3 common [d], devel, minimal PHP scripting language
php remi-7.4 common [d], devel, minimal PHP scripting language
php remi-8.0 [e] common [d], devel, minimal PHP scripting language
运行以下命令,启用 8.0
版本的 PHP:
dnf module enable php:remi-8.0
运行以下命令,安装 PHP:
dnf install php
安装过程会提示需要导入 GPG key,直接输入 y
同意即可:
warning: /var/cache/dnf/remi-modular-6408ecca79e22107/packages/php-8.0.0-1
Remi's Modular repository for Enterprise Linux 8 - x86_64
Importing GPG key 0x5F11735A:
Userid : "Remi's RPM repository <remi@remirepo.net>"
Fingerprint: 6B38 FEA7 231F 87F5 2B9C A9D8 5550 9759 5F11 735A
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-remi.el8
Is this ok [y/N]: y
安装完成后,输入 php -v
并运行,查看 PHP 版本:
PHP 8.0.0 (cli) (built: Nov 24 2020 17:04:03) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies
with Zend OPcache v8.0.0, Copyright (c), by Zend Technologies
常用命令及配置文件路径
以下是 php-fpm 的常用命令:
# 查看状态
systemctl status php-fpm
# 启动
systemctl start php-fpm
# 停止
systemctl stop php-fpm
# 重启
systemctl restart php-fpm
# 平滑重启
systemctl reload php-fpm
# 查看是否已开机启动
systemctl is-enabled php-fpm
# 设置开机后自动启动
systemctl enable php-fpm
# 关闭开机后自动启动
systemctl disable php-fpm
php-fpm.conf
及 php.ini
的完整路径为
/etc/php-fpm.conf
/etc/php.ini
php-fpm.conf
中还引入了 www.conf
,其完整路径为
/etc/php-fpm.d/www.conf
dnf 默认将 PHP 的扩展配置相关文件都放在了如下目录:
/etc/php.d
打开该目录,可以看到相关的文件,如下图所示:
在 php.ini
中提示了以上扩展配置文件都被默认加载:
Note: packaged extension modules are now loaded via the .ini files
found in the directory /etc/php.d; these are loaded by default.
PHP 官网 有相关的手册,在编译 PHP 时,添加如下编译配置,即可让 PHP 引擎在读完 php.ini
后扫描相应路径下的 .ini
配置文件:
--with-config-file-scan-dir=/etc/php.d
由于我们并不是手动编译安装 PHP,以上配置也是 dnf 自动配置好的,所以我们直接使用即可。
dnf 将这些扩展配置拆分为多个配置文件,使我们可以通过例如 dnf install
、dnf remove
等相关的指令来动态地安装、卸载、升级 PHP 扩展,并且不影响 php.ini
的核心配置。
适配 Nginx
如果 Web 服务器使用 Nginx,则需要修改 php-fpm 的相关配置以支持 Nginx。
编辑 /etc/php-fpm.d/www.conf
,替换以下相关配置:
user = nginx
group = nginx
listen = /run/php-fpm/www.sock
listen.allowed_clients = /run/php-fpm/www.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
如果使用 ACL 控制系统的文件权限,则将需要打开以下配置,否则将以下配置注释即可:
;listen.acl_users = nginx
;listen.acl_groups = nginx
然后运行以下命令,重启 php-fpm 使配置生效:
systemctl reload php-fpm
适配 Laravel 8
根据 Laravel 8 官方文档,必须安装以下扩展才可运行 Laravel:
- BCMath
- Ctype
- Fileinfo
- JSON
- Mbstring
- OpenSSL
- PDO
- Tokenizer
- XML
运行以下命令,查看系统中已安装的 PHP 扩展:
php -m | egrep 'bcmath|ctype|fileinfo|json|mbstring|openssl|pdo|tokenizer|xml'
输出如下信息,会发现缺少 bcmath
以及 pdo_mysql
:
ctype
fileinfo
json
libxml
mbstring
openssl
pdo_sqlite
tokenizer
xml
xmlreader
xmlwriter
运行以下命令,安装 bcmath
扩展:
dnf install php-bcmath
dnf install php-pdo_mysql
如果需要使用本地的 Redis 服务,则运行以下命令安装 php-redis
扩展:
dnf install php-redis
在本地开发环境中使用如下命令创建一个新的 Laravel 项目 blog
:
laravel new blog
将 blog
文件夹整体打包为 blog.7z
,在服务器中运行以下命令创建存放 Web 项目的文件夹,并使用 Xftp
上传 blog.7z
该文件夹中:
mkdir -p /home/nginx
运行以下命令安装 7z
插件,用于解压 blog
文件夹:
yum install p7zip -y
安装成功后,运行以下命令解压 blog
文件夹:
7za x /home/nginx/blog.7z -o/home/nginx
运行以下命令,更改 blog
项目的所属用户组、所属用户为 nginx
:
chown -R nginx:nginx /home/nginx/blog
默认情况下 nginx
用户是不允许远程登录的,但为了方便我们从 PHPStorm 同步代码至服务器,所以运行以下代码修改 nginx
用户的身份权限,允许远程登录:
usermod -s /bin/bash nginx
运行以下命令,设置 nginx
用户的登录密码:
passwd nginx
将 /etc/nginx/conf.d/default.conf
的内容替换为如下:
server {
listen 80;
server_name localhost;
root /home/nginx/blog/public;
# 引入 Nginx 默认的 PHP FastCGI 配置
include /etc/nginx/default.d/php.conf;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
}
最后使用以下命令重启 Nginx:
systemctl reload nginx
打开浏览器访问服务器的公网 IP 即可看到 Laravel 的欢迎页面: