LNMP 环境配置(基于 CentOS 7 + Nginx 1.8.0 + PHP 7.4.16 + MySQL 8.0.22)

CentOS 的配置

安装 net-tools

默认安装的 CentOS 没有 ifconfig 命令,需要安装 net-tools 工具才能支持。

$ yum install net-tools

设置静态 IP

在虚拟机里面安装的 CentOS,如果使用 DHCP 模式的网络配置,有时候会自动变更 IP 地址,为了后续操作不受 IP 地址变更的影响,将其设为固定的静态 IP 。

$ cd /etc/sysconfig/network-scripts/
$ cp ifcfg-ens33 ifcfg-ens33.bak
$ vi ifcfg-ens33

修改为以下内容。

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
#BOOTPROTO="dhcp"

BOOTPROTP="static"
IPADDR="192.168.245.132"
NETMASK="255.255.255.0"
GATEWAY="192.168.245.2"
DNS1="192.168.245.2"

DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="e276b54a-1dcc-41db-9975-c9c762ed431f"
DEVICE="ens33"
ONBOOT="yes"

说明:

这里的 NETMASK 与 GATEWAY 可以通过查看 VMware 的 “编辑->虚拟机网络编辑器->NAT 模式->NAT 设置” 里面的信息来配置。DNS1 设置成 与 GATEWAY 一样即可,IPADDR 设置成在 GATEWAY 网段的 IP 即可。

重启网络服务

$ systemctl reload network

或者重启系统。然后使用 ping 命令检测试一下是否能够访问外部网络。

设置时间和时区

系统安装后,使用 date 命令查看时间,发现其与当前的北京时间不一致,可以使用 ntpdate 来更新系统时间。

# 安装 ntpdate 工具
$ yum install ntpdate
# 更新系统时间
$ ntpdate cn.pool.ntp.org

安装 Nginx

安装依赖包

$ yum -y install gcc zlib-devel pcre-devel openssl-devel

获取 Nginx 安装包

在 Nginx 官网获取 Nginx 的安装包,官网下载页面地址如下。

http://nginx.org/en/download.html

可以手动进行下载,也可以使用 wget 命令进行下载,使用 wget 下载命令如下。

# 安装 wget
$ yum -y install wget
# 使用 wget 下载 Nginx 源码包
$ wget http://nginx.org/download/nginx-1.18.0.tar.gz

编译安装

# 解压下载的源码包
$ tar -zxvf nginx-1.18.0.tar.gz
# 进入解压后的目录
$ cd nginx-1.18.0
# 配置 Nginx 的编译选项,指定 Nginx 的安装目录
$ ./configure --prefix=/usr/local/nginx --with-http_ssl_module
# 通过 make 命令编译和安装 Nginx
$ make && make install

Nginx 的服务管理

# 切换到 Nginx 安装目录中的 sbin 目录
$ cd /usr/local/nginx/sbin
# 启动 Nginx
$ ./nginx

Nginx 启动后没有任何提示,可以通过以下命令查看 Nginx 的运行状态。

$ ps aux | grep nginx
root      57040  0.0  0.1  45972  1120 ?        Ss   16:03   0:00 nginx: master process ./nginx
nobody    57041  0.0  0.1  46412  1872 ?        S    16:03   0:00 nginx: worker process
root      57043  0.0  0.0 112824   984 pts/1    R+   16:03   0:00 grep --color=auto nginx

建立软连接

为了更方便地使用 Nginx,可以将 Nginx 软链接到 /usr/local/sbin 目录中,这样不论当前处于什么目录下,都可以直接使用命令操作 Nginx。创建软连接命令如下。

$ ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/nginx

ln 命令用于创建链接,选项 “-s” 表示创建软链接,类似 Windows 的快捷方式,后面跟两个路径,第 1 个路径是源文件路径,第 2 个路径是目标文件路径。

访问测试

设置防火墙,开放 80 端口。

# 查看防火墙是否正在工作
$ firewall-cmd --state
# 始终开放 80 端口
$ firewall-cmd --zone=public --add-port=80/tcp --permanent
# 使防火墙配置立即生效
$ systemctl reload firewalld
# 查看 80 端口是否已经开放
$ firewall-cmd --zone=public --query-port=80/tcp

注意:

如果提示 FirewallD is not running ,使用 systemctl start firewalld 命令启动防火墙。

设置 Nginx 开机启动

  1. 创建服务脚本。
$ vi /usr/lib/systemd/system/nginx.service
  1. 在服务脚本中编写如下内容。
[Unit]
Description=nginx = high performance web server
Documentation=http://nginx.org/en/docs
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
WorkingDirectory=/usr/local/nginx
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target
  1. 保存服务脚本后,可以通过如下命令管理 Nginx 服务。
$ systemctl start nginx
$ systemctl reload nginx
$ systemctl stop nginx
  1. 使用如下命令设置 Nginx 服务开机启动。
$ systemctl enable nginx
  1. 查看 Nginx 服务是否已经开机启动。
$ systemctl list-unit-files | grep nginx

提示:

可以使用以下命令查看服务的启动状态。

$ systemctl status nginx.service

如果修改了 .service 服务脚本,需要执行如下命令重新加载服务脚本,修改才会生效。

$ systemctl daemon-reload

禁止服务开机启动。

$ systemctl disable nginx.service

安装 PHP

安装依赖包

$ yum install libxml2-devel openssl-devel curl-devel libjpeg-devel freetype-devel libpng-devel sqlite-devel

以下两个依赖是 php 7.4.x 版本需要的。

$ yum install https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/o/oniguruma-6.8.2-1.el7.x86_64.rpm
$ yum install https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/o/oniguruma-devel-6.8.2-1.el7.x86_64.rpm

获取 PHP 源代码

官网下载地址如下。

https://www.php.net/downloads.php

可以手动下载源代码包,也可以使用 wget 下载,使用 wget 下载命令如下。

$ wget https://www.php.net/distributions/php-7.4.16.tar.gz

PHP 的编译安装

$ tar -zxvf php-7.4.16.tar.gz
$ cd php-7.4.16
$ ./configure --prefix=/usr/local/php --enable-zip --enable-mbstring --enable-fpm --enable-bcmath --enable-opcache --with-zlib --with-mysqli --with-pdo-mysql --with-openssl --with-mhash --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-curl
$ make && make install

上面的命令有些选项的前缀是 enable,有些是 with,其区别在于 enable 选项用于开启 PHP 的一些内置功能,而 with 选项依赖于系统中的共享库,如果系统中没有则需要安装相应的依赖包。

注意:

如果出现 unrecognized options: --enable-zip, --with-gd, --with-jpeg-dir, --with-png-dir, --with-freetype-dir 类似的提示(php 8.x 版本会报),使用 ./configure --help 查看一下正确的写法。因为每个版本的 php 这些选项 with 或 enable 都不太一样。

简单使用 PHP

安装完成后,可以使用 /usr/local/php/bin 目录的 php 执行 PHP 文件或代码。示例如下。

$ cd /usr/local/php/bin
$ ./php -r 'echo 8*40, "
";'
320

建立软连接

为了方便使用 php 命令,可以将 php 程序链接到 /usr/local/bin 目录中。

$ ln -s /usr/local/php/bin/php /usr/local/bin/php

配置 Nginx 解析 PHP

创建配置文件

对于 Nginx 而言,PHP 是一个外部程序,若想要 Nginx 能够解析 PHP,需要用到 FastCGI。FastCGI 是 Web 服务器与外部程序之间的接口标准。PHP 提供的 PHP-FPM (FastCGI Process Manager)就是一个 FastCGI 进程管理器,在使用 PHP-FPM 管理 PHP 之前,需要先创建配置文件。操作如下。

# 创建 PHP-FPM 的配置文件
$ cd /usr/local/php/etc
$ cp php-fpm.conf.default php-fpm.conf
$ cp php-fpm.d/www.conf.default php-fpm.d/www.conf
# 创建 PHP 的配置文件
$ cd ~/php-7.4.16
$ cp php.ini-development /usr/local/php/lib/php.ini

管理 PHP-FPM 服务

PHP-FPM 的可执行文件位于 PHP 安装目录下的 sbin 目录下,虽然执行 sbin 目录下的 php-fpm 可以启动 PHP-FPM,但此方式比较麻烦,PHP 解压后的源码包提供了 service 方式管理 PHP-FPM 的 shell 脚本,将此脚本复制到系统目录中,通过实现开机启动。具体操作如下。

$ vi /usr/lib/systemd/system/php-fpm.service

添加以下内容。

[Unit]
Description=The PHP FastCGI Process Manager
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/php/sbin/php-fpm
PrivateTmp=true

[Install]
WantedBy=multi-user.target

添加到开机启动项。

$ systemctl enable php-fpm

然后就可以通过 systemctl 方式管理 PHP-FPM 了。

$ systemctl start php-fpm
$ systemctl reload php-fpm
$ systemctl restart php-fpm
$ systemctl stop php-fpm

在启动 PHP-FPM 后,可使用 ps aux | grep php 查看程序的主进程用户是 root,子进程工作于 nobody 用户;利用 ss -tlnp | grep php 可查看 PHP-FPM 监听的端口,默认端口号是9000。

在 Nginx 配置文件中添加对 PHP 的支持

打开 Nginx 配置文件

$ cd /usr/local/nginx/conf
$ vi nginx.conf

在打开的配置文件的 http 块的节结束位置大括号前添加以下配置。

http {
	# ……(原有代码)
    include vhost/*.conf;       #用于加载 vhost 目录下的所有配置文件
}

创建 vhost 目录,并在 vhost 目录中配置一个虚拟主机。

$ mkdir vhost
$ vi vhost/192.168.245.132.conf

添加以下内容。

server {
    listen 80;
    server_name 192.168.245.132;   
    root html;
    index index.html index.php;
    location ~ .php$ {
        try_files $uri = 404;
        fastcgi_pass 127.0.0.1:9000;
        include fastcgi.conf;
    }
}

上面的配置中各项说明。

  • listen 指定 Nginx 服务器监听的端口号。
  • server_name 用于设置主机域名。
  • root 用于设置主机站点根目录路径。
  • index 指定默认索引文件。
  • location 用于匹配路径以 “.php” 结尾的请求,将这些请求发送给监听本机(127.0.0.1)9000端口的 FastCGI 程序(即 PHP)。
  • try_files 指令用来检测文件是否存在,如不存在则 Nginx 会优先返回 404 页面,并且不会发送给 PHP 执行。
  • include fast.conf 用于引入 FastCGI 的环境变量配置。

完成以上操作,执行 systemctl reload nginx 命令使配置生效,或者重启系统。

访问测试

在 Nginx 的站点根目录中创建一个 test.php 文件,用于输出 phpinfo 信息。

$ cd /usr/local/nginx/html
$ echo '<?php phpinfo();' > test.php

然后通过浏览器访问 http://192.168.245.132/test.php (前面在虚拟主机配置中配置的主机),如果能够看到 PHP 的配置信息页面,说明配置成功。

安装 MySQL

安装编译工具和依赖包

$ yum install gcc-c++ cmake ncurses-devel

安装 CMake 3

MySQL 8.x 版本需要使用到 CMake3,而使用 yum 安装的 cmake 是 2.x 版本,因此需要自己下载 CMake 源码进行安装。

CMake 官网链接如下。

https://cmake.org/download/

安装步骤如下。

# 解压 CMake 源码
$ tar -zxvf cmake-3.20.0.tar.gz

# 编译安装
$ cd cmake-3.20.0
$ ./bootstrap
$ gmake
$ gmake install

# 卸载老版本 CMake
$ yum remove cmake

# 为新版本 CMake 创建软连接
$ ln -s /usr/local/bin/cmake /usr/bin/cmake

# 查看版本
$ cmake --version
cmake version 3.20.0

CMake suite maintained and supported by Kitware (kitware.com/cmake).

获取 MySQL 的源代码

在 MySQL 官网上提供了其源代码的下载,地址如下。

https://downloads.mysql.com/archives/community/

MySQL 提供了两种版本的源代码,文件名分别为 mysql-8.0.22.tar.gz 和 mysql-boost-8.0.22.tar.gz,且别是后者的版本包含了 Boost 头文件,而前者不包含。为了方便,此处选择 mysql-boost-8.0.22.tar.gz。

可以手动进行下载,也可以使用 wget 进行下载,使用 wget 下载方式如下。

$ wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-8.0.22.tar.gz

编译安装

编译安装 MySQL 共分为两步:第 1 步是执行 cmake 生成 Makefile 文件,第 2 步是执行 make 命令编译。具体操作如下。

# 解压源码
$ tar -zxvf mysql-boost-8.0.22.tar.gz
$ cd mysql-8.0.22
$ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DWITH_BOOST=boost -DWITH_SYSTEMD=1 -DMYSQL_DATADIR=/var/lib/mysql -DMYSQLX_UNIX_ADDR=/tmp/mysql.sock -DSYSTEMD_PID_DIR=/var/lib/mysql
$ make && make install

注意:

解决 GCC 5.3 or newer is required (-dumpversion says 4.8.5) 的问题

# 安装软件集成包,这里面能够找到新版的 gcc
$ yum install centos-release-scl scl-utils-build
# 安装 gcc、g++
$ yum install devtoolset-9-gcc devtoolset-9-gcc-c++
# 切换为 scl 的 bash
$ scl enable devtoolset-9 bash

然后删除原来解压的 MySQL 源码包,重新解压,重新编译安装即可,如果还是不行的话卸载原来的 gcc、gcc-c++,即执行以下命令。

$ yum remove gcc gcc-c++

然后再重新使用 devtoolset-9 的 bash 模式(此模式不是永久的,每次重启后会自动变为正常模式的 bash,因此需要使用的时候需要再使用 scl enable 命令开启)重新进行编译安装的全部步骤。

另一个注意:

编译安装比较耗时,虚拟机需要编译很久,需要耐心等待,建议使用 -j 设置多一点编译线程数。中途可以使用 Ctrl + C 中断编译,想要继续编译的时候,再次使用 make && make install 命令即可,会接着上次没编译完的继续编译。

创建配置文件

# 备份 CentOS 系统自带的配置文件
$ mv /etc/my.cnf /etc/my.cnf.bak
$ vi /etc/my.cnf

添加以下内容。

[mysqld]
port=3306
log-error=/var/lib/mysql/mysqld.log
symbolic-links=0
user=mysql

其中各配置项用途。

  • port 表示端口。
  • log-error 表示错误日志路径。
  • symbolic-links 设为 0 表示禁用符号链接。
  • user 表示 MySQL 的工作用户。

在 Linux 中,禁用符号链接,为 MySQL 指定一个专门的用户(而不是使用 root 用户),都是为了提高安全性。

下面创建 mysql 用户。

# 创建 mysql 用户组和用户,并禁止登录
$ groupadd mysql
$ useradd -r -M -g mysql -s /bin/false mysql

上述操作中各项意义如下。

  • groupadd 用于创建用户组。
  • useradd 用于创建用户。
  • useradd 的选项 -r 表示创建系统用户,-M 表示不创建用户目录,-g mysql 表示加入 mysql 用户组, -s /bin/false 表示禁止登录。

初始化数据库

# 切换至 mysql 安装目录
$ cd /usr/local/mysql
# 初始化数据库
$ ./bin/mysqld --initialize-insecure
# 查看初始化后的文件
$ ls /var/lib/mysql

管理 MySQL 服务

将 MySQL 提供的 mysqld.service 服务脚本复制到 CentOS 的 systemd 目录中,就可以使用 systemctl 命令来管理 MySQL 服务。

$ cp ~/mysql-8.0.22/scripts/mysqld.service /usr/lib/systemd/system/
$ systemctl enable mysqld

登录 MySQL 设置 root 用户密码

在 MySQL 服务启动后,使用客户端工具登录 MySQL,具体操作如下。

# 切换到 MySQL 客户端工具所在目录
$ cd /usr/local/mysql/bin
# 运行客户端程序,登录 MySQL
$ ./mysql -uroot
# 设置 root 用户的密码为 root
> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
# 退出客户端程序
> exit

为了方便的在任意目录使用 mysql 命令,在 /usr/local/bin 目录中创建一个软链接。

$ ln -s `pwd`/mysql /usr/local/bin/mysql
# 或者
$ ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql
原文地址:https://www.cnblogs.com/QingXiaxu/p/14609606.html