header-bg.jpg
CentOS 通过 dnf 安装 PHP 最新版
发表于 2020-12-07 16:16
|
分类于 Linux
|
评论次数 0
|
阅读次数 4944

查看原软体仓库

在 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 
提示:其中的 [d] 表示预设,[e] 表示已启用,[x] 表示已停用,[i] 表示已安装

而查看 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.confphp.ini 的完整路径为

/etc/php-fpm.conf

/etc/php.ini

php-fpm.conf 中还引入了 www.conf,其完整路径为

/etc/php-fpm.d/www.conf

dnf 默认将 PHP 的扩展配置相关文件都放在了如下目录:

/etc/php.d

打开该目录,可以看到相关的文件,如下图所示:

0.png

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 installdnf 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
listen.acl_users 会覆盖 listen.owner,listen.acl_groups 会覆盖 listen.group。

然后运行以下命令,重启 php-fpm 使配置生效:

systemctl reload php-fpm

适配 Laravel 8

根据 Laravel 8 官方文档,必须安装以下扩展才可运行 Laravel:

运行以下命令,查看系统中已安装的 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 的欢迎页面:

1.png

发布评论
还没有评论,快来抢沙发吧!