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

引言

一个LAMP堆栈是一组通常一起安装的开源软件,用于使服务器能够托管动态网站和Web应用程序。这个术语是一个缩写,代表Linux操作系统,具有Apache Web服务器。网站数据存储在MariaDB数据库中,动态内容由PHP处理。

尽管这个软件堆栈通常包括MySQL作为数据库管理系统,但某些Linux发行版(包括Debian)使用MariaDB作为MySQL的插入替代方案。

在本指南中,您将在Debian 10服务器上安装LAMP堆栈,并将MariaDB作为数据库管理系统。

先决条件

为了跟随本教程,您需要具备一个Debian 10服务器,拥有一个非root的启用了sudo的用户账户和一个基本的防火墙。您可以根据我们的Debian 10初始服务器设置指南进行配置。

步骤一 — 安装Apache并更新防火墙

Apache网络服务器是全球最受欢迎的服务器之一。它有完善的文档,并在Web的历史中被广泛使用,这使得它成为托管网站的一个绝佳默认选择。

开始更新软件包管理器缓存。如果这是您在本次会话中首次使用sudo命令,系统会提示您输入用户密码以确认您拥有正确的权限来管理系统包使用apt命令。

sudo apt update

然后使用以下命令安装Apache:

sudo apt install apache2

运行此命令会提示您确认Apache的安装。按Y键确认,然后按回车键。安装完成后,您需要调整防火墙设置。假设您按照初始服务器设置指南安装并启用了UFW防火墙,请确保防火墙允许HTTP和HTTPS流量通过。

在Debian 10上,UFW预装了应用程序配置文件,您可以使用这些配置文件来调整防火墙设置。通过运行以下命令查看完整的应用程序配置文件列表:

sudo ufw app list

互联网信息管理用于管理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"

通过在Web浏览器中访问你的服务器的公共IP地址,你可以验证一切是否按计划进行。

http://your_server_ip

这将返回默认的Debian 10 Apache网页,该网页只是提供信息和测试用途。

Debian 10 Apache default

如果您的浏览器显示此页面,那么您的网络服务器已正确安装并可以通过防火墙访问。

如何找到您服务器的公共IP地址

如果您不知道服务器的公共IP地址,有几种方法可以找到它。通常,这就是您通过SSH连接服务器时使用的地址。

从命令行中有几种不同的方法可以做到这一点。首先,您可以使用iproute2工具通过运行以下命令来获取您的IP地址:

ip addr show eth0 | grep inet |awk'{ print $2; }'|sed's/\/.*$//'


这将返回两到三行之前。它们都是正确的地址,但是您的电脑可能只能使用其中一行,所以请随意尝试每一个。

使用curl工具与外部服务器联系,以了解服务器的视角是另一种选择。您可以运行以下命令,询问特定服务器您的IP地址是什么。

由于Debian 10默认情况下没有curl,您需要先安装它。

sudo apt install curl

然后运行以下命令并向指定的服务器查询您的IP地址:

curl http://icanhazip.com

无论使用何种方法,将您的 IP 地址输入到您的网络浏览器中,以验证您的服务器是否正在运行默认的 Apache 页面。

步骤二 — 安装MariaDB

现在你已经搭建好了一个运行中的网页服务器,你需要安装数据库系统来存储和管理你的网站数据。

在Debian 10中,传统上用于安装MySQL服务器的元包mysql-server被默认替换为default-mysql-server。该元包引用了MariaDB,这是由Oracle进行社区分支开发的原始MySQL服务器,并且它是目前在基于Debian的软件包管理器仓库中提供的默认MySQL兼容的数据库服务器。

为了实现更长期的兼容性,建议您使用MariaDB的实际软件包mariadb-server,而不是使用元软件包进行安装。

要安装MariaDB软件,请执行以下操作:

sudo apt install mariadb-server

在安装完成后,建议您运行与MariaDB预安装的一个安全脚本。该脚本将移除一些不安全的默认设置,并锁定对数据库系统的访问。通过运行以下命令启动交互式脚本:

sudo mysql_secure_installation

这个脚本将通过一系列提示引导您对MariaDB的设置进行一些更改。第一个提示将要求您输入当前数据库的root密码。这与系统root密码不同。数据库的root用户是具有对数据库系统的完全权限的管理员用户。由于您最近安装了MariaDB并且还没有进行任何配置更改,因此此密码将为空白,所以在提示处按ENTER键。

下一个提示询问您是否想设置数据库的根密码。由于MariaDB使用一种通常比使用密码更安全的特殊身份验证方法用于根用户,所以您现在不需要设置这个。按N然后按回车键即可。

从这里开始,你可以按下 Y 键,然后按下 ENTER 键来接受所有后续问题的默认设置。这将删除匿名用户和测试数据库,禁用远程 root 登录,并加载这些新的规则,使得 MariaDB 立即生效并尊重你所做的更改。

当你完成后,登录MariaDB控制台。

sudo mariadb

当运行此命令时,它将以sudo身份连接到MariaDB服务器,作为具有管理员权限的数据库用户root。您应该会收到以下输出:


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特权且通过控制台或以相同权限运行的应用程序连接的系统用户可以作为root MariaDB用户登录。从实际角度来看,这意味着您将无法使用管理数据库根用户从您的PHP应用程序进行连接。

为了增强安全性,在每个数据库上最好设立拥有较低权限的专用用户账户,尤其是如果您计划在服务器上托管多个数据库。

你可以用以下方式退出MariaDB控制台:

exit

你的MariaDB服务器已经安装并且已经加密。接下来,你将安装PHP,LAMP堆栈的最后一个组件。

第三步 – 安装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的文件。为了指示网络服务器优先搜索PHP文件而不是其他文件,您可以设置Apache首先搜索一个名为index.php的文件。

为了做到这一点,使用以下命令以root权限打开你喜欢的文本编辑器中的dir.conf文件。在这个示例中,我们使用nano:

sudo nano /etc/apache2/mods-enabled/dir.conf

内容将包括以下内容:

以下是/etc/apache2/mods-enabled/dir.conf的本地化中文释义:

/etc/apache2/mods-enabled/dir.conf 路径中的文件夹.conf

<IfModule mod_dir.c>
    DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

将PHP索引文件移到DirectoryIndex规范后的第一个位置,如下所示:

以下是/etc/apache2/mods-enabled/dir.conf的汉语本地化释义:

– 目录.conf

<IfModule mod_dir.c>
    DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

当你完成后,保存并关闭文件。如果你使用nano,你可以通过按下CTRL+X,然后按Y并回车键确认来实现。

现在重新加载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的域名,但应该使用您自己的域名进行替换。

Note

注意:如果您正在使用Silicon Cloud作为DNS提供商,请查看我们的产品文档,了解如何设置新的域名并将其指向您的服务器的详细说明。

默认情况下,Apache服务器从位于/var/www/html的目录中提供其内容,并使用位于/etc/apache2/sites-available/000-default.conf文件中包含的配置。您将不会修改默认的网站配置文件,而是要创建一个新的虚拟主机来测试您的PHP环境。虚拟主机可以让您在一个Apache服务器上托管多个网站。您还将在/var/www中创建一个目录结构,供您的域名站点使用,同时保留/var/www/html作为默认目录,以提供给客户端请求不匹配其他站点时使用。

首先按照以下步骤为your_domain创建根网页目录:

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

这将创建一个新的空白文件。添加以下基本配置,并使用您自己的域名。

你的域名的配置文件路径位于/etc/apache2/sites-available/your_domain。
<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代码。

/var/www/your_domain/info.php 的路径
<?php
phpinfo();

完成后,保存并关闭文件。

为了测试脚本,请打开您的网络浏览器并访问您的服务器的域名或IP地址,接着输入脚本名称,本例中为info.php。

http://your_domain/info.php

这是一个默认的PHP网页的示例。

Default PHP info

这个页面从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)

接下来,在MariaDB控制台中创建一个名为todo_list的测试表。运行以下语句:

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

现在您可以创建一个PHP脚本,该脚本将连接到MariaDB并查询您的内容。在您喜欢使用的编辑器下,在自定义的Web根目录中创建一个新的PHP文件。本例中使用nano编辑器。

nano /var/www/your_domain/todo_list.php

以下的PHP脚本连接到MariaDB数据库,并查询todo_list表的内容,并以列表的形式展示结果。如果数据库连接出现问题,它将抛出一个异常。

将此内容添加到你的todo_list.php脚本中,并记得使用你自己的example_user和password值来替换。

/您的域名/var/www/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,在您的网页浏览器中访问此页面。

http://your_domain/todo_list.php

该网页将向您的访客展示您在测试表格中插入的内容。

Example PHP todo list

这意味着您的PHP环境已准备好与您的MariaDB服务器连接和交互。

结论是

在本指南中,您已经建立了一个灵活的基础,用于将PHP网站和应用程序提供给访问者,使用Apache作为Web服务器和MariaDB作为数据库系统。

作为下一步,您应该确保将与您的 Web 服务器的连接进行安全加密,通过使用 HTTPS 进行服务。为了实现这一目标,您可以使用 Let’s Encrypt。您还可以阅读我们的指南,了解如何在 PHP 中安装和使用 Composer 进行依赖项和软件包管理。

发表回复 0

Your email address will not be published. Required fields are marked *