工欲善其事,必先利其器,磨刀不误砍柴功,先把服务器LNMP环境搭建好,再建立web网站,没有一个好的PHP环境,后面麻烦会更多。之前讲过手动安装部署php环境,今天说一下在谷歌云安装Centos8系统后,使用 dnf 命令安装PHP+Mysql+Nginx配置环境的方法。

配置谷歌云服务器

Centos8系统安装在Google的免费云服务器上,本文测试的机器类型是e2-medium(2 个 vCPU,4 GB 内存)。

Google Cloud谷歌云申请以及虚拟机配置方法请浏览:免费申请谷歌云
建立好VM服务器后,连接上SSH,下面开始操作。安装好Centos8系统后的第一件事情就是修改系统的root密码。

谷歌云修改服务器root密码

使用谷歌云平台上自带的网页SSH连接服务器,登陆后修改SSH连接方式。

修改服务器root密码

使用 sudo -i 或者 sudo su 命令切换到超级管理root用户,切换到root超级管理员模式后输入 passwd 命令修改密码。

1
2
sudo -i
passwd

输入你要修改的密码,然后二次确认密码,密码确认完毕后回车设置完成。使用 cd\ 命令切换到root目录下。
使用 VI 命令修改SSH的配置文件。

1
vi /etc/ssh/sshd_config
谷歌云安装PHP+Mysql+Nginx

如果你想修改SSH远程连接的端口,将 Port 前面的#号去掉,然后再后面修改你想修改的端口号。
在sshd_config中修改下面的内容:

  • PermitRootLogin 默认值为no,需要改为yes后才可以使用SSH远程访问。
  • PasswordAuthentication 默认值为no,改为yes开启密码登陆。
  • ClientAliveInterval 默认值420,修改为3600,这个是客户端连接超时的时间。
1
2
3
4
Port 10086
PermitRootLogin yes
PasswordAuthentication yes
ClientAliveInterval 3600

修改完毕后,使用:wq命令退出VI编辑,之后重新启动sshd服务!

1
service sshd restart

以上是使用谷歌云服务器修改服务器密码的方法。

安装软件源epel和remi

接下来需要进一步安装centos8系统所需要的软件,下面开始更新系统,以及安装系统软件包所需要的源。epel 和 remi 是centos8不可缺少的软件仓库。

使用RPM方式安装源:

1
2
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-8.rpm

使用DNF方式安装源:

DNF是下一代的yum软件包管理器(Yum的派生)。dnf和yum的语法类似,有很多相似之处,默认情况下,DNF已安装在RHEL 8和CentOS 8系统上。

1
2
3
4
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
dnf install yum-utils
dnf update

查看一下系统上启用的数据源,使用 dnf repolist all 命令可以查看全部的数据源,包括未启用的数据源。

1
dnf repolist all
安装centos8软件源epel和remi

使用 dnf repolist 命令,可以查看当前正在使用的软件源。

1
dnf repolist

使用 dnf repolist disabled 命令查看系统禁用的数据源。

1
dnf repolist disabled

软件源安装过后,需要设置优化一下安装的软件包源。安装 dnf-utils 和使用 makecache 命令生成源缓存。

1
2
dnf -y install dnf-utils
dnf makecache

安装启用DNF的自动更新:

1
2
dnf install dnf-automatic
systemctl start dnf-automatic.timer

安装“开发工具”软件包组:

1
dnf group install 'Development Tools' -y

使用DNF更新系统软件包:

1
dnf -y update

配置centos8的虚拟内存

Google云默认安装操作系统是没有分配swap空间的,需要手动添加。如果操作系统没有配置swapfile(分配swap空间)会导致内存负载后出错。下面教你如何添加centos8操作系统的swap空间!
使用 free -m 命令查看内存配置,如果Swap后面都是0的话则需要添加swap空间。

1
free -m

使用六步创建Swap虚拟内存:

  1. 创建一个预分配指定大小空间的文件;
  2. 以用ls命令检查文件大小;
  3. 更改swap文件的权限;
  4. 格式化swap文件;
  5. 启用swap交换文件;
  6. 修改fstab文件来实现重启后自动生效swap。
1
2
3
4
5
6
sudo dd if=/dev/zero of=/swapfile bs=1024 count=8388608
ls -lh /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo vi /etc/fstab

使用 VI 命令在 fstab 文件末尾加入下面内容:

1
/swapfile swap swap sw 0 0

如果你不想使用 VI 命令,也可以直接使用 echo 命令设置swap开机启动。

1
echo '/swapfile swap swap sw 0 0' | sudo tee -a /etc/fstab

修改服务器时区

1
sudo timedatectl set-timezone Asia/Shanghai

将服务器时区修改为Asia/Shanghai,之后可以使用 timedatectl 命令查询时区。

新增用户和用户组

在配置Centos8之前,需要新增用户组和用户,用于web服务访问相关的权限使用。

1
2
groupadd www
useradd -g www www

用户和用户组配置完毕后,Centos8的基本环境已经配置的差不多了,下面开始安装web相关服务。

Centos8配置完毕后,安装Nginx+PHP8+Mysql,安装的顺序一定不要搞错,先安装Nginx,之后再安装PHP8和Mysql。Nginx安装完毕后,无需配置,安装好PHP8后再配置Nginx。

安装Nginx

安装nginx相对简单的多,安装后查看一下版本,是1.14.1,使用DNF的软件包相对来说都是比较稳定的包。有时候版本会略低一点,对于centos官方源来说,这个很正常。

在安装Nginx之前,先安装Nginx所需的依赖包。

1
dnf -y install zlib zlib-devel pcre pcre-devel openssl openssl-devel gd-devel make gcc gcc-c++
  • gcc linux编译器
  • pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式
  • zlib库提供了很多种压缩和解压缩方式nginx使用zlib对http包的内容进行gzip
  • openssl是web安全通信的基石,也就是https相关的依赖

安装nginx:
Nginx所需的依赖包安装好之后,输入下面命令,安装nginx。

1
2
dnf install nginx
nginx -v

安装后设置开机启动:

1
systemctl enable nginx

启动Nginx,启动之后查看以下Nginx的当前状态:

1
2
systemctl start nginx
systemctl status nginx

查看当前80端口状态:

1
netstat -na | grep 80

检查及设置nginx默认端口是否开启:

1
firewall-cmd --query-port=80/tcp

如果返回值是no,则80端口未开放,需要设置防火墙,放行80端口

开启80端口:

1
2
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload

在浏览器输入服务器的IP地址,查看一下是否能访问nginx的欢迎页面。

谷歌云安装PHP+Mysql+Nginx

Nginx的安装已经成功了,接下来查看一下安装目录。手动安装Nginx目录一般都是/usr/local/,但使用yum/dnf安装的目录跟手动安装的不太一样,下面是使用yum/dnf安装nginx的一些对应目录:

  • Nginx主配置文件:/etc//nginx.conf
  • Nginx执行文件目录:/usr/sbin/
  • Nginx首页html网页路劲:/usr/share//html
  • 代理目录:/var/cache//proxy_temp
  • Nginx的缓存目录:/var/cache//fastcgi_temp
  • scgi目录:/var/cache//scgi_temp
  • uwsgi目录:/var/cache//uwsgi_temp
  • Nginx的日志目录:/var/log/
谷歌云安装PHP+Mysql+Nginx

安装完毕后使用 nginx -t 命令测试安装是否正确。正确会返回下面的内容。

CentOS8的默认软件仓库中内置的nginx版本是1.14.1,最近漏扫提示需要升级至1.17.7以上版本。如果你想安装更高的nginx版本,请查看:Centos8如何安装最新版本的Nginx

安装PHP8

如果使用 dnf -y install php 命令默认安装php的话,默认安装的版本很低,目前PHP版本是PHP8.1,下面看一下如何安装PHP8.1

首先查询一下系统中,安装PHP8.1的软件源:

1
dnf list php

谷歌云安装PHP+Mysql+Nginx

Centos8默认仓库里的php版本是7.2.24,这个版本太低了,下一步切换到remi源,查找php8.1版本。

获取可用的PHP列表:

1
dnf module list php

谷歌云安装PHP+Mysql+Nginx

下一步需要启用,remi仓库的PHP模块,先重置一下PHP模块。

重置PHP数据源模块:

1
dnf module reset php

谷歌云安装PHP+Mysql+Nginx

接下来,设置启用新的PHP数据源模块,我们需要安装php8.1,就启用remi-8.1。

1
dnf module enable php:remi-8.1

谷歌云安装PHP+Mysql+Nginx

remi-8.1模块已经启用完毕了,下面进行安装php8.1

输入安装命令进行安装:

1
dnf install php

谷歌云安装PHP+Mysql+Nginx

php安装成功后,额外安装一些常用的php扩展软件包:

1
dnf install -y php-{mysqlnd,xml,xmlrpc,curl,gd,imagick,mbstring,opcache,soap,zip}

使用 dnf search 命令查询一下PHP8.1都有哪些扩展软件包:

1
dnf search php81*

查询之后,我们发现php81相关的软件包太多了,这些都是干什么用的?哪些应该装哪些不应该装呢?下面是php8.1扩展安装包的详细介绍。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
php81.x86_64 :安装 PHP 8.1 的包
php81-build.x86_64 :包运送基本构建配置
php81-libzip.x86_64 :用于读取、创建和修改 zip 存档的 C 库
php81-php.x86_64 : 用于创建动态网站的 PHP 脚本语言
php81-php-ast.x86_64 :抽象语法树
php81-php-bcmath.x86_64 :用于使用 bcmath 库的 PHP 应用程序模块
php81-php-brotli.x86_64:PHP 的 Brotli 扩展
php81-php-cli.x86_64 : PHP 的命令行界面
php81-php-common.x86_64 : PHP 常用文件
php81-php-dba.x86_64 : PHP 应用程序的数据库抽象层模块
php81-php-dbg.x86_64 :交互式 PHP 调试器
php81-php-devel.x86_64 : 构建 PHP 扩展所需的文件
php81-php-embedded.x86_64 :用于嵌入应用程序的 PHP 库
php81-php-enchant.x86_64 :PHP 应用程序的附魔拼写扩展
php81-php-ffi.x86_64 : 外部函数接口
php81-php-fpm.x86_64 : PHP FastCGI 进程管理器
php81-php-gd.x86_64 : 用于使用 gd 图形库的 PHP 应用程序模块
php81-php-geos.x86_64 : GEOS 的 PHP 模块
php81-php-gmp.x86_64 :用于使用 GNU MP 库的 PHP 应用程序模块
php81-php-horde-horde-lz4.x86_64:Horde LZ4 压缩扩展
php81-php-imap.x86_64 :用于使用 IMAP 的 PHP 应用程序的模块
php81-php-intl.x86_64 : PHP 应用程序的国际化扩展
php81-php-ldap.x86_64 :用于使用 LDAP 的 PHP 应用程序的模块
php81-php-libvirt.x86_64 : Libvirt 的 PHP 语言绑定
php81-php-libvirt-doc.noarch : php-libvirt 文档
php81-php-litespeed.x86_64 : LiteSpeed Web 服务器 PHP 支持
php81-php-lz4.x86_64 : PHP 的 LZ4 扩展
php81-php-maxminddb.x86_64 : MaxMind DB Reader 扩展
php81-php-mbstring.x86_64 :需要多字节字符串处理的 PHP 应用程序模块
php81-php-mysqlnd.x86_64 :使用 MySQL 数据库的 PHP 应用程序模块
php81-php-oci8.x86_64 :用于使用 OCI8 数据库的 PHP 应用程序的模块
php81-php-odbc.x86_64 :用于使用 ODBC 数据库的 PHP 应用程序的模块
php81-php-opcache.x86_64:Zend OPcache
php81-php-pdo.x86_64 :PHP 应用程序的数据库访问抽象模块
php81-php-pdo-dblib.x86_64:Microsoft SQL Server 和 Sybase 数据库的 PDO 驱动程序
php81-php-pdo-firebird.x86_64:Interbase/Firebird 数据库的 PDO 驱动程序
php81-php-pear.noarch :PHP 扩展和应用程序存储库框架
php81-php-pecl-ahocorasick.x86_64 : 有效的 Aho-Corasick 字符串模式匹配算法
php81-php-pecl-amqp.x86_64 :与任何 AMQP 兼容的服务器通信
php81-php-pecl-apcu.x86_64 : APC 用户缓存
php81-php-pecl-apcu-devel.x86_64 :APCu 开发者文件(头文件)
php81-php-pecl-apfd.x86_64:始终填充表单数据
php81-php-pecl-awscrt.x86_64:AWS 通用运行时 PHP 绑定
php81-php-pecl-base58.x86_64 : 使用 base58 编码和解码数据
php81-php-pecl-bitset.x86_64 : BITSET 库
php81-php-pecl-couchbase3.x86_64:Couchbase 服务器 PHP 扩展
php81-php-pecl-crypto.x86_64:OpenSSL 加密库的包装器
php81-php-pecl-csv.x86_64 : CSV PHP 扩展
php81-php-pecl-datadog-trace.x86_64:PHP 的 APM 和分布式跟踪
php81-php-pecl-dbase.x86_64 : dBase 数据库文件访问函数
php81-php-pecl-decimal.x86_64 : 任意精度浮点十进制
php81-php-pecl-dio.x86_64 : 直接 I/O 函数
php81-php-pecl-ds.x86_64:PHP 数据结构
php81-php-pecl-eio.x86_64 : 提供 libeio 库的接口
php81-php-pecl-env.x86_64 : 加载环境变量
php81-php-pecl-ev.x86_64 : 提供 libev 库的接口
php81-php-pecl-event.x86_64 : 提供 libevent 库的接口
php81-php-pecl-eximer.x86_64:中断定时器和低开销采样分析器
php81-php-pecl-fann.x86_64:FANN 库的包装器
php81-php-pecl-gearman.x86_64 : 到 libgearman 的 PHP 包装器
php81-php-pecl-geoip.x86_64 : 将 IP 地址映射到地理位置的扩展
php81-php-pecl-geospatial.x86_64 :处理常见地理空间功能的 PHP 扩展
php81-php-pecl-gmagick.x86_64 :为 GraphicsMagick 库提供包装器
php81-php-pecl-gnupg.x86_64 : gpgme 库的包装器
php81-php-pecl-grpc.x86_64:通用RPC框架
php81-php-pecl-hdr-histogram.x86_64:C hdrhistogram API 的 PHP 扩展包装器
php81-php-pecl-http.x86_64 :扩展的 HTTP 支持
php81-php-pecl-http-devel.x86_64 :扩展的 HTTP 支持开发者文件(头文件)
php81-php-pecl-http-message.x86_64 : PSR-7 HTTP 消息实现
php81-php-pecl-igbinary.x86_64 :替换标准 PHP 序列化程序
php81-php-pecl-igbinary-devel.x86_64 : Igbinary 开发者文件(头文件)
php81-php-pecl-imagick.x86_64 : 使用 ImageMagick 创建和修改图像的扩展
php81-php-pecl-imagick-devel.x86_64:imagick 扩展开发者文件(头文件)
php81-php-pecl-imagick-im6.x86_64 : 使用 ImageMagick 6 创建和修改图像的扩展
php81-php-pecl-imagick-im6-devel.x86_64:imagick 扩展开发者文件(头文件)
php81-php-pecl-imagick-im7.x86_64 : 使用 ImageMagick 7 创建和修改图像的扩展
php81-php-pecl-imagick-im7-devel.x86_64:imagick 扩展开发者文件(头文件)
php81-php-pecl-inotify.x86_64 : Inotify
php81-php-pecl-ip2location.x86_64 : 获取IP地址的地理位置信息
php81-php-pecl-ip2proxy.x86_64 : 获取IP地址的代理信息
php81-php-pecl-json-post.x86_64 : JSON POST 处理程序
php81-php-pecl-jsonpath.x86_64 :使用 JSONPath 表示法提取数据
php81-php-pecl-krb5.x86_64:Kerberos 身份验证扩展
php81-php-pecl-krb5-devel.x86_64:Kerberos 扩展开发者文件(头文件)
php81-php-pecl-leveldb.x86_64 : LevelDB PHP 绑定
php81-php-pecl-luasandbox.x86_64 :具有限制和安全环境的 Lua 解释器
php81-php-pecl-lzf.x86_64 : 处理 LZF 解压的扩展
php81-php-pecl-mailparse.x86_64 :用于解析和处理电子邮件的 PHP PECL 包
php81-php-pecl-mcrypt.x86_64 : libmcrypt 库的绑定
php81-php-pecl-memcache.x86_64 : 与 Memcached 缓存守护进程一起使用的扩展
php81-php-pecl-memcached.x86_64 : 与 Memcached 缓存守护进程一起使用的扩展
php81-php-pecl-memprof.x86_64:内存使用分析器
php81-php-pecl-mongodb.x86_64:用于 PHP 的 MongoDB 驱动程序
php81-php-pecl-msgpack.x86_64 :用于与 MessagePack 序列化通信的 API
php81-php-pecl-msgpack-devel.x86_64 :MessagePack 开发者文件(头文件)
php81-php-pecl-mustache.x86_64:Mustache 模板语言
php81-php-pecl-mysql.x86_64 : MySQL 数据库访问函数
php81-php-pecl-nsq.x86_64 : NSQ 客户端的 PHP 扩展
php81-php-pecl-oauth.x86_64 : PHP OAuth 消费者扩展
php81-php-pecl-opencensus.x86_64:一个统计信息收集和分布式跟踪框架
php81-php-pecl-openswoole.x86_64 : PHP 的异步并发分布式网络框架
php81-php-pecl-pam.x86_64:PAM 集成
php81-php-pecl-parle.x86_64:解析和词法分析
php81-php-pecl-pcov.x86_64:代码覆盖驱动
php81-php-pecl-pcsc.x86_64 : 使用 winscard PC/SC API 的 PHP 扩展
php81-php-pecl-pkcs11.x86_64:PKCS11 模块的 PHP 绑定
php81-php-pecl-pq.x86_64 : PostgreSQL 客户端库 (libpq) 绑定
php81-php-pecl-protobuf.x86_64 : 序列化结构化数据的机制
php81-php-pecl-ps.x86_64 : 创建 PostScript 文件的扩展
php81-php-pecl-psr.x86_64 : PSR 接口
php81-php-pecl-raphf.x86_64:资源和持久句柄工厂
php81-php-pecl-rar.x86_64 : 用于读取 RAR 档案的 PHP 扩展
php81-php-pecl-rdkafka5.x86_64 : 基于 librdkafka 的 Kafka 客户端
php81-php-pecl-redis5.x86_64 :用于与 Redis 键值存储通信的扩展
php81-php-pecl-rpminfo.x86_64 : RPM 信息
php81-php-pecl-rrd.x86_64 : rrdtool 的 PHP 绑定
php81-php-pecl-runkit7.x86_64 :对于所有这些你......无论如何都不应该做的事情......但肯定会做!
php81-php-pecl-scrypt.x86_64 : Scrypt 散列函数
php81-php-pecl-sdl.x86_64:PHP 的简单 DirectMedia 层
php81-php-pecl-seaslog.x86_64 :一个有效、快速、稳定的 PHP 日志扩展
php81-php-pecl-seassnowflake.x86_64:分布式唯一ID生成器的PHP扩展
php81-php-pecl-selinux.x86_64 : PHP 脚本语言的 SELinux 绑定
php81-php-pecl-simple-kafka-client.x86_64 : 基于 librdkafka 的 Kafka 客户端
php81-php-pecl-ssdeep.x86_64:libfuzzy 库的包装器
php81-php-pecl-ssh2.x86_64 : libssh2 库的绑定
php81-php-pecl-stats.x86_64:统计计算的例程
php81-php-pecl-stomp.x86_64 : Stomp 客户端扩展
php81-php-pecl-swoole4.x86_64 : PHP 的异步并发分布式网络框架
php81-php-pecl-sync.x86_64 : 命名和未命名的同步对象
php81-php-pecl-teds.x86_64:暂定的额外数据结构
php81-php-pecl-trader.x86_64:交易者​​技术分析
php81-php-pecl-translit.x86_64 :将非拉丁字符集音译为拉丁字符
php81-php-pecl-uopz.x86_64 : Zend 的用户操作
php81-php-pecl-uploadprogress.x86_64 :跟踪文件上传进度的扩展
php81-php-pecl-uuid.x86_64:PHP 的通用唯一标识符扩展
php81-php-pecl-var-representation.x86_64 : var_representation 扩展
php81-php-pecl-varnish.x86_64:清漆缓存绑定
php81-php-pecl-vips.x86_64 :用于与 libvips 交互的 PHP 扩展
php81-php-pecl-vld.x86_64 : 转储 PHP 脚本的内部表示
php81-php-pecl-wddx.x86_64:网络分布式数据交换
php81-php-pecl-xattr.x86_64 : 扩展属性
php81-php-pecl-xdebug3.x86_64 :提供函数跟踪和分析的函数
php81-php-pecl-xdiff.x86_64 :文件差异/补丁
php81-php-pecl-xhprof.x86_64 : XHProf 的 PHP 扩展,一个层次分析器
php81-php-pecl-xlswriter.x86_64 :高效快速的 xlsx 文件扩展名
php81-php-pecl-xmldiff.x86_64 : XML 差异和合并
php81-php-pecl-xmlrpc.x86_64 : 编写 XML-RPC 服务器和客户端的函数
php81-php-pecl-xxtea.x86_64 : PHP 的 XXTEA 加密算法扩展
php81-php-pecl-yac.x86_64:无锁用户数据缓存
php81-php-pecl-yaconf.x86_64:又一个配置容器
php81-php-pecl-yaf.x86_64:又一个框架
php81-php-pecl-yaml.x86_64 : yaml 的 PHP 绑定
php81-php-pecl-zip.x86_64 : ZIP 档案管理扩展
php81-php-pecl-zmq.x86_64:ZeroMQ 消息传递
php81-php-pgsql.x86_64 : PHP 的 PostgreSQL 数据库模块
php81-php-phpiredis.x86_64 : Redis 的客户端扩展
php81-php-process.x86_64 : 使用系统进程接口的 PHP 脚本模块
php81-php-pspell.x86_64 : 用于使用 pspell 接口的 PHP 应用程序模块
php81-php-realpath-turbo.x86_64 :尽管 open_basedir 限制使用 realpath 缓存
php81-php-smbclient.x86_64 :libsmbclient 的 PHP 包装器
php81-php-snmp.x86_64 :查询 SNMP 管理设备的 PHP 应用程序模块
php81-php-soap.x86_64 :使用 SOAP 协议的 PHP 应用程序模块
php81-php-sodium.x86_64 : 钠密码库的包装器
php81-php-sqlsrv.x86_64 :用于 SQL Server 的 Microsoft PHP 驱动程序
php81-php-tidy.x86_64 : 标准 PHP 模块提供 tidy 库支持
php81-php-xml.x86_64 :使用 XML 的 PHP 应用程序模块
php81-php-xz.x86_64 : XZ (LZMA2) 压缩/解压
php81-php-zephir-parser.x86_64 : Zephir 代码解析器
php81-php-zstd.x86_64 : Zstandard 扩展
php81-runtime.x86_64 :处理 php81 软件集合的包。
php81-scldevel.x86_64 : php81 的打包开发文件
php81-unit-php.x86_64 :NGINX 单元的 PHP 模块
php81-xhprof.noarch:PHP 的分层分析器 - Web 界面

PHP8.1已经好了,接下来查看一下都安装了哪些扩展软件包。

1
rpm -qa|grep php

谷歌云安装PHP+Mysql+Nginx

也可以使用 php --modules 命令来查询已经安装的PHP扩展。

1
php --modules

如果还需要安装PHP扩展,只需要使用 dnf -y install 命令加上你需要安装的扩展名称。

例如安装PHP的mysqlnd扩展:

1
dnf install -y php-mysqlnd

谷歌云安装PHP+Mysql+Nginx

以上都安装完毕后,接下来,设置php的开机启动。

1
systemctl enable php-fpm

使用 systemctl 命令来管理方便快捷。如果有新的PHP软件包更新,可以使用下面命令,升级最新的可用版本
1
dnf upgrade

好了,到这里PHP8.1的安装就正式完成了,启动PHP服务,让PHP开始工作。

1
systemctl enable php-fpm --now

谷歌云安装PHP+Mysql+Nginx

服务器启动完毕后,看一下PHP8.1的运行状态。

1
systemctl status php-fpm

状态灯是绿色的,就表示PHP已经正常工作了,下面有一些PHP的配置文件需要修改。

PHP8配置

修改php.ini文件

php.ini文件,是php的核心配置文件,谨慎修改!

查找php.ini文件位置

谷歌云安装PHP+Mysql+Nginx

1
php -info | grep php.ini

编辑 php.ini 文件

使用 VI 命令编辑 php.ini 文件,或者使用SFTP登陆服务器,使用记事本编辑修改 php.ini 文件。SFTP客户端推荐使用Xftp。

1
vi /etc/php.ini

将文件内的变量修改成下面的数值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#打印PHP错误:
display_errors = on
#将内存使用增加到256M:
memory_limit = 256M
#文件上传大小,默认值太小,建议修改1G大小,也就是1024M:
upload_max_filesize = 1024M
#表单最大值,建议48M:
post_max_size = 48M
#每个脚本的最大执行时间,以秒为单位:
max_execution_time=600
#可以接受多少个 GET/POST/COOKIE 输入变量:
max_input_vars = 3000
#每个脚本花在解析请求数据上的最长时间:
max_input_time = 1000


修改完毕后,保存退出,接下来修改php的www.conf文件。

修改www.conf文件

www.conf是php-fpm的进程服务的配置文件。

修改用户组和用户名称

设置 www.conf 文件的用户组权限。将 www.conf 的访问权限设置 -R,用户与用户组设置成

1
chown nginx:nginx -R /etc/php-fpm.d/www.conf

编辑 www.conf 文件,修改用户与用户组变量。

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

将www.conf文件内的变量 usergroup 都修改成 nginx

修改完毕后,查看 listen 变量:

注意:变量 listen,默认的是 listen = /run/php-fpm/www.sock 如果你想在Nginx中使用 127.0.0.1:9000 访问PHP的话,那么需要将 listen 变量改成 listen = 127.0.0.1:9000 否则在Nginx中使用 127.0.0.1:9000 无法访问PHP。

修改请求超时时间数值

修改单个请求的超时时间,去掉前面的分号,将数值改成600。
request_terminate_timeout = 600

修改完毕后,:wq 保存文件退出,www.conf 文件修改完毕。到这里php已经安装配置完毕了,重新启动php服务,或者 reboot 重新启动服务器。

1
systemctl reload php-fpm

注意:如果Nginx不支持PHP访问,检查一下listen的变量是否与Nginx设置一致,如果使用127.0.0.1:9000 方式访问,查看防火墙中9000端口是否打开。

1
netstat -lntp

PHP操作台命令

启动PHP:

1
systemctl start php-fpm

停止:

1
systemctl stop php-fpm

重启:

1
systemctl restart php-fpm

重启使修改的配置生效:

1
systemctl reload php-fpm

设置开机启动:

1
systemctl enable php-fpm

PHP当前状态:

1
systemctl status php-fpm

卸载PHP

如果想卸载使用dnf安装的php服务,可以执行卸载命令:

注意:如果你是手工编译安装的php,remove 卸载命令无效,先卸载php主程序,然后再移除系统自带的php-common。

1
2
dnf remove php
dnf remove -y php-common

禁用SELinux

在CentOS 8上永久禁用SELinux

1
vi /etc/selinux/config

将SELinux属性设置为Disabled后重新启动服务器。

配置Nginx

下面以nginx1.20.1版本为例:

编辑nginx.conf

如果想让web网站正常访问,需要编辑修改 Nginx 的配置文件 nginx.conf,nginx.conf 是 Nginx 的核心配置文件。使用 VI 命令编辑 /etc/nginx/nginx.conf。

1
vi /etc/nginx/nginx.conf

下面是一个简单的nginx.conf文件的实例,仅供参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#配置用户或者组
user nginx;

#允许生成的进程数,默认为1
worker_processes auto;

#制定错误日志路径,级别。这个设置可以放入全局块,http块,server块,级别依次为:debug|info|notice|warn|error|crit|alert|emerg,级别越高,记录越少,一般设置error
error_log /var/log/nginx/error.log error;

#指定nginx进程运行文件存放地址
pid /var/run/nginx.pid;

#加载动态模块。
include /usr/share/nginx/modules/*.conf;

#工作模式及连接数上限-events全局设置
events {

#单个work进程允许的最大连接数,默认为512
worker_connections 2048;
}

#http服务器配置文件块
http {
#文件扩展名与文件类型映射表。设定mime类型(邮件支持类型),类型由mime.types文件定义。
include /etc/nginx/mime.types;

#默认文件类型,默认为text/plain
default_type application/octet-stream;

#自定义日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

#设置访问日志路径和格式。combined为日志格式的默认值。
access_log /var/log/nginx/access.log main;

#允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
sendfile on;

#tcp_nopush on;
#连接超时时间,默认为75s,可以在http,server,location块。
keepalive_timeout 65;

#gzip压缩开关,on开启Gzip压缩,默认 off 关闭
gzip on;
#启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 10k;
#gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间
gzip_comp_level 6;
#设置压缩所需要的缓冲区大小
gzip_buffers 32 4k;
# 设置gzip压缩针对的HTTP协议版本,没做负载的可以不用
gzip_http_version 1.1;
#进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml;
#是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
#禁用IE 6 gzip
gzip_disable "MSIE [1-6]\.";

#从 /etc/nginx/conf.d 目录加载模块化配置文件。
include /etc/nginx/conf.d/*.conf;

}

上面是nginx.conf的基本配置,Server网站配置在 /etc/nginx/conf.d/ 目录下设置。

连接FastCGI

如果你想使用PHP脚本来搭建web网站,还需要设置Nginx支持PHP。

下面介绍PHP服务连接模块,进入 /etc/nginx/default.d 目录,查看 php.conf 文件。此文件是安装PHP时候自动生成的文件无需改动,用于将 PHP 脚本传递给 FastCGI 服务器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# pass the PHP scripts to FastCGI server
#
# See conf.d/php-fpm.conf for socket configuration
#
index index.php index.html index.htm;

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_intercept_errors on;
    fastcgi_index  index.php;
    include        fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_pass   php-fpm;
}

进入 /etc/nginx/conf.d 目录,目录中的 php-fpm.conf 文件无需更改, php-fpm.conf 是安装PHP8.1时自动生成,是php.conf的一部分,用于将 PHP 脚本传递给 FastCGI 服务器。

1
2
3
4
5
6
# PHP-FPM FastCGI server
# network or unix domain socket configuration

upstream php-fpm {
        server unix:/run/php-fpm/www.sock;
}

编辑 /etc/nginx/conf.d 目录中的 default.conf 文件,或者新建一个自定义的.conf文件。server{}内是网站配置内容。

这只是一个测试用的例子,生产环境下的server配置要复杂的多。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
listen 80;
server_name localhost;

root /home/www;
index index.html index.htm index.php;

include /etc/nginx/default.d/*.conf;
location / {
try_files $uri $uri/ /index.php?$args ;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

}

添加web存放目录的访问权限:

1
chown nginx:nginx -R /home/www

配置完成之后,在/home/www 目录下,新建index.php文件,粘贴下面代码:

<?php
phpinfo();
?>

这是一个PHP的探针代码,将代码粘贴到index.php后,保存文件,然后root重新启动服务器。

访问Nginx官方PHP FastCGI 示例

Nginx中遇到的问题

出现“nginx: [emerg] unknown directive " " in /etc/nginx/conf.d/”错误,是Windows中使用SFTP上传时的空格转换问题,在Linux下使用VI编辑,不会产生此问题。

卸载Nginx

如果想卸载所有使用dnf安装的nginx,可以执行卸载命令:

1
dnf remove nginx

Nginx操作台命令

启动:

1
systemctl start nginx

停止:

1
systemctl stop nginx

重启(不停止nginx,使修改配置生效):

1
systemctl reload nginx

重启:

1
systemctl restart nginx

设置开机启动:

1
systemctl enable nginx

禁用开机启动:

1
systemctl disable nginx

查看服务状态:

1
systemctl status nginx

到这里Nginx的安装就告一段落了,下面开始安装MYSQL数据库服务。

安装MySQL

Centos8使用dnf安装mysql,首先检查一下系统里有没有安装过mysql。

1
rpm -qa |grep -i mysql

如果服务器上之前没有安装MySQL,那么现在就开始安装。如果之前安装过MySQL,请使用remove命令卸载!

先查找一下数据源里面都有什么版本。

1
dnf list mysql*
谷歌云安装PHP+Mysql+Nginx
安装MySQL

Centos官方的软件源中只找了8.0.26版本的,如果想安装更高的版本,需要使用其它的数据源。

安装MySQL8.0

1
dnf -y install mysql-server
谷歌云安装PHP+Mysql+Nginx
安装MySQL

安装成功之后,启动 MySQL,然后设置开机启动 MySQL。

1
2
3
4
5
6
#启动MySQL
systemctl start mysqld
#设置开机启动
systemctl enable mysqld
#查看MySQL安装版本
mysqladmin --version

最后查看一下已经安装的 MySQL8.0 状态。

1
systemctl status mysqld
谷歌云安装PHP+Mysql+Nginx

OK,绿灯亮,一切正常!接下来配置 MySQL 服务器。

配置MySQL

运行 mysql_secure_installation 脚本,该脚本会执行一些与安全性相关的操作并设置MySQL根密码:

1
sudo mysql_secure_installation
谷歌云安装PHP+Mysql+Nginx

VALIDATE PASSWORD COMPONENT 可用于测试密码并提高安全性。 它检查密码的强度并允许用户只设置那些密码
足够安全。 您想设置 VALIDATE PASSWORD 组件吗?

输入:Y ,回车进入该配置。

谷歌云安装PHP+Mysql+Nginx

选择密码验证策略等级, 输入: 0 (low)

输入一个新的密码,密码要求大于8位,包含大写字母,小写字母数字以及特殊符号,之后再确认输入设置的密码。

谷歌云安装PHP+Mysql+Nginx

确认是否继续使用提供的密码,输入:Y

谷歌云安装PHP+Mysql+Nginx

默认情况下,MySQL 安装有一个匿名用户,允许任何人无需登录就可以登录 MySQL为他们创建的用户帐户。 这仅用于测试,并使安装更顺畅。你应该在进入生产之前删除它们环境。

是否移除匿名用户? 输入: Y

谷歌云安装PHP+Mysql+Nginx
通常,只允许 root 连接'本地主机'。 这确保了有人无法猜测来自网络的root密码。

禁止使用root远程登陆MySQL 输入: N

谷歌云安装PHP+Mysql+Nginx

默认情况下,MySQL 带有一个名为“test”的数据库,任何人都可以访问。 这也仅用于测试,并且应该在进入生产之前被移除环境。

移除MySQL自带的test测试数据库 输入:Y

谷歌云安装PHP+Mysql+Nginx

重新加载权限表,将确保所有更改到目前为止所做的将立即生效。

重新载入权限表, 输入:Y 

MySQL8.0默认已经是utf8mb4字符集,所以字符集不再修改。MySQL到这一步已经配置成功了!

配置mysql远程登陆

如果需要设置root账户远程登陆,重复上一步骤中,再允许root远程登陆这一步,设置为Y。

接下来使用 mysql -u root -p 命令登录MySQL,将root用户的host字段设为'%',意为接受root所有IP地址的登录请求。

1
UPDATE USER SET host='%' WHERE user='root';

设置之后重启mysql服务:

1
systemctl restart mysqld

MySQL操作台命令

启动:

1
systemctl start mysqld

停止:

1
systemctl stop mysqld

重启:

1
systemctl restart mysqld

设置开机启动:

1
systemctl enable mysqld

查看MySQL Server状态:

1
systemctl status mysqld

到这里,就全部安装完毕!php+mysql+nginx 的Linux环境已经搭建成功了。

订阅
提醒
guest
1 评论
最新
最旧 得票最多
内联反馈
查看所有评论
固元膏
固元膏
2022年1月16日 11:25

走到php就走不下去了。新手