如何在 Debian 10 上安装 Linux、Apache、MariaDB 和 PHP (LAMP) 架构

0 股票
0
0
0
0

介绍

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 list

WWW配置文件用于管理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 -v
Output
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 apache2
Sample 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 进行依赖项和包管理。.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

您可能也喜欢