在Debian 11上安装Linux、Apache、MariaDB、PHP (LAMP)堆栈的方法

引言

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

尽管这个软件堆栈通常会包括MySQL作为数据库管理系统,但包括Debian在内的一些Linux发行版使用MariaDB作为可替代MySQL的替代品。

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

先决条件

为了跟随本教程,您需要一个安装有Debian 11的服务器,并且拥有一个带有sudo权限的非root用户账户以及一个基本防火墙。您可以按照我们的Debian 11初始服务器设置指南进行配置。

第一步 – 安装Apache并更新防火墙

Apache web服务器是世界上最受欢迎的Web服务器之一。它有着完善的文档,拥有活跃的用户社区,并且在Web的大部分历史中都得到广泛应用,这使得它成为架设网站的一个绝佳选择。

首先更新软件包管理器缓存。如果这是您在本次会话中首次使用sudo命令,您将会被提示输入您的用户密码,以确认您具备管理系统软件包的权限。

  1. sudo apt update

 

接着,按照以下步骤安装Apache:

  1. sudo apt install apache2

 

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

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

  1. sudo ufw app list

 

以下列出的WWW配置文件用于管理Web服务器使用的端口:

Output

Available applications: . . . WWW WWW Cache WWW Full WWW Secure . . .

如果你使用ufw应用程序检查WWW的完整配置文件,你的输出将显示它启用了80和443端口的流量。

  1. 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流量进入。

  1. sudo ufw allow in “WWW Full”

 

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

http://your_server_ip

这将返回默认的Debian 11 Apache网页,该网页仅用于信息和测试目的。

Debian 11 Apache default

如果你的浏览器显示这个页面,那么你的网络服务器现在已经正确安装并且可以通过你的防火墙访问。

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

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

从命令行进行此操作有几种不同的方法。首先,您可以使用iproute2工具通过运行以下命令来获取您的IP地址:

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

 

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

另一种方法是使用curl实用程序与外部方联系,以了解它如何查看您的服务器。您可以运行以下命令并询问特定服务器您的IP地址是什么:

  1. curl http://icanhazip.com

 

无论你更喜欢哪种方法,将你的IP地址写入网页浏览器,以验证你的服务器是否运行默认的Apache页面。

第二步 – 安装MariaDB

既然您已经建立并运行了一个网页服务器,您需要安装数据库系统来存储和管理您网站的数据。

在Debian 11中,传统上用于安装MySQL服务器的元包mysql-server被default-mysql-server取代。该元包引用了MariaDB,这是Oracle原始MySQL服务器的社区分支,目前是基于Debian软件包管理器仓库的默认MySQL兼容数据库服务器。

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

运行以下命令来安装MariaDB软件:

  1. sudo apt install mariadb-server

 

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

  1. sudo mysql_secure_installation

 

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

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

从那里开始,可以按下Y,然后按回车来接受所有后续问题的默认设置。这将移除匿名用户和测试数据库,禁用远程根登录,并加载这些新规则,以便MariaDB立即遵守您所做的更改。

完成后,登录到MariaDB控制台。

  1. sudo mariadb

 

这将使用sudo运行此命令并连接到MariaDB服务器的管理员数据库用户root。您应该会收到类似以下的输出:

Output

Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 41 Server version: 10.5.15-MariaDB-0+deb11u1 Debian 11 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用户的身份从控制台连接或通过具备相同权限的应用程序连接。实际上,这意味着您将无法使用管理员数据库root用户从您的PHP应用程序进行连接。

为了增加安全性,在你的服务器上托管多个数据库时,最好为每个数据库设置专用用户帐户,并降低其权限。

您可以使用以下方法退出MariaDB控制台:

  1. exit

 

你的MariaDB服务器已安装并已加密。接下来,你将安装PHP,这是LAMP架构中的最后一个组件。

第三步 — 安装PHP

你已经安装了Apache来提供内容,并安装了MariaDB来存储和管理数据。PHP是你的设置的组件,它将处理代码以向最终用户显示动态内容。它可以运行脚本,连接到你的MariaDB数据库以获取信息,并将处理后的内容交给Web服务器进行显示。

除了php包以外,您还需要php-mysql,这是一个允许PHP与基于MySQL的数据库(如MariaDB)进行通信的PHP模块。您还需要libapache2-mod-php来启用Apache处理PHP文件。核心PHP包将作为依赖项自动安装。

要安装这些软件包,请运行以下命令:

  1. sudo apt install php libapache2-mod-php php-mysql

 

安装完成后,您可以使用以下命令验证您的PHP版本。

  1. php -v

 

Output

PHP 7.4.30 (cli) (built: Jul 7 2022 15:51:43) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.30, Copyright (c), by Zend Technologies

在此时,您的LAMP堆栈已经完全运行,但在使用PHP脚本测试设置之前,最好设置一个适当的Apache虚拟主机来存放您网站的文件和文件夹。

第四步 — 为您的网站创建一个虚拟主机

在使用Apache web server时,你可以创建虚拟主机(类似于Nginx中的服务器块),将配置细节封装起来,并从单个服务器上托管多个域名。在本指南中,我们将设置一个称为your_domain的域名,但你应该将其替换为你自己的域名。

Note

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

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

开始创建您的域名根网目录,步骤如下:

  1. sudo mkdir /var/www/your_domain

 

接下来,使用 $USER 环境变量来分配目录的所有权,它将指向你当前的系统用户。

  1. sudo chown -R $USER:$USER /var/www/your_domain

 

然后,使用您偏好的命令行编辑器打开Apache的sites-available目录中的新配置文件。在这里,我们将使用nano。

  1. sudo nano /etc/apache2/sites-available/your_domain.conf

 

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

你的域名在/etc/apache2/sites-available/文件夹下
<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>

完成后保存并关闭文件。如果使用nano,您可以按CTRL + X,然后按Y和Enter来完成此操作。

使用此VirtualHost配置,你通知Apache使用/var/www/your_domain作为网站根目录来提供your_domain的服务。如果你想在没有域名的情况下测试Apache,可以通过在每个选项行的开头添加井号(#)来删除或注释掉ServerName和ServerAlias选项。

现在,使用a2ensite命令来启用这个虚拟主机。

  1. sudo a2ensite your_domain

 

如果您未使用自定义域名,可能需要禁用Apache预装的默认网站。因为在这种情况下,Apache的默认配置会覆盖您的虚拟主机设置。要禁用Apache的默认网站,请运行以下命令:

  1. sudo a2dissite 000-default

 

为了确保您的配置文件不包含语法错误,请运行以下命令:

  1. sudo apache2ctl configtest

 

最后,重新加载 Apache 以使这些更改生效。

  1. sudo systemctl reload apache2

 

接下来,您将创建一个PHP脚本来测试您的服务器上是否正确安装和配置了PHP。

第五步 — 在您的Web服务器上测试PHP处理

现在你已经有一个自定义的位置来托管你的网站文件和文件夹,创建一个PHP测试脚本来确认Apache能够处理和处理PHP文件的请求。

首先,在您的自定义网络根目录中创建一个名为info.php的新文件。

  1. nano /var/www/your_domain/info.php

 

这将打开一个空文件。在文件内添加以下文本,这是有效的PHP代码。

/var/www/your_domain/info.php 的中文表述: 你的域名所在的 /var/www/your_domain 目录下的 info.php 文件。
<?php
phpinfo();

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

要测试脚本,请打开您的网页浏览器,并访问您服务器的域名或IP地址,然后输入脚本名称,例如这里是info.php。

http://your_domain/info.php

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

Debian 11 default PHP info

此页面从PHP的角度提供有关您的服务器的信息。它对于调试和确保您的设置正确应用非常有用。

如果您能在浏览器中看到这个页面,那么您的PHP安装正常工作。

在通过该页面检查你的PHP服务器的相关信息后,最好将你创建的文件删除,因为它包含了关于你的PHP环境和Debian服务器的敏感信息。使用rm命令来删除文件。

  1. sudo rm /var/www/your_domain/info.php

 

如果您以后需要访问这些信息,您可以随时重新创建此页面。

第六步 – 通过PHP测试数据库连接(可选)

如果你想测试PHP能否连接到MariaDB并执行数据库查询,你可以创建一个具有测试数据的测试表,并从一个PHP脚本中查询其内容。在此之前,你需要创建一个测试数据库,并配置好一个新的MariaDB用户来访问它。

创建一个名为example_database的数据库和一个名为example_user的用户。您可以替换这些名称使用不同的值。

首先,使用root账户连接到MariaDB控制台。

  1. sudo mariadb

 

在您的MariaDB控制台上运行以下命令,创建一个新的数据库:

  1. CREATE DATABASE example_database;

 

现在创建一个新用户,并授予他们对你所创建的自定义数据库的完全权限。

以下命令创建一个名为example_user的新用户,通过密码进行身份验证。我们将该用户的密码定义为password,但您应该将此值更改为您自己选择的安全密码。

  1. CREATE USER example_user@‘%’ IDENTIFIED BY password;

 

接下来,授予该用户对example_database数据库的权限。

  1. GRANT ALL ON example_database.* TO example_user@‘%’;

 

这将为example_user用户赋予example_database数据库的完全权限,同时防止该用户在您的服务器上创建或修改其他数据库。

接下来,刷新特权以确保它们被保存并在当前会话中可用。

  1. FLUSH PRIVILEGES;

 

然后退出MariaDB shell。

  1. exit

 

您可以通过使用自定义的用户凭据再次登录MariaDB控制台来测试新用户是否具有适当的权限。

  1. mariadb -u example_user -p

 

请注意此命令中的-p标志,它将在创建example_user用户时提示您输入密码。登录到MariaDB控制台后,请确认您可以访问example_database数据库。

  1. SHOW DATABASES;

 

这将为您提供以下的输出结果。

Output

+——————–+ | Database | +——————–+ | example_database | | information_schema | +——————–+ 2 rows in set (0.000 sec)

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

  1. CREATE TABLE example_database.todo_list (
  2. item_id INT AUTO_INCREMENT,
  3. content VARCHAR(255),
  4. PRIMARY KEY(item_id)
  5. );

 

在测试表中插入几行内容。重复下一个命令多次,并使用不同的值来填充您的测试表。

  1. INSERT INTO example_database.todo_list (content) VALUES (My first important item);

 

要确认数据已经成功保存到您的表中,请运行以下操作:

  1. 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控制台。

  1. exit

 

现在,您可以创建一个连接到MariaDB并查询内容的PHP脚本。使用您首选的编辑器,在您的自定义网站根目录中创建一个新的PHP文件。

  1. nano /var/www/your_domain/todo_list.php

 

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

将这段内容添加到你的todo_list.php脚本中,记得用你自己的例子用户和密码值替换例子中的值。

/var/www/your_domain/todo_list.php 可以进行如下的中文表达:
/var/www/your_domain/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作为网页服务器,MariaDB作为数据库系统。

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

发表回复 0

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


广告
将在 10 秒后关闭
bannerAds