如何在 CentOS 7 上安装 Linux、Apache、MySQL、PHP (LAMP) 堆栈
介绍
“LAMP”堆栈是一组开源软件,通常安装在一起以使服务器能够托管动态网站和 Web 应用程序。该术语是代表 Linux 操作系统和 Apache Web 服务器的首字母缩写词。站点数据通常存储在 MySQL 数据库中,动态内容由 PHP 处理。
在大多数 Linux 系统上,您可以通过从系统的默认包管理存储库下载 mysql-server
包来安装 MySQL。然而,在 CentOS 7 上,mysql-server
软件包实际上会安装 MariaDB,它是 MySQL 关系数据库管理系统的社区开发分支,可作为 MySQL 的直接替代品。因此,本教程将概述如何在 CentOS 7 服务器上安装由 Linux、Apache、MariaDB 和 PHP 组成的 LAMP 堆栈。
先决条件
在开始本指南之前,您应该在服务器上设置一个单独的非根用户帐户。您可以按照我们的 CentOS 7 初始服务器设置教程了解如何执行此操作。
第 1 步 — 安装 Apache Web 服务器
Apache 是一种流行的开源 Web 服务器,用于向访问者显示网页。您可以将其配置为提供 PHP 页面。
使用 CentOS 的包管理器 yum
安装 Apache。软件包管理器允许您从 CentOS 维护的存储库安装大多数软件。
在您的终端中键入此命令以安装 httpd
Apache 软件包:
- sudo yum install httpd
出现提示时,输入 Y
以确认 Apache 安装。
- sudo systemctl start httpd
您可以通过在网络浏览器中输入您的公共 IP 地址或域名来测试您的服务器是否正在运行。
注意:如果您使用 DigitalOcean 作为 DNS 托管提供商,您可以查看我们的产品文档以获取有关如何设置新域名并将其指向您的服务器的详细说明。
如果您没有指向您的服务器的域名或不知道您服务器的公网 IP 地址,您可以通过运行以下命令找到它:
- ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
这将打印出几个不同的地址。您可以在 Web 浏览器中尝试其中的每一个。
另一种方法是使用外部方来告诉您它如何看待您的服务器。您可以通过使用此命令询问特定服务器您的 IP 地址是什么来执行此操作:
- curl http://icanhazip.com
无论您选择哪种方法,请在您的 Web 浏览器中输入您的 IP 地址以验证您的服务器是否正在运行。
http://your_server_IP_address
您将看到默认的 CentOS 7 Apache 登录页面:
您可以启用 Apache 在启动时启动:
- sudo systemctl enable httpd.service
第 2 步 — 安装 MySQL (MariaDB)
在您的 Web 服务器启动并运行后,您可以安装 MariaDB。它将组织并提供对数据库的访问,您的站点可以在其中存储信息。
要安装 MariaDB 软件包,请运行:
- sudo yum install mariadb-server
安装完成后,启动 MariaDB:
- sudo systemctl start mariadb
您可以使用以下命令使 MariaDB 在启动时启动:
- sudo systemctl enable mariadb.service
为了提高数据库服务器的安全性,建议您运行 MariaDB 预装的安全脚本。此脚本将删除一些不安全的默认设置并锁定对数据库系统的访问。
通过运行以下命令启动交互式脚本:
- sudo mysql_secure_installation
该脚本将引导您完成一系列提示,您可以在其中对 MariaDB 设置进行一些更改。第一个提示将要求您输入当前数据库的根密码。不要将其与系统根用户混淆。数据库根用户是对数据库系统具有完全权限的管理用户。因为您刚刚安装了 MariaDB 并且没有进行任何配置更改,所以此密码将为空。在出现提示时按 ENTER
。
下一个提示询问您是否要设置数据库根密码。键入 N
,然后按 ENTER
。
从那里,您可以按 Y
,然后按 ENTER
,接受所有后续问题的默认值。这将删除匿名用户和测试数据库,禁用远程 root 登录,并加载这些新规则,以便服务器立即遵守您所做的更改。
完成后,输入以下命令登录到 MariaDB 控制台:
- sudo mysql
这会将您作为管理数据库用户 root 连接到 MariaDB 服务器:
OutputWelcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 12
Server version: 5.5.68-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.
为了提高安全性,最好为每个数据库设置具有较少扩展权限的专用用户帐户。如果您计划在服务器上托管多个数据库,这一点尤其重要。
为了演示这样的设置,创建一个名为 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
语句重新加载并保存您刚刚授予 example_user 的权限:
- FLUSH PRIVILEGES;
退出 MariaDB shell:
- exit
您可以通过再次登录到 MariaDB 控制台来测试新用户是否具有适当的权限,但使用您在上面创建的 example_user 凭据:
- mysql -u example_user -p
请注意此命令中的 -p
标志,它将提示您输入您在创建 example_user 用户时选择的密码。登录到 MariaDB 控制台后,使用以下语句确认您可以访问 example_database
数据库:
- SHOW DATABASES;
您的 example_database
应该列在输出中:
Output+--------------------+
| Database |
+--------------------+
| example_database |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)
要退出 MariaDB shell,请键入:
- exit
您的数据库系统已设置,您可以继续安装 PHP。
第 3 步 — 安装 PHP
您安装了 Apache 来提供您的内容,并安装了 MariaDB 来存储和管理您的数据。 PHP 将处理代码以向用户显示动态内容。除了 php
包之外,您还需要 php-mysql
,这是一个允许 PHP 与基于 MySQL 的数据库进行通信的 PHP 模块。核心 PHP 包将作为依赖项自动安装。
使用此命令通过 yum
安装 php
和 php-mysql
包:
- sudo yum install php php-mysql
重新启动 Apache Web 服务器以启用您安装的 PHP 模块:
- sudo systemctl restart httpd.service
您的服务器现已配置了 LAMP 堆栈应用程序所需的所有组件。下一步是测试您的配置以确保一切正常工作。
第 4 步 — 在 Apache Web 服务器上测试 PHP
CentOS 7 上的默认 Apache 安装将创建位于 /var/www/html
的文档根目录。您无需对 Apache 的默认设置进行任何更改,即可使 PHP 在您的 Web 服务器中正常工作。
但是,您可以进行调整以更改 Apache 文档根文件夹的默认权限设置。这允许您使用常规系统用户在该目录中创建和修改文件,而无需在每个命令前加上 sudo
前缀。
以下命令会将默认 Apache 文档根目录的所有权更改为名为 sammy
的用户和组,因此请务必替换此命令中突出显示的用户名和组以反映您系统的用户名和组:
- sudo chown -R sammy.sammy /var/www/html/
您可以创建一个 PHP 测试文件以确保 Web 服务器按预期工作。使用您喜欢的文本编辑器创建此文件。以下示例使用 CentOS 7 中默认的 vi
文本编辑器。
在 var/www/html
目录中创建一个名为 info.php
的 PHP 文件:
- vi /var/www/html/info.php
这将在 /var/www/html
目录中打开一个空白的 PHP 文件。在 vi
编辑器中按 I
进入 INSERT
模式。这允许您在文本编辑器中键入和进行更改。输入以下 PHP 代码:
<?php phpinfo(); ?>
此 PHP 代码显示有关在您的服务器上运行的 PHP 环境的信息。完成对此文件的更改后,按 ESC
键退出 vi
中的 INSERT
模式。输入 :x
——分号和小写字母 x——保存并关闭文件。
您可以通过转到服务器的公共 IP 地址,然后是 /info.php
来测试您的 Web 服务器是否正确显示 PHP 内容:
http://your_server_IP_address/info.php
您的浏览器中将显示一个类似于以下网页的网页:
此页面从 PHP 的角度为您提供有关服务器的信息。它对于调试和确保正确应用您的设置很有用。检查完你的PHP服务器的相关信息后,最好删除这个文件,因为它包含你的PHP环境和CentOS服务器的敏感信息。
您可以使用 rm
删除此文件:
- rm /var/www/html/info.php
如果以后需要再次访问信息,您可以随时重新创建此页面。接下来,您可以使用 PHP 测试数据库连接。
第 5 步 – 使用 PHP 测试数据库连接(可选)
您可以通过创建包含一些测试数据的测试表来测试 PHP 是否连接到 MariaDB 并执行数据库查询。您可以从 PHP 脚本查询其内容。
首先,使用您在本指南第 2 步中创建的数据库用户连接到 MariaDB 控制台:
- mysql -u example_user -p
在 MariaDB 控制台中,运行以下语句在您的 example_database
中创建一个名为 todo_list
的表:
- CREATE TABLE example_database.todo_list (
- item_id INT AUTO_INCREMENT,
- content VARCHAR(255),
- PRIMARY KEY(item_id)
- );
每次编辑后,MariaDB 控制台都会通知您有关表的更改。
Query OK, 0 rows affected (0.00 sec)
在测试表中插入几行内容。您可以使用不同的值重复下一条命令几次,以填充您的测试表:
- 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 文件。此示例使用 vi
:
- vi /var/www/html/todo_list.php
在 vi
文本编辑器中按 I
添加以下内容,记得替换 example_user
和 password
加上你自己的:
<?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();
}
完成编辑后按 ESC
保存并关闭文件,然后在 vi
中键入 :x
。
您现在可以通过访问服务器的主机名或公共 IP 地址,然后访问 /todo_list.php
,在 Web 浏览器中访问此页面:
http://server_host_or_IP/todo_list.php
下面是一个网页示例,显示了您在测试表中插入的内容:
结论
在本指南中,您已经构建了一个灵活的基础,可以使用 Apache 作为 Web 服务器为访问者提供 PHP 网站和应用程序服务。您已经设置了 Apache 来处理 PHP 请求,并设置了 MariaDB 数据库来存储您网站的数据。