介绍
LEMP软件堆栈是一组软件,可以用来服务动态的网页和网页应用程序写在PHP。名称LEMP
是描述一个L inux操作系统的简称,具有Nginx(发音为** E** ngine-X
)的网页服务器。后端数据存储在一个 ** M** ariaDB数据库中,动态处理由 ** P** HP处理。
LEMP 堆栈中的数据库层通常是 MySQL 数据库服务器,但在 CentOS 8 发布之前,MySQL 无法从默认的 CentOS 存储库中获得。 因此,MariaDB(https://mariadb.org/),MySQL 的社区堆栈,成为 MySQL 作为 CentOS 机器上 LEMP 堆栈的默认数据库系统的广泛接受的替代品。 MariaDB 作为原始 MySQL 服务器的插入替代品,实际上意味着您可以切换到 MariaDB 而无需在应用程序中进行任何配置或代码更改。
在本指南中,您将在 CentOS 8 服务器上安装 LEMP 堆栈.虽然 MySQL 可从 CentOS 8 中的默认存储库中使用,但本指南将通过设置 LEMP 堆栈的过程来使用 MariaDB 作为数据库管理系统。
前提条件
要遵循此指南,您需要访问 CentOS 8 服务器作为具有 sudo 权限的非根用户,并在您的服务器上安装一个活跃的防火墙。
步骤1:安装 Nginx Web 服务器
为了向我们的网站访问者显示网页,我们将使用高性能网页服务器 Nginx,我们将使用dnf
包管理器,即CentOS 8上的新的默认包管理器来安装该软件。
安装nginx
包:
1sudo dnf install nginx
当被提示时,输入y
来确认您想要安装nginx。
安装完成后,运行以下命令来启用和启动服务器:
1sudo systemctl start nginx
如果您已根据我们的初始服务器设置指南启用了firewalld
防火墙,则需要允许连接到 Nginx。
1sudo firewall-cmd --permanent --add-service=http
要验证该更改已应用,您可以运行:
1sudo firewall-cmd --permanent --list-all
你会看到这样的输出:
1[secondary_label Output]
2public
3 target: default
4 icmp-block-inversion: no
5 interfaces:
6 sources:
7 services: cockpit dhcpv6-client http ssh
8 ports:
9 protocols:
10 masquerade: no
11 forward-ports:
12 source-ports:
13 icmp-blocks:
14 rich rules:
您需要重新加载防火墙配置,以便更改生效:
1sudo firewall-cmd --reload
随着新增的防火墙规则,您可以通过从您的 Web 浏览器访问服务器的公共 IP 地址或域名来测试服务器是否正在运行。
<$>[注] 注 :如果您正在使用DigitalOcean作为DNS托管提供商,您可以检查我们的 产品文件 有关如何设置新域名并将其指向您的服务器的详细说明。
如果你没有指向你的服务器的域名,而你不知道你的服务器的公共IP地址,你可以通过运行以下命令来找到它:
1ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
這將打印出幾個IP地址,您可以在您的網頁瀏覽器中嘗試每一個。
或者,您可以检查哪个 IP 地址可访问,如从互联网上的其他位置查看:
1curl -4 icanhazip.com
输入您在 Web 浏览器中接收的地址,它将带您到 Nginx 的默认定位页面:
如果您看到此页面,那么您的 Web 服务器现在已正确安装。
第2步:安装MariaDB
现在你有一个Web服务器并运行,你需要安装一个数据库系统,以便能够为你的网站存储和管理数据. 我们将安装MariaDB(https://mariadb.org/),由Oracle开发的原始MySQL服务器的一个社区开发的叉子。
要安装此软件,请运行:
1sudo dnf install mariadb-server
安装完成后,您可以启用并启动 MariaDB 服务器:
1sudo systemctl start mariadb
为了提高您的数据库服务器的安全性,建议您运行预先安装的安全脚本 MariaDB. 此脚本将删除一些不安全的默认设置,并锁定访问您的数据库系统。
1sudo mysql_secure_installation
此脚本将带您通过一系列提示,您可以对您的 MariaDB 设置做出一些更改。第一个提示将要求您输入当前的 database root 密码。这不应该与 ** system root** 用户混淆。
接下来的提示会问你是否想要设置一个 数据库根 ** 密码. 因为 MariaDB 对于 ** root 用户使用了一种特殊的身份验证方法,通常比使用密码更安全,所以你不需要现在设置这个密码。
从那里,您可以按Y
,然后按ENTER
,以接受所有后续问题的默认值,从而删除匿名用户和测试数据库,禁用远程 root 登录,并加载这些新规则,以便服务器立即尊重您所做的更改。
完成后,请通过键入以下方式登录 MariaDB 控制台:
1sudo mysql
这将作为管理数据库用户 root 连接到MariaDB服务器,在运行此命令时使用sudo
来推断。
1[secondary_label Output]
2Welcome to the MariaDB monitor. Commands end with ; or \g.
3Your MariaDB connection id is 9
4Server version: 10.3.17-MariaDB MariaDB Server
5
6Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
7
8Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
9
10MariaDB [(none)]>
请注意,您不需要提供密码以作为 root 用户连接。 这是因为管理 MariaDB 用户的默认身份验证方法是unix_socket
而不是password
。 虽然这起初可能看起来像是一个安全问题,但它使数据库服务器更安全,因为唯一允许登录作为 ** root** MariaDB 用户的用户是从控制台或通过运行具有相同权限的应用程序连接的 sudo 权限的系统用户。
为了提高安全性,最好为每个数据库设置具有较少扩展权限的专用用户帐户,特别是如果您计划在您的服务器上托管多个数据库。
若要创建新数据库,请从 MariaDB 控制台执行以下命令:
1CREATE DATABASE example_database;
现在,您可以创建一个新的用户,并在您刚刚创建的自定义数据库中授予他们完整的权限. 以下命令将该用户的密码定义为密码
,但您应该用您选择的安全密码来代替此值:
1GRANT ALL ON example_database.* TO 'example_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
这将赋予 example_user 用户对example_database
数据库的完整权限,同时阻止该用户在您的服务器上创建或修改其他数据库。
清除权限,以确保它们在当前会话中存储和可用:
1FLUSH PRIVILEGES;
接下来,输出 MariaDB 壳:
1exit
您可以通过再次登录 MariaDB 控制台来测试新用户是否有正确的权限,这次使用自定义用户凭证:
1mysql -u example_user -p
请注意这个命令中的p
旗,它会提示您在创建 example_user 用户时选择的密码。登录到MariaDB控制台后,确认您可以访问example_database
:
1SHOW DATABASES;
这将为您带来以下结果:
1[secondary_label Output]
2+--------------------+
3| Database |
4+--------------------+
5| example_database |
6| information_schema |
7+--------------------+
82 rows in set (0.000 sec)
要退出 MariaDB 壳,键入:
1exit
在此时,您的数据库系统已设置,您可以继续安装PHP,这是LEMP堆栈的最终组件。
步骤 3 – 安装 PHP-FPM
你安装了 Nginx 来服务你的内容,安装了 MariaDB 来存储和管理你的数据,现在你可以安装 PHP 来处理代码,并为 Web 服务器生成动态内容。
虽然Apache在每个请求中嵌入PHP翻译器,但 Nginx需要一个外部程序来处理PHP处理,并作为PHP翻译器本身和Web服务器之间的桥梁。这使得大多数PHP网站的整体性能更好,但需要额外的配置。您需要安装php-fpm
,这代表PHP fastCGI流程管理器
,并告诉Nginx将PHP请求传递给该软件进行处理。此外,您还需要php-mysqlnd
,一个PHP模块,允许PHP与基于MySQL的数据库进行通信。
要安装php-fpm
和php-mysql
包,请运行:
1sudo dnf install php-fpm php-mysqlnd
安装完成后,您需要编辑 /etc/php-fpm.d/www.conf
文件以调整两个设置。
与CentOS 8一起提供的默认文本编辑器是vi
。vi
是一个极其强大的文本编辑器,但对于缺乏经验的用户来说,它可能有点杂,您可能想安装一个更用户友好的编辑器,例如nano
,以便在CentOS 8服务器上编辑配置文件:
1sudo dnf 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]
2…
3; 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…
完成编辑后保存并关闭文件. 如果您使用nano
,请按CTRL + X
,然后按Y
和ENTER
。
要启用并启动php-fpm
服务,请运行:
1sudo systemctl start php-fpm
最后,重新启动 Nginx Web 服务器,以便加载由php-fpm
安装创建的配置文件:
1sudo systemctl restart nginx
在下一步,我们将创建一个PHP测试脚本,以确保一切按预期工作。
步骤 4 – 使用 Nginx 测试 PHP
在CentOS 8上,默认的php-fpm安装会自动创建配置文件,允许您的 Nginx Web 服务器在位于 /usr/share/nginx/html 的默认文档根中处理
.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
你会看到一个类似于此的页面:
在通过该页面检查有关您的PHP服务器的相关信息后,最好删除您创建的文件,因为它包含有关您的PHP环境和您的CentOS服务器的敏感信息。
1rm /usr/share/nginx/html/info.php
您可以随时再生此文件,如果您需要它以后,接下来,我们将从PHP侧测试数据库连接。
步骤 5 — 从 PHP 测试数据库连接(可选)
如果你想测试PHP是否能够连接到MariaDB并执行数据库查询,你可以从PHP脚本中创建一个测试表,其中包含虚假数据和查询。
首先,与您在 [步骤 2](# step-2-%E2%80%94-installing-mariadb)中创建的数据库用户连接到 MariaDB 控制台:
1mysql -u example_user -p
创建一个名为 todo_list
的表格. 从 MariaDB 控制台运行以下语句:
1CREATE TABLE example_database.todo_list (
2 item_id INT AUTO_INCREMENT,
3 content VARCHAR(255),
4 PRIMARY KEY(item_id)
5);
现在,在测试表中插入几个内容行. 您可能想要重复下一个命令几次,使用不同的值:
1INSERT INTO example_database.todo_list (content) VALUES ("My first important item");
若要确认数据已成功保存到表中,请运行:
1SELECT * FROM example_database.todo_list;
您将看到以下结果:
1[secondary_label Output]
2+---------+--------------------------+
3| item_id | content |
4+---------+--------------------------+
5| 1 | My first important item |
6| 2 | My second important item |
7| 3 | My third important item |
8| 4 | and this one more thing |
9+---------+--------------------------+
104 rows in set (0.000 sec)
在确认您在测试表中有有效数据后,您可以退出 MariaDB 控制台:
1exit
现在你可以创建的PHP脚本,将连接到MariaDB和查询你的内容。创建一个新的PHP文件在你的自定义网页根目录使用你喜欢的编辑器。
1nano /usr/share/nginx/html/todo_list.php
将以下内容添加到您的 PHP 脚本中:
1[label /usr/share/nginx/html/todo_list.php]
2<?php
3$user = "example_user";
4$password = "password";
5$database = "example_database";
6$table = "todo_list";
7
8try {
9 $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
10 echo "<h2>TODO</h2><ol>";
11 foreach($db->query("SELECT content FROM $table") as $row) {
12 echo "<li>" . $row['content'] . "</li>";
13 }
14 echo "</ol>";
15} catch (PDOException $e) {
16 print "Error!: " . $e->getMessage() . "<br/>";
17 die();
18}
保存并关闭文件,当你完成编辑。
您现在可以通过访问您的服务器的主机名称或公共 IP 地址访问您的 Web 浏览器中的此页面,然后是 /todo_list.php
:
1http://server_host_or_IP/todo_list.php
您应该看到这样的页面,显示您在测试表中插入的内容:
这意味着您的PHP环境已经准备好连接并与MariaDB服务器进行交互。
结论
在本指南中,您已经建立了一个灵活的基础来为您的访问者提供PHP网站和应用程序,使用NGINX作为Web服务器,您已经设置了NGINX来处理PHP请求,通过php-fpm,您还设置了一个MariaDB数据库来存储您的网站数据。