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

介绍

一个LEMP软件堆栈是一组开源软件,通常被安装在一起,使服务器能够托管动态网站和Web应用程序. 这个术语实际上是一个缩写,代表了 L inux操作系统,与 ** E** Nginx Web 服务器(取代了LAMP堆栈的Apache组件)。

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

前提条件

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

步骤 1 - 安装 Nginx

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

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

1sudo yum install epel-release

由于我们正在使用一个sudo命令,这些操作会用 root 权限执行. 它会要求你使用你的常规用户密码来验证你有权运行root 权限的命令。

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

1sudo yum install nginx

安装完成后,请使用以下方式启动 Nginx 服务:

1sudo systemctl start nginx

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

1[secondary_label Open in a web browser:]
2http://server_domain_name_or_IP/

您将看到默认的 CentOS 7 Nginx 网页,该网页用于信息和测试。

CentOS 7 Nginx Default

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

要允许 Nginx 启动,请运行以下命令:

1sudo systemctl enable nginx

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

如果你不知道你的服务器的公共IP地址是什么,有几种方法可以找到它,通常,这是你用来通过SSH连接到你的服务器的地址。

从命令行,你可以找到几种方法,首先,你可以使用iproute2工具来输入你的地址:

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

它们都是正确的地址,但您的计算机可能只能使用其中一个,所以可以尝试每一个。

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

1curl http://icanhazip.com

无论您使用哪种方法获取您的IP地址,您都可以将其输入到您的Web浏览器的地址栏中,到达您的服务器。

第2步:安装MariaDB

现在我们已经安装了我们的Web服务器,现在是时候安装MariaDB,MySQL drop-in替代品MariaDB是MySQL关系数据库管理系统的社区开发的叉子。

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

1sudo yum install mariadb-server mariadb

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

1sudo systemctl start mariadb

现在我们的MariaDB数据库正在运行,我们想要运行一个安全脚本,它将删除一些危险的默认值,并锁定访问我们的数据库。

1sudo mysql_secure_installation

提示会问你当前的 MariaDB 密码. 因为你刚刚安装了 MariaDB,你很可能没有一个,所以通过点击 Enter 让它空。 然后提示会问你是否想要设置一个密码。 继续进来输入Y并遵循说明:

 1[secondary_label mysql_secure_installation prompts:]
 2Enter current password for root (enter for none): 
 3OK, successfully used password, moving on...
 4
 5Setting the root password ensures that nobody can log into the MariaDB
 6root user without the proper authorisation.
 7
 8Set root password? [Y/n] y
 9New password: 
10Re-enter new password: 
11Password updated successfully!
12Reloading privilege tables..
13 ... Success!

对于其他问题,您应该通过每个提示按ENTER键来接受默认值,从而删除一些样本用户和数据库,禁用远程根登录,并加载这些新规则,以便MySQL立即尊重我们所做的更改。

您要做的最后一件事是启用 MariaDB 启动,请使用以下命令:

1sudo systemctl enable mariadb

此时,您的数据库系统已设置,我们可以继续前进。

步骤三:安装PHP

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

默认情况下 CentOS 7 服务器中可用的 PHP 版本已经过时,因此,我们需要安装第三方包存,以获得 PHP 7+ 并在 CentOS 7 服务器上安装它。

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

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

安装完成后,您需要运行命令来启用包含您喜爱的 PHP 版本的存储库. 要检查哪些 PHP 7+ 版本在 Remi 存储库中可用,运行:

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

你会看到这样的输出:

 1[secondary_label Output]
 2Loaded plugins: fastestmirror
 3Loading mirror speeds from cached hostfile
 4 * remi-safe: mirrors.ukfast.co.uk
 5Available Packages
 6php70.x86_64 2.0-1.el7.remi remi-safe
 7php71.x86_64 2.0-1.el7.remi remi-safe
 8php72.x86_64 2.0-1.el7.remi remi-safe
 9php73.x86_64 2.0-1.el7.remi remi-safe
10php74.x86_64 1.0-3.el7.remi remi-safe
11php80.x86_64 1.0-3.el7.remi remi-safe

在本指南中,我们将安装PHP 7.4,这是目前最新的PHP的稳定版本. 要启用正确的Remi包来安装PHP 7.4,运行:

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

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

1sudo yum install php php-mysqlnd php-fpm

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

1php --version

你会看到这样的输出:

1[secondary_label Output]
2PHP 7.4.5 (cli) (built: Apr 14 2020 12:54:33) ( NTS )
3Copyright (c) The PHP Group
4Zend Engine v3.4.0, Copyright (c) Zend Technologies

PHP现在已经成功安装在您的系统上。接下来,我们需要对默认配置进行一些调整。为了在CentOS上轻松编辑文件,我们首先会安装nano,一个比vi更用户友好的文本编辑器:

1sudo yum install nano

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

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

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

 1[label /etc/php-fpm.d/www.conf]
 2 3; Unix user/group of processes
 4; Note: The user is mandatory. If the group is not set, the default user's group
 5;       will be used.
 6; RPM: apache user chosen to provide access to the same directories as httpd
 7user = apache
 8; RPM: Keep a group allowed to write in log dir.
 9group = apache
10

您会注意到用户变量都设置为apache,我们需要将它们更改为nginx:

1[label /etc/php-fpm.d/www.conf]
23; RPM: apache user chosen to provide access to the same directories as httpd
4user = nginx
5; RPM: Keep a group allowed to write in log dir.
6group = nginx
7

接下来,找到倾听指令. 默认情况下,php-fpm 会听到特定主机和端口通过 TCP. 我们希望更改此设置,以便在本地接口文件上倾听,因为这会提高服务器的整体性能。

1[label /etc/php-fpm.d/www.conf]
2listen = /var/run/php-fpm/php-fpm.sock;

最后,我们需要更改我们刚刚在倾听指令中定义的接口文件的所有者和组设置。 查找listen.owner,listen.grouplisten.mode指令。 这些行是默认地评论出来的。 通过删除前面的;字符在行开头。 然后,将所有者和组更改为nginx:

1[label /etc/php-fpm.d/www.conf]
2listen.owner = nginx
3listen.group = nginx
4listen.mode = 0660

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

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

1sudo systemctl start php-fpm

接下来,我们将配置 Nginx,以便它发送所有对PHP脚本的请求,以便由php-fpm处理。

步骤 4 — 配置 Nginx 来处理 PHP 页面

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

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

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

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

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

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

 1[label /etc/nginx/conf.d/default.conf]
 2server {
 3    listen 80;
 4    server_name server_domain_or_IP;
 5
 6    root   /usr/share/nginx/html;
 7    index index.php index.html index.htm;
 8
 9    location / {
10        try_files $uri $uri/ =404;
11    }
12    error_page 404 /404.html;
13    error_page 500 502 503 504 /50x.html;
14
15    location = /50x.html {
16        root /usr/share/nginx/html;
17    }
18
19    location ~ \.php$ {
20        try_files $uri =404;
21        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
22        fastcgi_index index.php;
23        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
24        include fastcgi_params;
25    }
26}

保存并关闭文件,当你完成。

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

1sudo systemctl restart nginx

在下一步,我们将测试 PHP 与 Nginx 的集成。

步骤 5 – 在您的 Web 服务器上测试 PHP 处理

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

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

下列命令会将默认的 Nginx 文档根的所有权更改为名为 sammy 的用户和组,因此请确保在此命令中更换突出的用户名和组以反映您的系统的用户名和组。

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

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

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

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

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

1[label /usr/share/nginx/html/info.php]
2<?php
3
4phpinfo();

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

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

1http://server_host_or_IP/info.php

你会看到一个类似于此的页面:

CentOS 7 PHP 7.4 info

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

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

您可以随时重建此文件,如果您需要它以后。

结论

在本指南中,您已经建立了一个灵活的基础来为您的访问者提供PHP网站和应用程序,使用NGINX作为Web服务器和最新的PHP版本。

Published At
Categories with 技术
comments powered by Disqus