Centos 7 安装PHP7.4 + Nginx + MySQL

PHP7.4正式版已经发布!本文详细记录了基于Centos 7安装PHP7.4 + Nginx + MySQL来搭建WEB服务器的过程。

PHP7.4支持箭头函数、代码预加载等新特性,详细了解PHP7.4的新特性请点击:php7.4新特性

安装PHP

  1. 下载PHP 7.4.0源代码:
    wget https://www.php.net/distributions/php-7.4.0.tar.gz

    如果下载速度太慢,可以使用PHP 7.4国内高速下载地址:

    1
    wget https://gz-1257226027.cos.ap-guangzhou.myqcloud.com/php-7.4.0.tar.gz
  2. 解压缩源代码:
    tar -zxvf php-7.4.0.tar.gz

  3. 安装依赖:

    1
    2
    3
    4
    sudo yum install openssl-devel libxml2-devel bzip2-devel \
    libcurl-devel libjpeg-devel libpng-devel freetype-devel \
    libmcrypt-devel recode-devel libicu-devel libzip-devel\
    libxml2-devel sqlite-devel bzip2-devel libcurl-devel libicu-devel
    1
    2
    sudo yum install https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/o/oniguruma-5.9.5-3.el7.x86_64.rpm
    sudo yum install https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/o/oniguruma-devel-5.9.5-3.el7.x86_64.rpm

    如果上面这两个包不安装,编译的时候会提示No package ‘oniguruma’ found。

  4. 进入源代码包文件夹,编译、安装:
    cd php-7.4.0/

    ./configure --prefix=/usr/local/php7 --with-config-file-scan-dir=/usr/local/php7/etc/php.d --with-config-file-path=/usr/local/php7/etc --enable-mbstring --enable-zip --enable-bcmath --enable-pcntl --enable-ftp --enable-xml --enable-shmop --enable-soap --enable-intl --with-openssl --enable-exif --enable-calendar --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-opcache --enable-fpm --enable-session --enable-sockets --enable-mbregex --enable-wddx --with-curl --with-iconv --with-gd --with-jpeg-dir=/usr --with-png-dir=/usr --with-zlib-dir=/usr --with-freetype-dir=/usr --enable-gd-jis-conv --with-openssl --with-pdo-mysql=mysqlnd --with-gettext=/usr --with-zlib=/usr --with-bz2=/usr --with-recode=/usr --with-xmlrpc --with-mysqli=mysqlnd

    sudo make install

  5. 复制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

  6. 复制php配置文件:
    sudo cp php.ini-production /usr/local/php7/etc/php.ini

  7. 为php添加环境变量,编辑 /etc/profile,文件末尾添加一行:
    PATH=/usr/local/php7/bin:/usr/local/php7/sbin:$PATH

  8. 将php添加到sudo环境变量,编辑 /etc/sudoers中的 Defaults secure_path,加上PHP路径 :
    /usr/local/php7/bin:/usr/local/php7/sbin:

  9. 使环境变量生效:
    source /etc/profile

  10. 启动PHP:
    sudo php-fpm

  11. 使用php -v命令查看PHP版本:

    1
    2
    3
    4
    [root@3e03cbfd6de4 php-7.4.0]# php -v
    PHP 7.4.0 (cli) (built: Nov 28 2019 13:57:09) ( NTS )
    Copyright (c) The PHP Group
    Zend Engine v3.4.0, Copyright (c) Zend Technologies

安装Nginx

  1. 下载Nginx源代码:
    wget http://nginx.org/download/nginx-1.17.6.tar.gz

  2. 解压Nginx源代码:
    tar -zxvf nginx-1.17.6.tar.gz

  3. 安装依赖:
    sudo yum install pcre-devel zlib-devel gcc gcc-c++ openssl openssl-devel

  4. 进入源代码文件夹,配置、编译、安装:

    cd nginx-1.17.6/

    ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module

    make

    sudo make install

  1. 为nginx添加环境变量, 在 /etc/profile 文件 末尾添加一行:
    PATH=/usr/local/nginx/sbin/:$PATH

  2. 使环境变量生效:
    source /etc/profile

  3. 添加sudo环境变量,编辑 /etc/sudoers 文件中 Defaults secure_path 属性加上nginx的路径:,修改后的内容:
    Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/nginx/sbin/:

  4. 启动Nginx:
    sudo nginx

配置nginx解析PHP

安装完nginx和php后,还要先配置nginx解析php文件,否则访问php页面时会直接下载php源代码到浏览器。
编辑nginx的配置文件:

1
sudo vim /usr/local/nginx/conf/nginx.conf

找到下面这段代码:

1
2
3
4
location / {
root html;
index index.html index.htm;
}

在后面添加一段:

1
2
3
4
5
6
7
8
9
location ~ \.php(.*)$  {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}

保存后,保存后重新启动nginx:

1
sudo nginx -s reload

在网站根目录创建一个php文件:

1
sudo vi /usr/local/nginx/html/index.php

写入以下php代码并保存:

1
2
<?php
phpinfo();

在浏览器中输入服务器的IP地址看到phpinfo信息说明配置解析PHP成功。

安装Mariadb

  1. 安装mariadb
    sudo yum install mariadb mariadb-server

  2. 启动mariadb:
    sudo systemctl start mariadb

  3. 执行数据库初始化安装:

    1
    sudo mysql_secure_installation

    根据提示设置数据库root用户密码、是否允许外网访问等。提示信息如下:
    Enter current password for root: 输入当前数据库root用户密码,直接回车即可。
    Set root password?: 是否设置root用户密码,输入Y,随后输入并确认root密码。
    Remove anonymous users?: 是否移除匿名数据库用户,根据自己需求选择
    Disallow root login remotely?:是否禁止root用户远程登录,根据自己需求选择
    Remove test database and access to it?:是否删除测试数据库test,自己选择
    Reload privilege tables now?:是否刷新数据库权限表,选Y

  1. 尝试使用mysql -u root -p登录数据库,输入刚才设置的密码后提示错误如下:

    1
    2
    3
    $ mysql -u root -p
    Enter password:
    ERROR 1698 (28000): Access denied for user 'root'@'localhost'

    原因是数据库默认使用Linux系统的用户来登录数据库,需要将登录方式修改为密码登录。

    解决方法:
    使用sudo mysql -u root登录数据库,在数据库中依次执行以下语句,修改登录方式并刷新权限:

    mysql
    1
    2
    3
    4
    use mysql #切换到mysql数据库
    update user set plugin='mysql_native_password'; #修改plugin字段
    flush privileges; #刷新权限
    exit; #退出数据库

    再次输入mysql -u root -p即可通过密码登录数据库,无需root权限执行。

  2. mariadb配置文件目录和常用命令
    mariadb配置文件保存在多个位置:
    /etc/mysql/mariadb.cnf
    /etc/mysql/mariadb.conf.d/
    /etc/mysql/conf.d/

    mariadb常用命令:
    启动mariadb: sudo systemctl start mariadb
    关闭mariadb:systemctl stop mariadb
    设置mariadb开机启动:sudo systemctl enable mariadb