介绍
“LAMP”堆栈是一组开源软件,它们通常安装在一起以使服务器能够托管用 PHP 编写的动态网站和 Web 应用程序。该术语是代表一个缩写大号inux下操作系统,与甲帕什web服务器。后端数据存储在一个中号ariaDB数据库和动态处理是通过处理P HP。
LAMP 堆栈中的数据库层通常是 MySQL 数据库服务器,但在 CentOS 8 发布之前,默认 CentOS 存储库中不提供 MySQL。正因为如此,MySQL 的社区分支MariaDB成为广泛接受的 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。以下命令将永久启用80
默认在端口上运行的 HTTP 连接:
- 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 地址。您可以在 Web 浏览器中依次尝试每一个。
作为替代方案,您可以检查从 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 设置进行一些更改。第一个提示将要求您输入当前的数据库 root密码。这不要与系统 root用户混淆。该数据库根用户是在数据库系统完全权限的管理用户。因为您刚刚安装了 MariaDB,还没有进行任何配置更改,所以这个密码将为空,所以只需ENTER
在提示下按即可。
下一个提示询问您是否要设置数据库 root密码。因为 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 包将自动安装为依赖项。
要使用包管理器安装php
和php-mysqlnd
包dnf
,请运行:
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
在提示确认安装时键入。
现在,info.php
在/var/www/html
目录中创建一个名为的新 PHP 文件:
- nano /var/www/html/info.php
以下 PHP 代码将显示有关当前在服务器上运行的 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 脚本查询其内容。
首先,使用您在本指南的第 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 脚本中:
<?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 地址在您的 Web 浏览器中访问此页面,后跟/todo_list.php
:
http://server_host_or_IP/todo_list.php
您应该会看到一个这样的页面,其中显示了您插入到测试表中的内容:
这意味着您的 PHP 环境已准备好连接您的 MariaDB 服务器并与之交互。
结论
在本指南中,您已经构建了一个灵活的基础,可以使用 Apache 作为 Web 服务器为访问者提供 PHP 网站和应用程序。您已经设置了 Apache 来处理 PHP 请求,并且还设置了一个 MariaDB 数据库来存储您网站的数据。