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

介绍

一个 LAMP 堆栈是一种群组的开源软件,通常一起安装,使服务器能够托管动态网站和 Web 应用程序. 这个术语是代表 L inux 操作系统的缩写,与 ** A** pache Web 服务器。

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

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

前提条件

要遵循本教程,您需要有一个 Debian 10 服务器,具有非root sudo功能的用户帐户和基本防火墙,可以使用我们的 Debian 10 初始服务器安装指南来配置。

步骤 1 – 安装 Apache 和更新防火墙

Apache 网页服务器是世界上最受欢迎的网页服务器之一,它经过了很好的文档,并且已被广泛使用了网页历史的大部分时间,这使得它成为托管网站的绝佳默认选择。

如果这是你第一次在这个会话中使用sudo,你将被要求提供你的用户密码,以确认你有正确的权限来管理apt的系统包:

1sudo apt update

然后安装Apache,如下:

1sudo apt install apache2

此命令提示您确认 Apache 的安装。 通过按Y,然后按ENTER来确认。 安装完毕后,您需要调整防火墙设置。 假设您遵循最初的服务器设置指示 安装并启用 UFW 防火墙,请确保您的防火墙允许 HTTP 和 HTTPS 流量。

在 Debian 10 上,UFW 附带了应用程序配置文件,您可以使用它们来调整防火墙设置。

1sudo ufw app list

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

1[secondary_label Output]
2Available applications:
3. . .
4  WWW
5  WWW Cache
6  WWW Full
7  WWW Secure
8. . .

如果您检查WWW Full配置文件,则显示它允许对端口80443的流量:

1sudo ufw app info "WWW Full"
1[secondary_label Output]
2Profile: WWW Full
3Title: Web Server (HTTP,HTTPS)
4Description: Web Server (HTTP,HTTPS)
5
6Ports:
7  80,443/tcp

允许此配置文件的 HTTP 和 HTTPS 流量:

1sudo ufw allow in "WWW Full"

您可以通过访问您的网络浏览器中的服务器的公共IP地址来验证一切按照计划进行:

1http://your_server_ip

这将返回默认的 Debian 10 Apache 网页,该网页用于信息和测试:

Debian 10 Apache default

如果您的浏览器返回此页面,那么您的 Web 服务器现在已正确安装并通过您的防火墙访问。

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

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

首先,您可以使用iproute2工具通过运行来获取您的IP地址:

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

这些都是正确的地址,但您的计算机可能只能使用一个,所以可以尝试每一个。

另一种方法是使用弯曲实用程序与外部人员联系,告诉您其如何查看您的服务器,您可以运行以下命令并询问特定服务器您的IP地址:

由于 Debian 10 没有弯曲的默认值,您需要先安装它:

1sudo apt install curl

然后运行以下命令,并询问特定服务器您的IP地址是什么:

1curl http://icanhazip.com

无论方法如何,请将您的 IP 地址写入您的 Web 浏览器,以确认您的服务器正在运行默认的 Apache 页面。

第2步:安装MariaDB

现在您有一个 Web 服务器并运行,您需要安装数据库系统,以便为您的网站存储和管理数据。

在 Debian 10 中,传统上用于安装MySQL服务器的元包mysql-server默认的mysql-server取代了。

然而,对于长期的兼容性,建议您使用该程序的实际包mariadb-server来安装MariaDB,而不是使用元包。

要安装 MariaDB 软件,请运行:

1sudo apt install mariadb-server

安装完成后,建议您运行预先安装的安全脚本 MariaDB. 此脚本将删除一些不安全的默认设置,并锁定访问您的数据库系统。

1sudo mysql_secure_installation

此脚本将引导您通过一系列提示,您可以对您的 MariaDB 设置做出一些更改。第一个提示将要求您输入当前的 database root 密码. 这不应该与 ** system root** 混淆。

接下来的提示会问你是否想要设置一个 数据库根 ** 密码. 由于 MariaDB 对于 ** root 用户使用了一个特殊的身份验证方法,这通常比使用密码更安全,所以你不需要现在设置这个密码。

从那里,您可以按Y,然后按ENTER,以接受所有后续问题的默认值。这将删除匿名用户和测试数据库,禁用远程 root 登录,并加载这些新规则,以便MariaDB立即尊重您所做的更改。

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

1sudo mariadb

这将作为管理数据库用户 root 连接到MariaDB服务器,在运行此命令时使用sudo来推断。

 1[secondary_label Output]
 2Welcome to the MariaDB monitor. Commands end with ; or \g.
 3Your MariaDB connection id is 42
 4Server version: 10.3.36-MariaDB-0+deb10u2 Debian 10
 5
 6Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
 7
 8Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 9
10MariaDB [(none)]>

请注意,您不需要提供密码以作为 root 用户连接。 这是因为管理 MariaDB 用户的默认身份验证方法是unix_socket而不是password。 虽然这起初可能看起来像是一个安全问题,但它使数据库服务器更安全,因为唯一允许登录作为 ** root** MariaDB 用户的用户是从控制台或通过运行相同权限的应用程序连接的sudo权限的系统用户。

为了提高安全性,最好为每个数据库设置具有较少扩展权限的专用用户帐户,特别是如果您计划在服务器上托管多个数据库。

您可以通过以下方式退出 MariaDB 控制台:

1exit

您的 MariaDB 服务器现在已安装和安全。接下来,您将安装 PHP,LAMP 堆栈的最终组件。

步骤三:安装PHP

你安装了Apache来服务你的内容,安装了MariaDB来存储和管理你的数据。PHP是你的设置的组件,它将处理代码,向最终用户显示动态内容。

除了php包外,您还需要php-mysql,一个允许PHP与MariaDEB等基于MySQL的数据库进行通信的PHP模块,您还需要libapache2-mod-php来允许Apache处理PHP文件。

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

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

一旦安装完成,您可以通过以下命令验证您的PHP版本:

1php -v
1[secondary_label Output]
2PHP 7.3.31-1~deb10u2 (cli) (built: Dec 15 2022 09:39:10) ( NTS )
3Copyright (c) 1997-2018 The PHP Group
4Zend Engine v3.3.31, Copyright (c) 1998-2018 Zend Technologies
5    with Zend OPcache v7.3.31-1~deb10u2, Copyright (c) 1999-2018, by Zend Technologies

目前,如果用户从服务器请求一个目录,Apache首先会搜索一个名为index.html的文件。

要做到这一点,请运行以下命令,在您喜爱的文本编辑器中打开 dir.conf 文件,使用 root 特权。

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

内容将如下:

1[label /etc/apache2/mods-enabled/dir.conf]
2<IfModule mod_dir.c>
3    DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
4</IfModule>

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

1[label /etc/apache2/mods-enabled/dir.conf]
2<IfModule mod_dir.c>
3    DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
4</IfModule>

完成后,保存并关闭文件. 如果您正在使用nano,您可以通过按CTRL+X,然后按YENTER来确认。

现在重新加载 Apache 配置:

1sudo systemctl reload apache2

您可以通过systemctl status检查apache2服务的状态:

1sudo systemctl status apache2
 1[secondary_label Sample Output]
 2 apache2.service - The Apache HTTP Server
 3   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset:
 4   Active: active (running) since Fri 2023-01-20 22:21:24 UTC; 2min 12s ago
 5     Docs: https://httpd.apache.org/docs/2.4/
 6  Process: 13076 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCC
 7  Process: 13097 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/
 8 Main PID: 13080 (apache2)
 9    Tasks: 6 (limit: 4915)
10   Memory: 13.7M
11   CGroup: /system.slice/apache2.service
12           ├─13080 /usr/sbin/apache2 -k start
13           ├─13101 /usr/sbin/apache2 -k start
14           ├─13102 /usr/sbin/apache2 -k start
15           ├─13103 /usr/sbin/apache2 -k start
16           ├─13104 /usr/sbin/apache2 -k start
17           └─13105 /usr/sbin/apache2 -k start

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

步骤4:为您的网站创建虚拟主机

在使用 Apache 网页服务器时,您可以创建 virtual hosts(类似于 Nginx 中的服务器块)来封装配置细节,并从单个服务器中托管多个域。

<$>[注] 注: 如果您正在使用DigitalOcean作为DNS提供商,请查看我们的 产品文档有关如何设置新域名的详细说明,并将其指向您 server <$>

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

首先,创建 your_domain 的根网页目录,如下:

1sudo mkdir /var/www/your_domain

接下来,与$USER环境变量分配目录的所有权,该变量将参考您的当前系统用户:

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

然后,使用您喜爱的文本编辑器在Apache的可用网站目录中打开一个新的配置文件。

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

这会创建一个新的空格文件. 使用自己的域名添加以下裸体配置:

1[label /etc/apache2/sites-available/your_domain]
2<VirtualHost *:80>
3    ServerName your_domain
4    ServerAlias www.your_domain 
5    ServerAdmin webmaster@localhost
6    DocumentRoot /var/www/your_domain
7    ErrorLog ${APACHE_LOG_DIR}/error.log
8    CustomLog ${APACHE_LOG_DIR}/access.log combined
9</VirtualHost>

通过这个VirtualHost配置,你告诉Apache使用/var/www/your_domain作为网页根目录来服务你的_域 如果你想测试没有域名的Apache,你可以删除或评论ServerNameServerAlias选项,通过在每个选项行开始时添加一个英镑符号(# )字符。

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

现在使用a2ensite来启用这个虚拟主机:

1sudo a2ensite your_domain

您可能想禁用与 Apache 一起安装的默认网站. 如果您不使用自定义域名,则需要此功能,因为在这种情况下,Apache 的默认配置会重写您的虚拟主机。

1sudo a2dissite 000-default

要确保您的配置文件不包含语法错误,您可以运行:

1sudo apache2ctl configtest

最后,重新加载 Apache,以便这些更改生效:

1sudo systemctl reload apache2

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

步骤 5 – 在您的 Web 服务器上测试 PHP 处理

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

首先,在您的自定义 Web 根文件夹中创建一个名为 info.php 的新文件:

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

添加以下文本,即有效的PHP代码,在文件中:

1[label /var/www/your_domain/info.php]
2<?php
3phpinfo();

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

要测试脚本,请进入您的Web浏览器并访问您的服务器的域名或IP地址,然后是脚本名称,在这种情况下是info.php:

1http://your_domain/info.php

以下是默认 PHP 网页的示例:

Default PHP info

此页面提供了一些关于您的服务器的基本信息,从PHP的角度来看,这对调试和确保您的设置被正确应用是有用的。

如果您在浏览器中收到此页面,那么您的PHP安装将按预期运行。

在通过该页面检查有关您的 PHP 服务器的相关信息后,最好删除您创建的文件,因为它包含有关您的 PHP 环境和您的 Debian 服务器的敏感信息。

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

您可以随时重建此页面,如果您需要稍后再次访问该信息。

步骤 6 — 测试 PHP 数据库连接(可选)

如果你想测试PHP是否能够连接到MariaDB并执行数据库查询,你可以创建一个测试表,从PHP脚本中测试数据和查询其内容。

首先,使用 root 帐户连接到 MariaDB 控制台:

1sudo mariadb

若要创建新数据库,请从 MariaDB 控制台执行以下命令:

1CREATE DATABASE example_database;

现在创建一个新的用户,并授予他们在您创建的自定义数据库上的完整权限。

下列命令会创建一个名为example_user的新用户,该用户使用密码进行身份验证,我们将该用户的密码定义为密码,但您应该用您选择的安全密码来代替此值:

1CREATE USER 'example_user'@'%' IDENTIFIED BY 'password';

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

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

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

接下来,清除权限,以确保它们在当前会话中存储和可用:

1FLUSH PRIVILEGES;

接下来,输出 MariaDB 壳:

1exit

您可以通过再次登录 MariaDB 控制台来测试新用户是否有正确的权限,这次使用自定义用户凭证:

1mariadb -u example_user -p

请注意这个命令中的p旗,它会提示您在创建 example_user 时使用的密码。

1SHOW DATABASES;

这将为您带来以下结果:

1[secondary_label Output]
2+--------------------+
3| Database           |
4+--------------------+
5| example_database   |
6| information_schema |
7+--------------------+
82 rows in set (0.000 sec)

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

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

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

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

若要确认数据已成功保存到表中,请运行:

1SELECT * FROM example_database.todo_list;

您将获得以下输出:

 1[secondary_label Output]
 2+---------+--------------------------+
 3| item_id | content                  |
 4+---------+--------------------------+
 5|       1 | My first important item  |
 6|       2 | My second important item |
 7|       3 | My third important item  |
 8|       4 | and this one more thing  |
 9+---------+--------------------------+
104 rows in set (0.000 sec)

在确认您在测试表中有有效数据后,您可以退出 MariaDB 控制台:

1exit

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

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

下面的 PHP 脚本连接到 MariaDB 数据库并查询 todo_list 表的内容,在列表中显示结果。

将此内容添加到你的todo_list.php脚本中,记住用你自己的代替example_userpassword值:

 1[label /var/www/your_domain/todo_list.php]
 2<?php
 3$user = "example_user";
 4$password = "password";
 5$database = "example_database";
 6$table = "todo_list";
 7
 8try {
 9  $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
10  echo "<h2>TODO</h2><ol>"; 
11  foreach($db->query("SELECT content FROM $table") as $row) {
12    echo "<li>" . $row['content'] . "</li>";
13  }
14  echo "</ol>";
15} catch (PDOException $e) {
16    print "Error!: " . $e->getMessage() . "<br/>";
17    die();
18}

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

您现在可以访问您的网页浏览器中的这个页面,访问您的网站的域名或公共IP地址,然后是/todo_list.php:

1http://your_domain/todo_list.php

此网页将向您的访问者透露您在测试表中插入的内容:

Example PHP todo list

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

结论

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

作为下一步,您应该通过通过HTTPS来确保与您的Web服务器的连接是安全的。 为了做到这一点,您可以使用Let's Encrypt

Published At
Categories with 技术
comments powered by Disqus