介绍
LEMP 软件堆栈是一组开源软件,它们通常安装在一起以使服务器能够托管动态网站和 Web 应用程序。这个术语实际上是一个首字母缩写词,它代表L inux 操作系统,带有E Nginx Web 服务器(它取代了 LAMP 堆栈的 Apache 组件)。该网站的数据存储在一个中号基于ySQL的数据库,并且动态内容通过处理P HP。
在本指南中,我们将在 CentOS 7 服务器上安装 PHP 7.4 的 LEMP 堆栈,使用 MariaDB 作为数据库管理系统。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/\/.*$//'
这会给你一两行。它们都是正确的地址,但您的计算机可能只能使用其中之一,因此请随意尝试每一个。
另一种方法是使用外部方来告诉您它如何看待您的服务器。您可以通过询问特定服务器您的 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
/etc/php-fpm.d/www.conf
使用nano
或您选择的编辑器打开配置文件:
- sudo nano /etc/php-fpm.d/www.conf
现在查找user
和group
指令。如果您正在使用nano
,您可以点击CTRL
+W
在打开的文件中搜索这些术语。
…
; 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
。我们需要将这些更改为nginx
:
…
; 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
指令的行更改为以下内容:
listen = /var/run/php-fpm/php-fpm.sock;
最后,我们需要更改我们刚刚在listen
指令中定义的套接字文件的所有者和组设置。找到listen.owner
,listen.group
和listen.mode
指令。这些行默认被注释掉。通过删除;
行开头的前置符号来取消注释。然后,将所有者和组更改为nginx
:
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
完成编辑后保存并关闭文件。如果您使用的是nano
,请按CTRL + X
,然后Y
和ENTER
。
要启用并启动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 地址:
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
在php-fpm
.
在创建脚本之前,我们将对 Nginx 文档根目录的默认所有权设置进行更改,以便我们的常规 sudo 用户能够在该位置创建文件。
以下命令会将默认 Nginx 文档根目录的所有权更改为名为sammy的用户和组,因此请务必替换此命令中突出显示的用户名和组,以反映您系统的用户名和组。
- sudo chown -R sammy.sammy /usr/share/nginx/html/
我们现在将创建一个测试 PHP 页面以确保 Web 服务器按预期工作。
info.php
在/usr/share/nginx/html
目录中创建一个名为的新 PHP 文件:
- nano /usr/share/nginx/html/info.php
以下 PHP 代码将显示有关当前在服务器上运行的 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
如果以后需要,您可以随时重新生成此文件。
结论
在本指南中,您已经为向访问者提供 PHP 网站和应用程序构建了一个灵活的基础,使用 Nginx 作为 Web 服务器和最新的 PHP 发行版。您已将 Nginx 设置为通过 处理 PHP 请求php-fpm
,并且还设置了一个 MariaDB 数据库来存储您网站的数据。