Skip to main content

LEMP堆栈:Linux、Nginx、MySQL、PHP

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

导言

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

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

先决条件

在开始使用本指南之前,您应该在服务器上设置一个单独的非根用户帐户。您可以通过在CentOS 7初始服务器设置中完成步骤1-4学习如何做到这一点。

第1步——安装Nginx

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

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

  1. sudo yum install epel-release

Since we are using a sudo command, these operations get executed with root privileges. It will ask you for your regular user’s password to verify that you have permission to run commands with root privileges. You’ll also be prompted to confirm installation, so press Y to proceed.

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

  1. sudo yum install nginx

安装完成后,从以下位置开始Nginx服务:

  1. sudo systemctl start nginx

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

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

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

CentOS 7 Nginx默认值

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

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

  1. sudo systemctl enable nginx

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

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

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

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

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

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

  1. curl http://icanhazip.com

无论您使用哪种方法来获取IP地址,都可以将其输入网页浏览器的地址栏以访问服务器。

第2步——安装MariaDB

既然我们已经安装并运行了Web服务器,是时候安装MySQL下拉式替代品MariaDB了。MariaDB是MySQL关系数据库管理系统的社区开发的分叉。

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

  1. sudo yum install mariadb-server mariadb

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

  1. sudo systemctl start mariadb

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

  1. sudo mysql_secure_installation

提示将要求您提供当前的rootMariaDB密码。由于您刚刚安装了MariaDB,您很可能不会安装MariaDB,所以按回车键将其留空。然后提示将询问您是否要设置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”键来接受默认值。这将删除一些示例用户和数据库,禁用远程根登录,并加载这些新规则,以便MySQL立即尊重我们所做的更改。

您最不想做的事情是启用MariaDB启动。使用以下命令进行操作:

  1. sudo systemctl enable mariadb

此时,您的数据库系统现已建立,我们可以继续。

第3步——安装PHP

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

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

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

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

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

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

您将看到这样的输出:

Output
Loaded 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,请运行:

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

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

  1. sudo yum install php php-mysqlnd php-fpm

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

  1. php --version

您将看到这样的输出:

Output
PHP 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更方便用户的文本编辑器:

  1. sudo yum install nano

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

  1. 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
…

您会注意到user变量和group变量都设置为apache。我们需要改变这些tonginx:

/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;

Finally, we’ll need to change the owner and group settings for the socket file we just defined within the listen directive. Locate the listen.owner, listen.group and listen.mode directives. These lines are commented out by default. Uncomment them by removing the preceding ; sign at the beginning of the line. Then, change the owner and group to nginx:

/etc/php-fpm.d/www.conf
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

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

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

  1. sudo systemctl start php-fpm

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

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

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

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

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

首先,在/etc/nginx/conf.d目录中打开一个新文件:

  1. 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以应用更改:

  1. sudo systemctl restart nginx

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

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

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

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

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

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

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

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

  1. 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

您将看到一个类似的页面:

CentOS 7 PHP 7.4信息

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

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

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

结论

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