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

来自菜鸟教程
跳转至:导航、​搜索

介绍

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

在本指南中,我们将在 Debian 9 服务器上安装 LAMP 堆栈。

先决条件

为了完成本教程,您将需要一个 Debian 9 服务器,该服务器具有非 root sudo 启用的用户帐户和基本防火墙。 这可以使用我们的 Debian 9 初始服务器设置指南进行配置。

第 1 步 — 安装 Apache 并更新防火墙

Apache Web 服务器是世界上最流行的 Web 服务器之一。 它有据可查,并且在网络的大部分历史中都被广泛使用,这使其成为托管网站的绝佳默认选择。

使用 Debian 的包管理器 apt 安装 Apache:

sudo apt update
sudo apt install apache2

由于这是 sudo 命令,因此这些操作以 root 权限执行。 它会要求您提供常规用户的密码以验证您的意图。

输入密码后,apt 会告诉您它计划安装哪些软件包以及它们将占用多少额外的磁盘空间。 按 Y 并点击 ENTER 继续,安装将继续。

接下来,假设您已按照初始服务器设置说明安装和启用 UFW 防火墙,请确保您的防火墙允许 HTTP 和 HTTPS 流量。

在 Debian 9 上安装时,UFW 会加载应用程序配置文件,您可以使用这些配置文件来调整防火墙设置。 通过运行查看应用程序配置文件的完整列表:

sudo ufw app list

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

OutputAvailable applications:
. . .
  WWW
  WWW Cache
  WWW Full
  WWW Secure
. . .

如果您检查 WWW Full 配置文件,它显示它启用了到端口 80443 的流量:

sudo ufw app info "WWW Full"
OutputProfile: 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 9 Apache 网页,该网页用于提供信息和测试目的。 它应该看起来像这样:

如果您看到此页面,则您的 Web 服务器现在已正确安装并可通过防火墙访问。

如果您不知道服务器的公共 IP 地址是什么,可以通过多种方式找到它。 通常,这是您用于通过 SSH 连接到服务器的地址。

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

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

这会给你两三行回来。 它们都是正确的地址,但您的计算机可能只能使用其中一个,因此请随意尝试每个。

另一种方法是使用 curl 实用程序联系外部方,告诉您 it 如何查看您的服务器。 这是通过询问特定服务器您的 IP 地址是什么来完成的:

sudo apt install curl
curl http://icanhazip.com

无论您使用哪种方法获取 IP 地址,都可以在 Web 浏览器的地址栏中键入它以查看默认的 Apache 页面。

第 2 步 — 安装 MariaDB

现在您的 Web 服务器已启动并运行,是时候安装 MariaDB 了。 MariaDB 是一个数据库管理系统。 基本上,它将组织并提供对您的站点可以存储信息的数据库的访问。

MariaDB 是一个社区构建的 MySQL 分支。 在 Debian 9 中,默认的 MySQL 服务器是 MariaDB 10.1,而通常用于安装 MySQL 的 mysql-server 包是一个过渡包,它将实际安装 MariaDB。 但是,建议您使用程序的实际软件包 mariadb-server 安装 MariaDB。

同样,使用 apt 获取并安装此软件:

sudo apt install mariadb-server

注意:在这种情况下,您不必在命令之前运行sudo apt update。 这是因为您最近在上面的命令中运行它来安装 Apache,并且您计算机上的包索引应该已经是最新的。


该命令也将向您显示将要安装的软件包的列表,以及它们将占用的磁盘空间量。 输入 Y 继续。

安装完成后,运行 MariaDB 预装的简单安全脚本,该脚本将删除一些不安全的默认设置并锁定对数据库系统的访问。 通过运行启动交互式脚本:

sudo mysql_secure_installation

这将引导您完成一系列提示,您可以在其中对 MariaDB 安装的安全选项进行一些更改。 第一个提示会要求你输入当前数据库的root密码。 这是 MariaDB 中具有更高权限的管理帐户。 将其视为类似于服务器本身的 root 帐户(尽管您现在配置的帐户是 MariaDB 特定的帐户)。 因为你刚刚安装了 MariaDB,还没有做任何配置更改,所以这个密码会是空白的,所以在提示符下按 ENTER 即可。

下一个提示询问您是否要设置数据库 root 密码。 键入 N,然后按 ENTER。 在 Debian 中,MariaDB 的 root 帐户与自动系统维护密切相关,因此我们不应更改为该帐户配置的身份验证方法。 这样做可以使包更新通过删除对管理帐户的访问来破坏数据库系统。 稍后,我们将介绍如果套接字身份验证不适合您的用例,如何有选择地设置额外的管理帐户以进行密码访问。

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

在 Debian 系统上的新安装中,root MariaDB 用户默认设置为使用 unix_socket 插件进行身份验证,而不是使用密码。 这在许多情况下允许更高的安全性和可用性,但是当您需要允许外部程序(例如,phpMyAdmin)管理权限时,它也会使事情复杂化。

由于服务器使用 root 帐户执行日志轮换和启动和停止服务器等任务,因此最好不要更改 root 帐户的身份验证详细信息。 更改 /etc/mysql/debian.cnf 中的帐户凭据最初可能有效,但软件包更新可能会覆盖这些更改。 如果您需要设置基于密码的访问权限,包维护者建议不要修改 root 帐户,而是创建一个单独的管理帐户。

为此,我们将创建一个名为 admin 的新帐户,该帐户具有与 root 帐户相同的功能,但配置为密码验证。 为此,请从终端打开 MariaDB 提示符:

sudo mariadb

现在,我们可以创建一个具有 root 权限和基于密码访问权限的新用户。 更改用户名和密码以匹配您的偏好:

GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

刷新权限以确保它们已保存并在当前会话中可用:

FLUSH PRIVILEGES;

在此之后,退出 MariaDB shell:

exit

现在,无论何时您想以新的管理用户身份访问数据库,都需要使用刚刚使用以下命令设置的密码以该用户身份进行身份验证:

mariadb -u admin -p

此时,您的数据库系统已设置完毕,您可以继续安装 PHP,这是 LAMP 堆栈的最后一个组件。

第 3 步 — 安装 PHP

PHP 是您设置的组件,它将处理代码以显示动态内容。 它可以运行脚本,连接到您的 MariaDB 数据库以获取信息,并将处理后的内容交给您的 Web 服务器进行显示。

再次利用 apt 系统安装 PHP。 此外,这次包含一些帮助程序包,以便 PHP 代码可以在 Apache 服务器下运行并与您的 MariaDB 数据库通信:

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

这应该安装 PHP 没有任何问题。 我们稍后会对此进行测试。

在大多数情况下,您需要修改 Apache 在请求目录时提供文件的方式。 目前,如果用户向服务器请求目录,Apache 将首先查找名为 index.html 的文件。 我们想告诉 Web 服务器比其他文件更喜欢 PHP 文件,所以让 Apache 首先查找 index.php 文件。

为此,请键入以下命令以在具有 root 权限的文本编辑器中打开 dir.conf 文件:

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

它看起来像这样:

/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 规范之后的第一个位置,如下所示:

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

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

完成后,按 CTRL+X 保存并关闭文件。 通过输入 Y 确认保存,然后点击 ENTER 以验证文件保存位置。

在此之后,重新启动 Apache Web 服务器以识别您的更改。 通过键入以下内容执行此操作:

sudo systemctl restart apache2

您还可以使用 systemctl 检查 apache2 服务的状态:

sudo systemctl status apache2
Sample Output● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2018-09-04 18:23:03 UTC; 9s ago
  Process: 22209 ExecStop=/usr/sbin/apachectl stop (code=exited, status=0/SUCCESS)
  Process: 22216 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
 Main PID: 22221 (apache2)
    Tasks: 6 (limit: 4915)
   CGroup: /system.slice/apache2.service
           ├─22221 /usr/sbin/apache2 -k start
           ├─22222 /usr/sbin/apache2 -k start
           ├─22223 /usr/sbin/apache2 -k start
           ├─22224 /usr/sbin/apache2 -k start
           ├─22225 /usr/sbin/apache2 -k start
           └─22226 /usr/sbin/apache2 -k start

为了增强 PHP 的功能,您可以选择安装一些附加模块。 要查看 PHP 模块和库的可用选项,请将 apt search 的结果通过管道传送到 less,这是一个分页器,可让您滚动浏览其他命令的输出:

apt search php- | less

使用方向键上下滚动,按Q退出。

结果是您可以安装的所有可选组件。 它会给你一个简短的描述:

OutputSorting...
Full Text Search...
bandwidthd-pgsql/stable 2.0.1+cvs20090917-10 amd64
  Tracks usage of TCP/IP and builds html files with graphs

bluefish/stable 2.2.9-1+b1 amd64
  advanced Gtk+ text editor for web and software development

cacti/stable 0.8.8h+ds1-10 all
  web interface for graphing of monitoring systems

cakephp-scripts/stable 2.8.5-1 all
  rapid application development framework for PHP (scripts)

ganglia-webfrontend/stable 3.6.1-3 all
  cluster monitoring toolkit - web front-end

haserl/stable 0.9.35-2+b1 amd64
  CGI scripting program for embedded environments

kdevelop-php-docs/stable 5.0.3-1 all
  transitional package for kdevelop-php

kdevelop-php-docs-l10n/stable 5.0.3-1 all
  transitional package for kdevelop-php-l10n
…
:

要了解有关每个模块的功能的更多信息,您可以在互联网上搜索有关它们的更多信息。 或者,通过键入以下内容查看包的详细描述:

apt show package_name

将会有很多输出,其中一个名为 Description 的字段将对模块提供的功能进行更长的解释。

例如,要了解 php-cli 模块的作用,您可以键入:

apt show php-cli

连同大量其他信息,您会发现如下所示的内容:

Output…
Description: command-line interpreter for the PHP scripting language (default)
 This package provides the /usr/bin/php command interpreter, useful for
 testing PHP scripts from a shell or performing general shell scripting tasks.
 .
 PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used
 open source general-purpose scripting language that is especially suited
 for web development and can be embedded into HTML.
 .
 This package is a dependency package, which depends on Debian's default
 PHP version (currently 7.0).
…

如果在研究之后,您决定要安装一个软件包,您可以像安装其他软件一样使用 apt install 命令来安装。

如果您认为 php-cli 是您需要的,您可以输入:

sudo apt install php-cli

如果要安装多个模块,可以通过在 apt install 命令之后列出每个模块,以空格分隔,如下所示:

sudo apt install package1 package2 ...

至此,您的 LAMP 堆栈已安装并配置完毕。 不过,在进行更多更改或部署应用程序之前,主动测试您的 PHP 配置以防有任何问题需要解决会很有帮助。

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

为了测试您的系统是否为 PHP 正确配置,请创建一个非常基本的 PHP 脚本,称为 info.php。 为了让 Apache 找到这个文件并正确地提供它,它必须保存到一个非常具体的目录,称为 web 根目录

在 Debian 9 中,此目录位于 /var/www/html/。 通过运行在该位置创建文件:

sudo nano /var/www/html/info.php

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

/var/www/html/info.php

<?php
phpinfo();
?>

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

现在您可以测试您的 Web 服务器是否能够正确显示此 PHP 脚本生成的内容。 要试用此功能,请在您的网络浏览器中访问此页面。 您将再次需要服务器的公共 IP 地址。

您将要访问的地址是:

http://your_server_ip/info.php

你来到的页面应该是这样的:

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

如果您可以在浏览器中看到此页面,那么您的 PHP 正在按预期工作。

您可能希望在此测试之后删除此文件,因为它实际上可能会将有关您的服务器的信息提供给未经授权的用户。 为此,请运行以下命令:

sudo rm /var/www/html/info.php

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

结论

现在您已经安装了 LAMP 堆栈,接下来您有很多选择。 基本上,您已经安装了一个平台,该平台允许您在服务器上安装大多数类型的网站和 Web 软件。