介绍
LAMP架构是一组开源软件,通常一起安装以使服务器能够托管动态网站和Web应用程序。LAMP代表Linux操作系统和Apache Web服务器。网站数据存储在MariaDB数据库中,动态内容由PHP处理。.
虽然该软件栈通常包含 MySQL 作为数据库管理系统,但一些 Linux 发行版(包括 Debian)使用 MariaDB 作为 MySQL 的替代方案。.
在本指南中,您将在 Debian 10 服务器上安装 LAMP 堆栈,并使用 MariaDB 作为数据库管理系统。.
先决条件
要学习本教程,您需要一台 Debian 10 服务器,该服务器具有一个有效的非 root sudo 帐户和一个基本的防火墙。.
步骤 1 – 安装 Apache 并更新防火墙
Apache Web 服务器是世界上最流行的 Web 服务器之一。它拥有完善的文档,并在 Web 发展的大部分历史时期都被广泛使用,使其成为网站托管的绝佳默认选择。.
首先更新软件包管理器缓存。如果这是您首次在本次会话中使用 sudo,系统会提示您输入用户密码,以验证您拥有使用 apt 管理系统软件包的相应权限:
sudo apt update然后使用以下命令安装 Apache:
sudo apt install apache2此命令会要求您确认安装 Apache。请按 Y 键确认,然后按 Enter 键。安装完成后,您需要配置防火墙设置。假设您已按照初始服务器设置说明安装并启用了 UFW 防火墙,请确保您的防火墙允许 HTTP 和 HTTPS 流量。.
在 Debian 10 中,UFW 预装了多个应用程序配置文件,可用于配置防火墙设置。运行以下命令查看完整的应用程序配置文件列表:
sudo ufw app listWWW配置文件用于管理Web服务器使用的端口:
Output
Available applications:
. . .
WWW
WWW Cache
WWW Full
WWW Secure
. . .如果查看 WWW 完整配置文件,会发现它启用了端口 80 和 443 上的流量:
sudo ufw app info "WWW Full"Output
Profile: WWW Full
Title: Web Server (HTTP,HTTPS)
Description: Web Server (HTTP,HTTPS)
Ports:
80,443/tcp此配置文件允许入站 HTTP 和 HTTPS 流量:
sudo ufw allow in "WWW Full"您可以通过在网络浏览器中访问服务器的公共 IP 地址来验证一切是否按计划进行:
http://your_server_ip这将返回 Debian 10 Apache 的默认网页,该网页仅供参考和测试之用:
如果您的浏览器返回此页面,则说明您的网络服务器已正确安装并通过防火墙访问。.
如何查找服务器的公网 IP 地址
如果您不知道服务器的公网 IP 地址,可以通过几种方法找到它。通常,这就是您通过 SSH 连接到服务器时使用的地址。.
有几种不同的方法可以通过命令行完成此操作。首先,您可以使用 iproute2 工具通过运行以下命令来获取您的 IP 地址:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'这将返回两到三行。它们都是有效的地址,但您的计算机可能只能使用其中一个,所以请逐一尝试。.
使用该工具的另一种方法 卷曲 它用于联系外部方,告知他们如何查看您的服务器。您可以运行以下命令来询问特定服务器您的 IP 地址:
自 Debian 10 以来 卷曲 它不是默认设置,需要先安装:
sudo apt install curl然后运行以下命令,向特定服务器查询您的 IP 地址:
curl http://icanhazip.com无论采用何种方法,请在浏览器中输入您的 IP 地址,以验证您的服务器是否正在运行默认的 Apache 页面。.
步骤 2 – 安装 MariaDB
现在你已经有了网络服务器,接下来需要安装数据库系统,以便存储和管理网站数据。.
在 Debian 10 中,传统上用于安装 MySQL 服务器的 MySQL-server 元软件包被 default-MySQL-server 取代。该元软件包引用了 MariaDB(Oracle 开发的 MySQL 服务器的一个分支),现在已成为基于 Debian 的软件包管理仓库中默认的 MySQL 兼容数据库服务器。.
但是,为了长期兼容性,建议使用实际的应用程序包 mariadb-server 安装 MariaDB,而不是使用元包。.
要安装 MariaDB 软件,请运行:
sudo apt install mariadb-server安装完成后,建议运行 MariaDB 预装的安全脚本。该脚本将移除一些不安全的默认设置,并锁定对数据库系统的访问。运行以下命令启动交互式脚本:
sudo mysql_secure_installation此脚本将引导您完成一系列命令,以便您修改 MariaDB 配置。第一个提示符会要求您输入当前数据库 root 密码。请勿将此密码与系统 root 密码混淆。数据库 root 用户是拥有数据库系统完全权限的管理员用户。由于您最近才安装了 MariaDB 并且尚未进行任何配置更改,因此此密码为空,请在提示符处按 Enter 键。.
下一个提示会询问您是否要设置数据库 root 密码。由于 MariaDB 对 root 用户使用特殊的身份验证方法,通常比使用密码更安全,因此您现在无需设置密码。按 N,然后按 Enter 键。.
接下来,您可以按 Y 键,然后按 Enter 键接受所有后续问题的默认设置。这将删除匿名用户和测试数据库,禁用远程 root 登录,并加载这些新规则,以便 MariaDB 立即应用您所做的更改。.
完成后,登录 MariaDB 控制台:
sudo mariadb这将以数据库管理员用户 root 的身份连接到 MariaDB 服务器,运行此命令时使用 sudo 会自动推断出该用户身份。您应该会看到以下输出:
Output
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 42
Server version: 10.3.36-MariaDB-0+deb10u2 Debian 10
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 密码。虽然这乍一看似乎存在安全隐患,但实际上却能提高数据库服务器的安全性,因为只有拥有 sudo 权限的系统用户才能以 MariaDB root 用户身份登录,而 sudo 权限可以通过控制台或具有相同权限的运行应用程序获得。实际上,这意味着您无法使用数据库管理 root 用户从 PHP 应用程序进行连接。.
为了提高安全性,最好为每个数据库设置权限较小的专用用户帐户,尤其是在计划在服务器上托管多个数据库的情况下。.
您可以使用以下命令退出 MariaDB 控制台:
exit您的 MariaDB 服务器现已安装并完成安全配置。接下来,您将安装 PHP,这是 LAMP 架构中的最后一个组件。.
步骤 3 – 安装 PHP
您已安装 Apache 服务器来提供内容,并安装了 MariaDB 数据库来存储和管理数据。PHP 是您配置的一部分,它负责处理代码,将动态内容显示给最终用户。它可以执行脚本、连接到 MariaDB 数据库以检索信息,并将处理后的内容发送到 Web 服务器进行显示。.
除了 PHP 包之外,您还需要 php-mysql,这是一个 PHP 模块,它允许 PHP 与基于 MySQL 的数据库(例如 MariaDEB)进行通信。您还需要 libapache2-mod-php 来使 Apache 能够处理 PHP 文件。核心 PHP 包作为依赖项会自动安装。.
要安装这些软件包,请运行以下命令:
sudo apt install php libapache2-mod-php php-mysql安装完成后,您可以使用以下命令验证您的 PHP 版本:
php -vOutput
PHP 7.3.31-1~deb10u2 (cli) (built: Dec 15 2022 09:39:10) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.31, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.31-1~deb10u2, Copyright (c) 1999-2018, by Zend Technologies大多数情况下,您需要更改 Apache 提供文件的方式。目前,如果用户向服务器请求一个目录,Apache 首先会查找名为 index.html 的文件。要指示 Web 服务器优先处理 PHP 文件,您可以配置 Apache 首先查找 index.php 文件。.
为此,请运行以下命令,以 root 权限在您喜欢的文本编辑器中打开 dir.conf 文件。在本例中,我们将使用 nano 编辑器:
sudo nano /etc/apache2/mods-enabled/dir.conf内容如下:
<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>将 PHP 目录文件移动到 DirectoryIndex 规范之后的第一个位置,如下所示:
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>完成后,保存并关闭文件。如果您使用的是 nano 编辑器,可以按 CTRL+X,然后按 Y,最后按 ENTER 确认。.
现在重新加载 Apache 配置:
sudo systemctl reload apache2您可以使用 systemctl status 命令检查 apache2 服务的状态:
sudo systemctl status apache2Sample Output
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset:
Active: active (running) since Fri 2023-01-20 22:21:24 UTC; 2min 12s ago
Docs: https://httpd.apache.org/docs/2.4/
Process: 13076 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCC
Process: 13097 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/
Main PID: 13080 (apache2)
Tasks: 6 (limit: 4915)
Memory: 13.7M
CGroup: /system.slice/apache2.service
├─13080 /usr/sbin/apache2 -k start
├─13101 /usr/sbin/apache2 -k start
├─13102 /usr/sbin/apache2 -k start
├─13103 /usr/sbin/apache2 -k start
├─13104 /usr/sbin/apache2 -k start
└─13105 /usr/sbin/apache2 -k start至此,您的 LAMP 环境已完全搭建完毕,但在使用 PHP 脚本测试之前,最好先设置一个合适的 Apache 虚拟主机来存放您的网站文件和文件夹。您将在下一步中进行设置。.
第四步 – 为您的网站创建虚拟主机
使用 Apache Web 服务器时,您可以创建虚拟主机(类似于 Nginx 中的服务器块)来封装配置细节,并从单个服务器托管多个域名。在本节中,您将设置一个名为 your_domain 的域名,但您应该将其替换为您自己的域名。.
默认情况下,Apache 使用位于 /var/www/html 的目录提供内容,其配置位于 /etc/apache2/sites-available/000-default.conf 文件中。为了测试您的 PHP 环境,您需要创建一个新的虚拟主机,而不是修改默认的网站配置文件。虚拟主机允许您在单个 Apache 服务器上托管多个网站。您还需要在 /var/www 目录下为您的域名创建一个目录结构,并将 /var/www/html 保留为默认目录,以防客户端请求不匹配任何其他站点。.
首先,按如下方式创建 your_domain 的根 web 目录:
sudo mkdir /var/www/your_domain接下来,使用环境变量 $USER 指定目录的所有权,该变量将指向系统上的当前用户:
sudo chown -R $USER:$USER /var/www/your_domain接下来,使用您喜欢的文本编辑器在 Apache sites-available 目录中打开一个新的配置文件。以下示例使用 Nano 编辑器:
sudo nano /etc/apache2/sites-available/your_domain.conf这将创建一个新的空文件。添加以下基本配置,并填入您的域名:
<VirtualHost *:80>
ServerName your_domain
ServerAlias www.your_domain
ServerAdmin webmaster@localhost
DocumentRoot /var/www/your_domain
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>通过此 VirtualHost 配置,您指示 Apache 使用 /var/www/your_domain 作为网站根目录来提供 your_domain 的服务。如果您想在不使用域名的情况下测试 Apache,可以通过在每个选项行的开头添加井号 (#) 来删除或注释掉 ServerName 和 ServerAlias 选项。.
完成后,保存并关闭文件。.
现在使用 a2ensite 激活此虚拟主机:
sudo a2ensite your_domain您可能需要禁用 Apache 安装的默认网站。如果您未使用自定义域名,则必须执行此操作,因为在这种情况下,Apache 会覆盖虚拟主机的默认设置。要禁用默认的 Apache 网站,请运行:
sudo a2dissite 000-default为确保您的配置文件中没有语法错误,您可以运行:
sudo apache2ctl configtest最后,重新加载 Apache 服务器以使这些更改生效:
sudo systemctl reload apache2接下来,您将创建一个 PHP 脚本来测试 PHP 是否已在您的服务器上正确安装和配置。.
步骤 5 – 测试 Web 服务器上的 PHP 处理
现在您已经为网站文件和文件夹设置了自定义位置,请创建一个 PHP 测试脚本来验证 Apache 是否能够处理对 PHP 文件的请求。.
首先在自定义网站根目录下创建一个名为 info.php 的新文件:
nano /var/www/your_domain/info.php这将打开一个空白文件。请将以下文本(有效的 PHP 代码)添加到该文件中:
<?php
phpinfo();完成后,保存并关闭文件。.
要测试脚本,请打开您的网络浏览器,访问服务器的域名或 IP 地址,然后输入脚本名称,在本例中为 info.php:
http://your_domain/info.php以下是一个默认的 PHP 网页示例:
本页面提供关于您服务器的基本信息(从 PHP 角度出发)。它有助于调试并确保您的设置正确生效。.
如果浏览器中出现此页面,则说明您的 PHP 安装运行正常。.
通过该页面查看了您的 PHP 服务器信息后,最好删除您创建的文件,因为它包含有关您的 PHP 环境和 Debian 服务器的敏感信息。您可以使用 rm 命令来删除该文件:
sudo rm /var/www/your_domain/info.php如果您需要再次访问这些信息,可以随时重新创建此页面。.
步骤 6 – 从 PHP 测试数据库连接(可选)
如果您想测试 PHP 是否可以连接到 MariaDB 并执行数据库查询,可以创建一个包含测试数据的测试表,并从 PHP 脚本查询其内容。在此之前,您需要创建一个新的 MariaDB 数据库和一个已正确配置为可访问该数据库的用户。.
首先,使用 root 账户连接到 MariaDB 控制台:
sudo mariadb要创建新数据库,请在 MariaDB 控制台中运行以下命令:
CREATE DATABASE example_database;
现在创建一个新用户,并授予该用户对您创建的自定义数据库的完整权限。.
以下命令创建一个名为 example_user 的新用户,该用户使用密码进行身份验证。我们将其密码定义为 password,但您应该将其替换为您选择的安全密码:
CREATE USER 'example_user'@'%' IDENTIFIED BY 'password';接下来,授予该用户使用 example_database 数据库的权限:
GRANT ALL ON example_database.* TO 'example_user'@'%';这将赋予用户 example_user 对数据库 example_database 的完全权限,同时阻止该用户在您的服务器上创建或修改其他数据库。.
接下来,清除权限以确保它们已保存并在当前会话中可用:
FLUSH PRIVILEGES;之后,退出 MariaDB shell:
exit您可以通过再次登录 MariaDB 控制台来测试新用户是否具有适当的权限,这次使用自定义用户凭据:
mariadb -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)然后创建一个名为 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;您将得到以下输出:
+---------+--------------------------+
| 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 脚本。使用您喜欢的编辑器在自定义网站的根目录中创建一个新的 PHP 文件。本例中使用的是 Nano 编辑器:
nano /var/www/your_domain/todo_list.php以下 PHP 脚本连接到 MariaDB 数据库,搜索 todo_list 表的内容,并将结果以列表形式显示。如果连接数据库出现问题,脚本会抛出异常。.
将此内容添加到您的 todo_list.php 脚本中,请记住将 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();
}编辑完成后,请保存并关闭文件。.
您现在可以通过在浏览器中访问您网站的域名或公共 IP 地址,后跟 /todo_list.php 来访问此页面:
http://your_domain/todo_list.php此网页将显示您在测试表格中包含的内容:
这意味着您的 PHP 环境已准备好连接并与 MariaDB 服务器进行交互。.
结果
在本指南中,您已经创建了一个灵活的基础,可以使用 Apache 作为 Web 服务器和 MariaDB 作为数据库系统,向您的访问者交付 PHP 网站和应用程序。.
接下来,您应该立即确保通过 HTTPS 协议提供与 Web 服务器的连接,从而保证连接安全。您可以使用 Let's Encrypt 来实现这一点。您还可以阅读我们的指南,了解如何在 PHP 中安装和使用 Composer 进行依赖项和包管理。.












