如何在CentOS7上安装Linux、Nginx、MySQL、PHP(LEMP)堆栈

来自菜鸟教程
跳转至:导航、​搜索

介绍

LEMP 软件堆栈是一组开源软件,通常安装在一起以使服务器能够托管动态网站和 Web 应用程序。 这个术语实际上是一个首字母缩写词,代表 Linux 操作系统,带有 ENginx Web 服务器(它取代了 LAMP 堆栈的 Apache 组件)。 站点数据存储在基于 MySQL 的数据库中,动态内容由 PHP 处理。

在本指南中,我们将使用 MariaDB 作为数据库管理系统,在 CentOS 7 服务器上安装 PHP 7.4 的 LEMP 堆栈。 MariaDB 可作为原始 MySQL 服务器的直接替代品,这实际上意味着您可以切换到 MariaDB,而无需在应用程序中进行任何配置或代码更改。

先决条件

在开始阅读本指南之前,您应该在服务器上设置一个单独的非 root 用户帐户。 您可以通过完成 CentOS 7 初始服务器设置中的步骤 1-4 来了解如何执行此操作。

第 1 步 — 安装 Nginx

为了向我们的网站访问者显示网页,我们将使用 Nginx,一个高性能的网络服务器。 要获得最新的 Nginx 版本,我们将首先安装 EPEL 存储库,其中包含用于 CentOS 7 操作系统的附加软件。

要添加 CentOS 7 EPEL 存储库,请运行以下命令:

sudo yum install epel-release

由于我们使用的是 sudo 命令,因此这些操作以 root 权限执行。 它将要求您输入常规用户的密码,以验证您是否有权以 root 权限运行命令。 系统还会提示您确认安装,因此请按 Y 继续。

现在 EPEL 存储库已安装在您的服务器上,使用以下 yum 命令安装 Nginx:

sudo yum install nginx

安装完成后,启动 Nginx 服务:

sudo systemctl start nginx

您可以立即进行抽查,通过在 Web 浏览器中访问服务器的公共 IP 地址来验证一切是否按计划进行(如果您没有此信息,请参阅下一个标题下的注释以了解您的公共 IP 地址是什么)已经):

Open in a web browser:http://server_domain_name_or_IP/

您将看到默认的 CentOS 7 Nginx 网页,用于提供信息和测试目的。 它应该看起来像这样:

如果您看到此页面,那么您的 Web 服务器现在已正确安装。

要使 Nginx 在启动时启动,请运行以下命令:

sudo systemctl enable nginx

如何查找服务器的公共 IP 地址

如果您不知道服务器的公共 IP 地址是什么,可以通过多种方式找到它。 通常,这是您用于通过 SSH 连接到服务器的地址。

从命令行,您可以通过几种方式找到它。 首先,您可以使用 iproute2 工具通过键入以下内容获取您的地址:

ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

这会给你一两行回来。 它们都是正确的地址,但您的计算机可能只能使用其中一个,因此请随意尝试每一个。

另一种方法是使用外部方告诉您 it 如何看到您的服务器。 您可以通过询问特定服务器您的 IP 地址是什么来做到这一点:

curl http://icanhazip.com

无论您使用何种方法获取 IP 地址,您都可以在 Web 浏览器的地址栏中键入它以访问您的服务器。

第 2 步 — 安装 MariaDB

现在我们的 Web 服务器已经启动并运行了,是时候安装 MariaDB 了,它是 MySQL 的替代品。 MariaDB 是 MySQL 关系数据库管理系统的社区开发分支。

同样,我们可以使用 yum 来获取和安装我们的软件。 这一次,我们还将安装一些其他帮助程序包,以帮助我们让我们的组件相互通信:

sudo yum install mariadb-server mariadb

安装完成后,我们需要使用以下命令启动 MariaDB:

sudo systemctl start mariadb

现在我们的 MariaDB 数据库正在运行,我们想要运行一个安全脚本,该脚本将删除一些危险的默认值并锁定对我们数据库的访问。 通过运行启动交互式脚本:

sudo mysql_secure_installation

提示将询问您当前的 root MariaDB 密码。 由于您刚刚安装了 MariaDB,因此您很可能没有安装,因此请按 Enter 将其留空。 然后提示将询问您是否要设置root密码。 继续输入 Y,然后按照说明进行操作:

mysql_secure_installation prompts:Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!

对于其余的问题,您应该在每个提示中按“ENTER”键以接受默认值。 这将删除一些示例用户和数据库,禁用远程 root 登录,并加载这些新规则,以便 MySQL 立即尊重我们所做的更改。

您要做的最后一件事是让 MariaDB 在启动时启动。 使用以下命令执行此操作:

sudo systemctl enable mariadb

至此,您的数据库系统现已设置完毕,我们可以继续。

第 3 步 — 安装 PHP

PHP 是我们设置的组件,它将处理代码以显示动态内容。 它可以运行脚本,连接到我们的 MySQL 数据库以获取信息,并将处理后的内容交给我们的 Web 服务器进行显示。

CentOS 7 服务器中默认可用的 PHP 版本已过时,因此,我们需要安装第三方软件包存储库才能获取 PHP 7+ 并将其安装在您的 CentOS 7 服务器上。 Remi 是一个流行的软件包存储库,为 CentOS 服务器提供最新的 PHP 版本。

要为 CentOS 7 安装 Remi 存储库,请运行:

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

安装完成后,您需要运行命令来启用包含您首选 PHP 版本的存储库。 要检查 Remi 存储库中有哪些 PHP 7+ 版本可用,请运行:

yum --disablerepo="*" --enablerepo="remi-safe" list php[7-9][0-9].x86_64

你会看到这样的输出:

OutputLoaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * remi-safe: mirrors.ukfast.co.uk
Available Packages
php70.x86_64                                              2.0-1.el7.remi                                       remi-safe
php71.x86_64                                              2.0-1.el7.remi                                       remi-safe
php72.x86_64                                              2.0-1.el7.remi                                       remi-safe
php73.x86_64                                              2.0-1.el7.remi                                       remi-safe
php74.x86_64                                              1.0-3.el7.remi                                       remi-safe
php80.x86_64                                              1.0-3.el7.remi                                       remi-safe

在本指南中,我们将安装 PHP 7.4,它是当前最新的 PHP 稳定版本。 要启用正确的 Remi 包以安装 PHP 7.4,请运行:

sudo yum-config-manager --enable remi-php74

现在我们可以像往常一样继续使用 yum 来安装 PHP。 以下命令将安装所有必需的包以在 Nginx 中设置 PHP 7.4 并允许它连接到基于 MySQL 的数据库:

sudo yum install php php-mysqlnd php-fpm

要确认 PHP 可用作您选择的版本,请运行:

php --version

你会看到这样的输出:

OutputPHP 7.4.5 (cli) (built: Apr 14 2020 12:54:33) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

PHP 现在已成功安装在您的系统上。 接下来,我们需要对默认配置进行一些调整。 为了方便在 CentOS 上编辑文件,我们首先安装 nano,一个比 vi 更人性化的文本编辑器:

sudo yum install nano

使用 nano 或您选择的编辑器打开 /etc/php-fpm.d/www.conf 配置文件:

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

现在寻找 usergroup 指令。 如果您使用的是 nano,您可以点击 CTRL+W 在打开的文件中搜索这些术语。

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

…
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache
…

您会注意到 usergroup 变量都设置为 apache。 我们需要将这些更改为 nginx

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

…
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
…

接下来,找到 listen 指令。 默认情况下,php-fpm 将通过 TCP 侦听特定主机和端口。 我们想更改此设置,使其侦听本地套接字文件,因为这提高了服务器的整体性能。 将包含 listen 指令的行更改为以下内容:

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

listen = /var/run/php-fpm/php-fpm.sock;

最后,我们需要更改刚刚在 listen 指令中定义的套接字文件的所有者和组设置。 找到 listen.ownerlisten.grouplisten.mode 指令。 这些行默认被注释掉。 通过删除行首前面的 ; 符号来取消注释。 然后,将所有者和组更改为 nginx

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

listen.owner = nginx
listen.group = nginx
listen.mode = 0660

完成编辑后保存并关闭文件。 如果您使用 nano,请按 CTRL + X,然后按 YENTER

要启用和启动 php-fpm 服务,请运行:

sudo systemctl start php-fpm

您的 PHP 环境现已准备就绪。 接下来,我们将配置 Nginx,以便它发送所有对 PHP 脚本的请求以由 php-fpm 处理。

第 4 步 — 配置 Nginx 以处理 PHP 页面

现在,我们已经安装了所有必需的组件。 我们仍然需要做的唯一配置更改是告诉 Nginx 使用我们的 PHP 处理器来处理动态内容。

Nginx 有一个专用目录,我们可以在其中使用服务器块将每个托管网站定义为单独的配置文件。 这类似于 Apache 的虚拟主机。

但是,在默认安装中,此目录是空的。 我们将创建一个新文件作为此服务器上的默认 PHP 网站,它将覆盖 /etc/nginx/nginx.conf 文件中定义的默认服务器块。

首先,在/etc/nginx/conf.d目录下新建一个文件:

sudo nano /etc/nginx/conf.d/default.conf

将以下 PHP 服务器定义块复制到您的配置文件中,不要忘记替换 server_name 指令,使其指向您服务器的域名或 IP 地址:

/etc/nginx/conf.d/default.conf

server {
    listen       80;
    server_name  server_domain_or_IP;

    root   /usr/share/nginx/html;
    index index.php index.html index.htm;

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

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

完成后保存并关闭文件。

接下来,重新启动 Nginx 以应用更改:

sudo systemctl restart nginx

您的 Web 服务器现在已完全设置。 在下一步中,我们将测试 PHP 与 Nginx 的集成。

第 5 步 — 在您的 Web 服务器上测试 PHP 处理

现在您的 Web 服务器已设置好,我们可以创建一个测试 PHP 脚本,以确保 Nginx 在 php-fpm 的帮助下正确处理 .php 脚本。

在创建脚本之前,我们将对 Nginx 文档根目录的默认所有权设置进行更改,以便我们的常规 sudo 用户能够在该位置创建文件。

以下命令会将默认 Nginx 文档根目录的所有权更改为名为 sammy 的用户和组,因此请务必替换此命令中突出显示的用户名和组以反映您系统的用户名和组。

sudo chown -R sammy.sammy /usr/share/nginx/html/

我们现在将创建一个测试 PHP 页面以确保 Web 服务器按预期工作。

/usr/share/nginx/html 目录下创建一个名为 info.php 的新 PHP 文件:

nano /usr/share/nginx/html/info.php

以下 PHP 代码将显示有关服务器上当前运行的 PHP 环境的信息:

/usr/share/nginx/html/info.php

<?php

phpinfo();

完成后,保存并关闭文件。

现在我们可以测试我们的 Web 服务器是否可以正确显示 PHP 脚本生成的内容。 转到您的浏览器并访问您的服务器主机名或 IP 地址,然后是 /info.php

http://server_host_or_IP/info.php

你会看到一个类似这样的页面:

通过该页面检查有关您的 PHP 服务器的相关信息后,最好删除您创建的文件,因为它包含有关您的 PHP 环境和您的 CentOS 服务器的敏感信息。 您可以使用 rm 删除该文件:

rm /usr/share/nginx/html/info.php

如果以后需要,您可以随时重新生成此文件。

结论

在本指南中,您已经为使用 Nginx 作为 Web 服务器和最新的 PHP 发布版本为访问者提供 PHP 网站和应用程序建立了一个灵活的基础。 您已经设置了 Nginx 以通过 php-fpm 处理 PHP 请求,并且还设置了 MariaDB 数据库来存储您网站的数据。