如何在CentOS8上安装Linux、Apache、MariaDB、PHP(LAMP)堆栈
介绍
“LAMP”堆栈是一组开源软件,通常安装在一起以使服务器能够托管用 PHP 编写的动态网站和 Web 应用程序。 该术语是一个首字母缩写词,代表 Linux 操作系统,带有 Apache Web 服务器。 后端数据存储在 MariaDB 数据库中,动态处理由 PHP 处理。
LAMP 堆栈中的数据库层通常是 MySQL 数据库服务器,但在 CentOS 8 发布之前,默认 CentOS 存储库中不提供 MySQL。 正因为如此,MariaDB,一个 MySQL 的社区分支,成为了一个被广泛接受的 MySQL 替代品,作为 CentOS 机器上 LAMP 堆栈的默认数据库系统。 MariaDB 可作为原始 MySQL 服务器的直接替代品,这实际上意味着您可以切换到 MariaDB,而无需在应用程序中进行任何配置或代码更改。
在本指南中,您将在 CentOS 8 服务器上安装 LAMP 堆栈,使用 MariaDB 作为数据库管理系统。
先决条件
要遵循本指南,您需要以具有 sudo 权限的非 root 用户身份访问 CentOS 8 服务器,并在服务器上安装活动防火墙。 要进行此设置,您可以按照我们的 CentOS 8 初始服务器设置指南进行操作。
第 1 步 — 安装 Apache Web 服务器
为了向我们的网站访问者显示网页,我们将使用 Apache,一种流行的开源 Web 服务器,可以配置为提供 PHP 页面。 我们将使用 dnf
包管理器,它是 CentOS 8 上新的默认包管理器,来安装这个软件。
安装 httpd
包:
sudo dnf install httpd
出现提示时,输入 y
以确认您要安装 Apache。
安装完成后,运行以下命令启用并启动服务器:
sudo systemctl start httpd
如果您按照我们的初始服务器设置指南启用了 firewalld
防火墙,则需要允许连接到 Apache。 以下命令将永久启用 HTTP 连接,默认情况下在端口 80
上运行:
sudo firewall-cmd --permanent --add-service=http
要验证是否应用了更改,您可以运行:
sudo firewall-cmd --permanent --list-all
你会看到这样的输出:
Outputpublic target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client http ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
您需要重新加载防火墙配置以使更改生效:
sudo firewall-cmd --reload
添加新的防火墙规则后,您可以通过从 Web 浏览器访问服务器的公共 IP 地址或域名来测试服务器是否已启动并运行。
注意:如果您使用 DigitalOcean 作为 DNS 托管服务提供商,您可以查看我们的 产品文档 以获取有关如何设置新域名并将其指向您的服务器的详细说明。
如果您没有指向您的服务器的域名并且您不知道您的服务器的公共 IP 地址,您可以通过运行以下命令找到它:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
这将打印出一些 IP 地址。 您可以在您的网络浏览器中依次尝试它们中的每一个。
作为替代方案,您可以检查从 Internet 上的其他位置查看的 IP 地址是可访问的:
curl -4 icanhazip.com
输入您在 Web 浏览器中收到的地址,它将带您进入 Apache 的默认登录页面:
如果您看到此页面,那么您的 Web 服务器现在已正确安装。
第 2 步 — 安装 MariaDB
现在您已经启动并运行了一个 Web 服务器,您需要安装一个数据库系统以便能够为您的站点存储和管理数据。 我们将安装 MariaDB,这是 Oracle 原始 MySQL 服务器的社区开发分支。
要安装此软件,请运行:
sudo dnf install mariadb-server
安装完成后,您可以启用并启动 MariaDB 服务器:
sudo systemctl start mariadb
为了提高数据库服务器的安全性,建议您运行 MariaDB 预装的安全脚本。 此脚本将删除一些不安全的默认设置并锁定对您的数据库系统的访问。 通过运行启动交互式脚本:
sudo mysql_secure_installation
该脚本将引导您完成一系列提示,您可以在其中对 MariaDB 设置进行一些更改。 第一个提示将要求您输入当前的 数据库根 密码。 不要与 系统根 用户混淆。 数据库根 用户是对数据库系统具有完全权限的管理用户。 因为你刚刚安装了 MariaDB,还没有做任何配置更改,所以这个密码会是空白的,所以在提示符下按 ENTER
即可。
下一个提示询问您是否要设置 数据库根 密码。 因为 MariaDB 为 root 用户使用了一种特殊的身份验证方法,通常比使用密码更安全,所以您现在不需要设置它。 键入 N
,然后按 ENTER
。
从那里,您可以按 Y
然后按 ENTER
接受所有后续问题的默认值。 这将删除匿名用户和测试数据库,禁用远程 root 登录,并加载这些新规则,以便服务器立即尊重您所做的更改。
完成后,输入以下命令登录 MariaDB 控制台:
sudo mysql
这将以管理数据库用户 root 的身份连接到 MariaDB 服务器,这是通过在运行此命令时使用 sudo
推断出来的。 你应该看到这样的输出:
OutputWelcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 9 Server version: 10.3.17-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
请注意,您无需提供密码即可以 root 用户身份进行连接。 这是因为管理 MariaDB 用户的默认身份验证方法是 unix_socket
而不是 password
。 尽管这起初看起来像是一个安全问题,但它使数据库服务器更加安全,因为唯一允许以 root MariaDB 用户身份登录的用户是从控制台连接的具有 sudo 权限的系统用户或通过以相同权限运行的应用程序。 实际上,这意味着您将无法使用管理数据库 root 用户从您的 PHP 应用程序进行连接。
为了提高安全性,最好为每个数据库设置具有较少扩展权限的专用用户帐户,特别是如果您计划在您的服务器上托管多个数据库。 为了演示这样的设置,我们将创建一个名为 example_database 的数据库和一个名为 example_user 的用户,但您可以将这些名称替换为不同的值。
要创建新数据库,请从 MariaDB 控制台运行以下命令:
CREATE DATABASE example_database;
现在您可以创建一个新用户并授予他们对您刚刚创建的自定义数据库的完全权限。 以下命令将此用户的密码定义为 password
,但您应该将此值替换为您自己选择的安全密码:
GRANT ALL ON example_database.* TO 'example_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
这将赋予 example_user 用户对 example\_database
数据库的完全权限,同时阻止该用户在您的服务器上创建或修改其他数据库。
刷新权限以确保它们已保存并在当前会话中可用:
FLUSH PRIVILEGES;
在此之后,退出 MariaDB shell:
exit
您可以通过再次登录 MariaDB 控制台来测试新用户是否具有适当的权限,这次使用自定义用户凭据:
mysql -u example_user -p
请注意此命令中的 -p
标志,它将提示您输入您在创建 example_user 用户时选择的密码。 登录 MariaDB 控制台后,确认您可以访问 example\_database
数据库:
SHOW DATABASES;
这将为您提供以下输出:
Output+--------------------+ | Database | +--------------------+ | example_database | | information_schema | +--------------------+ 2 rows in set (0.000 sec)
要退出 MariaDB shell,请键入:
exit
此时,您的数据库系统已设置完毕,您可以继续安装 PHP,这是 LAMP 堆栈的最后一个组件。
第 3 步 — 安装 PHP
您安装了 Apache 来提供您的内容,并安装了 MariaDB 来存储和管理您的数据。 PHP 是我们设置的组件,它将处理代码以向最终用户显示动态内容。 除了 php
包之外,您还需要 php-mysqlnd
,这是一个 PHP 模块,它允许 PHP 与基于 MySQL 的数据库进行通信。 核心 PHP 包将自动安装为依赖项。
要使用 dnf
包管理器安装 php
和 php-mysqlnd
包,请运行:
sudo dnf install php php-mysqlnd
安装完成后,您需要重新启动 Apache Web 服务器以启用 PHP 模块:
sudo systemctl restart httpd
您的 Web 服务器现在已完全设置。 在下一步中,我们将创建一个 PHP 测试脚本以确保一切都按预期工作。
第 4 步 — 使用 Apache 测试 PHP
CentOS 8 上的默认 Apache 安装将创建一个位于 /var/www/html
的文档根目录。 您无需对 Apache 的默认设置进行任何更改,以便 PHP 在您的 Web 服务器中正常工作。
我们要做的唯一调整是更改 Apache 文档根文件夹的默认权限设置。 这样,您就可以使用常规系统用户在该目录中创建和修改文件,而无需在每个命令前加上 sudo
。
以下命令会将默认 Apache 文档根目录的所有权更改为名为 sammy 的用户和组,因此请务必替换此命令中突出显示的用户名和组以反映系统的用户名和组。
sudo chown -R sammy.sammy /var/www/html/
我们现在将创建一个测试 PHP 页面以确保 Web 服务器按预期工作。
CentOS 8 自带的默认文本编辑器是 vi
。 vi
是一个非常强大的文本编辑器,但对于缺乏使用经验的用户来说可能有些迟钝。 你可能想安装一个更用户友好的编辑器,例如 nano
以方便在你的 CentOS 8 服务器上编辑文件:
sudo dnf install nano
当提示确认安装时,键入 y
。
现在,在 /var/www/html
目录下创建一个名为 info.php
的新 PHP 文件:
nano /var/www/html/info.php
以下 PHP 代码将显示有关服务器上当前运行的 PHP 环境的信息:
/var/www/html/info.php
<?php phpinfo();
完成后,保存并关闭文件。 如果您使用的是 nano
,您可以通过键入 CTRL+X
,然后键入 Y
和 ENTER
来确认。
现在我们可以测试我们的 Web 服务器是否可以正确显示 PHP 脚本生成的内容。 转到您的浏览器并访问您的服务器主机名或 IP 地址,然后是 /info.php
:
http://server_host_or_IP/info.php
你会看到一个类似这样的页面:
通过该页面检查有关您的 PHP 服务器的相关信息后,最好删除您创建的文件,因为它包含有关您的 PHP 环境和您的 CentOS 服务器的敏感信息。 您可以使用 rm
删除该文件:
rm /var/www/html/info.php
如果以后需要,您可以随时重新生成此文件。 接下来,我们将从 PHP 端测试数据库连接。
第 5 步 — 从 PHP 测试数据库连接(可选)
如果您想测试 PHP 是否能够连接到 MariaDB 并执行数据库查询,您可以使用虚拟数据创建一个测试表并从 PHP 脚本查询其内容。
首先,使用您在本指南的 Step 2 中创建的数据库用户连接到 MariaDB 控制台:
mysql -u example_user -p
创建一个名为 todo_list
的表。 在 MariaDB 控制台中,运行以下语句:
CREATE TABLE example_database.todo_list ( item_id INT AUTO_INCREMENT, content VARCHAR(255), PRIMARY KEY(item_id) );
现在,在测试表中插入几行内容。 您可能希望使用不同的值重复下一个命令几次:
INSERT INTO example_database.todo_list (content) VALUES ("My first important item");
要确认数据已成功保存到您的表中,请运行:
SELECT * FROM example_database.todo_list;
您将看到以下输出:
Output+---------+--------------------------+ | item_id | content | +---------+--------------------------+ | 1 | My first important item | | 2 | My second important item | | 3 | My third important item | | 4 | and this one more thing | +---------+--------------------------+ 4 rows in set (0.000 sec)
确认您的测试表中有有效数据后,您可以退出 MariaDB 控制台:
exit
现在您可以创建将连接到 MariaDB 并查询您的内容的 PHP 脚本。 使用您喜欢的编辑器在您的自定义 Web 根目录中创建一个新的 PHP 文件。 我们将为此使用 nano
:
nano /var/www/html/todo_list.php
将以下内容添加到您的 PHP 脚本中:
/var/www/html/todo_list.php
<?php $user = "example_user"; $password = "password"; $database = "example_database"; $table = "todo_list"; try { $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password); echo "<h2>TODO</h2><ol>"; foreach($db->query("SELECT content FROM $table") as $row) { echo "<li>" . $row['content'] . "</li>"; } echo "</ol>"; } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); }
完成编辑后保存并关闭文件。
您现在可以通过访问您的服务器的主机名或公共 IP 地址,然后在 /todo_list.php
后的 Web 浏览器中访问此页面:
http://server_host_or_IP/todo_list.php
您应该会看到这样的页面,显示您在测试表中插入的内容:
这意味着您的 PHP 环境已准备好与您的 MariaDB 服务器连接和交互。
结论
在本指南中,您已经为使用 Apache 作为 Web 服务器为访问者提供 PHP 网站和应用程序建立了一个灵活的基础。 您已经设置 Apache 来处理 PHP 请求,并且还设置了 MariaDB 数据库来存储您网站的数据。