不败君

前端萌新&初级后端攻城狮

CentOS7安装PHP7.3和MySQL8.0

CentOS7安装PHP7.3和MySQL8.0

2019-11-01 18:20:55

围观(4887)

上次写了一篇文章 CentOS7安装LNMP环境 ,写完之后回过头来看其实有忽略了一些细节。

本文就再次记录使用 CentOS7 安装 Nginx 还有 PHP7.3 及 MySQL8.0 的过程。

MySQL8.0 安装好之后会有一些坑,导致 PHP 无法正常连接到数据库,本文也将这些解决方法梳理记录一下。


安装 Nginx

yum install nginx -y

安装之后可以到目录:/etc/nginx 使用 VIM 编辑 nginx.conf 配置文件。

例如,可以去除对 IPV6 地址的监听:

server {
    listen 80 default_server;
    #listen [::]:80 default_server;   #这句代码最前面加个#号即可去掉 IPV6 的监听
    server_name  _;
    root         /usr/share/nginx/html;
}

此时已经完成最基本的 Nginx 配置,可开启 Nginx 服务:

nginx

此时,可访问服务器外网 IP 地址来确认是否已经安装成功。安装成功会正常显示网页,否则会出现无法打开。

设置 Nginx 为开机自启:

systemctl enable nginx.service


安装 MySQL8.0

wget https://repo.mysql.com/mysql80-community-release-el7-1.noarch.rpm
rpm -ivh mysql80-community-release-el7-1.noarch.rpm

执行安装命令:

yum install mysql-server -y

安装完成后开启 MySQL:

systemctl start mysqld

设置开机自启:

systemctl enable mysqld.service

由于 MySQL 的安全策略,安装完成后有一个随机的默认密码。可以使用命令查看这个密码:

cat /var/log/mysqld.log | grep "generated for root@localhost"

此时会返回默认的随机密码,如:

A temporary password is generated for root@localhost: ******

返回的 ****** 就是你的随机密码了。

此时有一个坑,使用默认的这个账号,即 root 加默认随机密码配置到 PHP 中,是无法正常连接数据库的。例如报错:

php Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib64/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory

这是因为 MySQL8.0 的新特性。安全策略问题,默认的密码验证插件从以前的 mysql_native_password 改成了 caching_sha2_password。

所以解决方法就是,设置 MySQL8.0 的默认密码验证插件。

先进入到目录:/etc 使用 VIM 编辑 my.cnf 文件。在文件中加入一句代码:

default_authentication_plugin=mysql_native_password

完成编辑后需要重启一下 MySQL:

systemctl restart mysqld

然后使用 root 账号创建新用户并授权,执行命令:

mysql -u root -p

执行命令后需要输入密码,这个密码就是默认的随机密码。本文上方有方法查看。

进入到 MySQL 后,需要修改 root 账号的默认随机密码。执行命令修改:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Passbubaijun.com99&&';

注意:密码必须有数字+大写字母+小写字母+字符,不然会报错。

修改密码后可执行命令创建一个新用户:

create user 'bubaijun_com'@'localhost' identified by 'Passbubaijun.com99&&';

其中,bubaijun_com 是用户名,Passbubaijun.com99&& 是密码。

完成创建新用户后,还需要给该用户授权:

grant all on *.* to 'bubaijun_com'@'localhost' with grant option;

完成后可使用命令退出 MySQL:

exit

此时,PHP 中配置该用户及密码即可正常连接数据库。


安装 PHP

安装 EPEL 源:

yum install epel-release

安装 REMI 源:

yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

安装 Yum 源管理工具:

yum install yum-utils

安装 PHP7.3

yum install -y php73-php-fpm php73-php-cli php73-php-bcmath php73-php-gd php73-php-json php73-php-mbstring php73-php-mcrypt php73-php-mysqlnd php73-php-opcache php73-php-pdo php73-php-pecl-crypto php73-php-pecl-mcrypt php73-php-pecl-geoip php73-php-recode php73-php-snmp php73-php-soap php73-php-xmll

设置开机自启:

systemctl enable php73-php-fpm

启动PHP:

systemctl start php73-php-fpm


配置及运行一个网站

进入目录:/etc/nginx/conf.d 使用 VIM 编辑 test.conf 文件(使用 VIM 命令,不存在则会自动创建文件)

写入代码:

server {
    # 监听 HTTP 协议默认的 [80] 端口。
    listen 80;
    # 绑定主机名(域名)。
    # server_name bubaijun.com;
    # 站点根目录。
    root /usr/share/php;

    # 添加几条有关安全的响应头;与 Google+ 的配置类似,详情参见文末。
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    # 站点默认页面;可指定多个,将顺序查找。
    index index.html index.htm index.php;

    # 指定字符集为 UTF-8
    charset utf-8;

    # Laravel 默认重写规则;删除将导致 Laravel 路由失效且 Nginx 响应 404。
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # 关闭 [/favicon.ico] 和 [/robots.txt] 的访问日志。
    # 并且即使它们不存在,也不写入错误日志。
    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    # 将 [404] 错误交给 [/index.php] 处理,表示由 Laravel 渲染美观的错误页面。
    error_page 404 /index.php;

    # URI 符合正则表达式 [.php$] 的请求将进入此段配置
    location ~ .php$ {
        # 配置 FastCGI 服务地址,可以为 IP:端口,也可以为 Unix socket。
        fastcgi_pass 127.0.0.1:9000;
        # 配置 FastCGI 的主页为 index.php。
        fastcgi_index index.php;
        # 配置 FastCGI 参数 SCRIPT_FILENAME 为 $realpath_root$fastcgi_script_name。
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        # 引用更多默认的 FastCGI 参数。
        include fastcgi_params;
    }
    # 以上配置将所有 URI 以 .php 结尾的请求,全部交给 PHP-FPM 处理。

    # 除符合正则表达式 [/.(?!well-known).*] 之外的 URI,全部拒绝访问
    # 也就是说,拒绝公开以 [.] 开头的目录,[.well-known] 除外
    location ~ /.(?!well-known).* {
        deny all;
    }
}

以上 Nginx 的配置来自:浅析 Laravel 官方文档推荐的 Nginx 配置

配置完成后需要重启 Nginx:

systemctl restart nginx.service

进入目录 /usr/share/php 使用 VIM 命令编辑 test.php 并写入代码:

<?php
    phpinfo();

再回到目录 /etc/nginx 使用 VIM 打开 nginx.conf 文件。将 server 代码段全部删掉。

此时解析域名后访问域名或服务器外网 IP + test.php 即可看到 PHP 的信息。

至此,整个环境的配置已经完成。如果无法访问,而且是使用阿里、腾讯等 IDC 请到安全组看看是否配置端口。


安装 Composer

除此之外,如果需要用到 Composer 则需要另外安装了。执行命令:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php

执行两句命令后即可使用 Composer.

如果安装过程中出现报错:

-bash: php: command not found

说明 PHP 的环境变量没设置,可以通过 test.php 也就是 phpinfo() 函数 查看 PHP 安装路径。比如我的路径是 /opt/remi/php73/root/usr 那就可以执行以下命令设置环境变量:

export PATH=$PATH:/opt/remi/php73/root/usr/bin

设置后还需要执行命令使配置生效:

source /etc/profile


常用命令

启动 PHP:

systemctl start php73-php-fpm

停止/关闭 PHP:

systemctl stop php73-php-fpm

重启 PHP:

systemctl restart php73-php-fpm

启动 MySQL:

systemctl start mysqld

停止/关闭 MySQL:

systemctl stop mysqld

重启 MySQL:

systemctl restart mysqld

开启 Nginx:

systemctl start nginx.service

停止/关闭 Nginx:

systemctl stop nginx.service

重启 Nginx:

systemctl restart nginx.service

VIM 编辑文件:

vim test.conf
vim /etc/nginx/conf.d/test.conf

test.conf 是文件名。第二句命令为使用绝对路径,可在任何路径/目录下编辑指定路径的文件。


Nginx 常见错误

如果出现错误:

Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

可以执行命令查看详细错误信息:

systemctl status nginx.service

如果报错:

ExecStart=/usr/sbin/nginx (code=exited, status=1/FAILURE)

应该是端口被占用了,执行命令关闭占用端口的程序:

sudo fuser -k 80/tcp

还可以执行命令查看被占用的端口:

netstat -ntlp


本文地址 : bubaijun.com/page.php?id=145

版权声明 : 未经允许禁止转载!

上一篇文章: 学习使用docker搭建lnmp环境

下一篇文章: PHP发送电子邮件

评论:我要评论
发布评论:
Copyright © 不败君 粤ICP备18102917号-1

不败君

首 页 作 品 微 语