

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 教程：在上安装 LAMP 服务器 AL2023
<a name="ec2-lamp-amazon-linux-2023"></a>

以下过程可帮助您在 AL2023 您的实例（有时称为 LAMP 网络服务器或 LAMP 堆栈）上安装支持 PHP 和 M [ar](https://mariadb.org/about/) iaDB（社区开发的 MySQL 分支）的 Apache 网络服务器。您可以使用此服务器来托管静态网站或部署能对数据库中的信息执行读写操作的动态 PHP 应用程序。

**重要**  
这些程序旨在与一起使用 AL2023。如果您尝试在其他发行版（例如 Ubuntu 或红帽企业 Linux）上设置 LAMP Web 服务器，则本教程不适合。[对于 Ubuntu，请参阅以下 Ubuntu 社区文档：SQLPHP。ApacheMy](https://help.ubuntu.com/community/ApacheMySQLPHP)有关其他发布版本，请参阅特定于该版本的文档。

**Topics**
+ [步骤 1：准备 LAMP 服务器](#prepare-lamp-server-2023)
+ [步骤 2：测试 LAMP 服务器](#test-lamp-server-2023)
+ [步骤 3：确保数据库服务器的安全](#secure-mariadb-lamp-server-2023)
+ [步骤 4：（可选）安装 phpMyAdmin](#install-phpmyadmin-lamp-server-2023)
+ [故障排除](#lamp-troubleshooting-2023)
+ [相关主题](#lamp-more-info-2023)

## 步骤 1：准备 LAMP 服务器
<a name="prepare-lamp-server-2023"></a>

**先决条件**
+ 本教程假设您已经使用 AL2023一个可从互联网访问的公有 DNS 名称启动了一个新实例。有关更多信息，请参阅 [Amazon EC2 上的 AL2023](ec2.md)。您还必须配置安全组，以便允许 SSH (端口 22)、HTTP (端口 80) 和 HTTPS (端口 443) 连接。有关这些先决条件的更多信息，请参阅*《Amazon EC2 用户指南》*中的[为您的 Linux 实例授权入站流量](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/authorizing-access-to-an-instance.html)。
+ 以下过程安装最新的 PHP 版本（当前为 AL2023 8.1）。如果您计划使用本教程中所述的 PHP 应用程序之外的 PHP 应用程序，则应检查其与 8.1 的兼容性。<a name="install_apache-2023"></a>

**准备 LAMP 服务器**

1. 连接到您的 实例。有关更多信息，请参阅 [连接到 AL2023 实例](connecting-to-instances.md)。

1. 为确保您的所有软件包都处于最新状态，请对您的实例执行快速软件更新。此过程可能需要几分钟的时间，但必须确保您拥有最新的安全更新和缺陷修复。

   `-y` 选项安装更新时不提示确认。如果您希望在安装前检查更新，则可以忽略该选项。

   ```
   [ec2-user ~]$ sudo dnf upgrade -y
   ```

1. 安装最新版本的 Apache Web 服务器和适用的 PHP 软件包。 AL2023

   ```
   [ec2-user ~]$ sudo dnf install -y httpd wget php-fpm php-mysqli php-json php php-devel
   ```

1. 安装 MariaDB 软件包。使用 **dnf install** 命令可同时安装多个软件包和所有相关依赖项。

   ```
   [ec2-user ~]$ sudo dnf install mariadb105-server
   ```

   您可以使用以下命令查看这些程序包的当前版本：

   ```
   [ec2-user ~]$ sudo dnf info package_name
   ```

   示例：

   ```
   [root@ip-172-31-25-170 ec2-user]# dnf info mariadb105
   Last metadata expiration check: 0:00:16 ago on Tue Feb 14 21:35:13 2023.
   Installed Packages
   Name         : mariadb105
   Epoch        : 3
   Version      : 10.5.16
   Release      : 1.amzn2023.0.6
   Architecture : x86_64
   Size         : 18 M
   Source       : mariadb105-10.5.16-1.amzn2023.0.6.src.rpm
   Repository   : @System
   From repo    : amazonlinux
   Summary      : A very fast and robust SQL database server
   URL          : http://mariadb.org
   License      : GPLv2 and LGPLv2
   Description  : MariaDB is a community developed fork from MySQL - a multi-user, multi-threaded
                : SQL database server. It is a client/server implementation consisting of
                : a server daemon (mariadbd) and many different client programs and libraries.
                : The base package contains the standard MariaDB/MySQL client programs and
                : utilities.
   ```

1. 启动 Apache Web 服务器。

   ```
   [ec2-user ~]$ sudo systemctl start httpd
   ```

1.  使用 **systemctl** 命令配置 Apache Web 服务器，使其在每次系统启动时启动。

   ```
   [ec2-user ~]$ sudo systemctl enable httpd
   ```

   您可以通过运行以下命令验证 **httpd** 是否已启用：

   ```
   [ec2-user ~]$ sudo systemctl is-enabled httpd
   ```

1. 如果您尚未这样做，请添加安全规则以允许与您的实例的入站 HTTP (端口 80) 连接。默认情况下，**启动时会为您的实例创建启动向导*N***安全组。如果您没有添加其他安全组规则，此组仅包含允许 SSH 连接的一条规则。

   1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

   1. 在左侧的导航中，选择 **Instances**（实例），然后选择您的实例。

   1. 在**安全**选项卡上，查看入站规则。您应看到以下规则：

      ```
      Port range   Protocol     Source
      22           tcp          0.0.0.0/0
      ```
**警告**  
使用`0.0.0.0/0`允许所有 IPv4 地址通过 SSH 访问您的实例。这在测试环境中可以接受一小段时间，但是在生产环境中并不安全。在生产环境中，您仅授权特定 IP 地址或地址范围访问您的实例。

   1. 如果没有允许 HTTP（端口 80）连接的入站规则，则必须立即添加规则。选择安全组的链接。使用[为您的 Linux 实例授权入站流量](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/authorizing-access-to-an-instance.html)中的步骤，添加具有以下值的新入站安全规则：
      + **类型**：HTTP
      + **协议**：TCP
      + **Port Range**：80
      + **Source**：Custom

1. 测试您的 Web 服务器。在 Web 浏览器中，键入您的实例的公有 DNS 地址 (或公有 IP 地址)。如果 `/var/www/html` 中没有内容，您应该会看到 Apache 测试页面，该页面将显示消息 **It works\$1**（它工作正常！）。

   您可以使用 Amazon EC2 控制台获取实例的公有 DNS（查看**公有 IPv4 DNS** 列；如果此列处于隐藏状态，请选择**首选项**（齿轮形图标）并打开**公 IPv4 有 DNS**）。

   验证实例的安全组是否包含允许端口 80 上的 HTTP 流量的规则。更多信息，请参阅[向安全组添加规则](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule)。
**重要**  
如果您使用的不是 Amazon Linux，则还可能需要在实例上配置防火墙才能允许这些连接。有关如何配置防火墙的更多信息，请参阅适用于特定分配的文档。

Apache **httpd** 提供的文件保存在名为 Apache 文档根目录的目录中。Amazon Linux Apache 文档根目录为 `/var/www/html`，默认情况下归根用户所有。

要允许 `ec2-user` 账户操作此目录中的文件，必须修改其所有权和权限。有多种方式可以完成此任务。在本教程中，可将 `ec2-user` 添加到 `apache` 组，将 `/var/www` 目录的所有权授予 `apache` 组，并为该组指定写入权限。<a name="setting-file-permissions-2023"></a>

**设置文件权限**

1. 将您的用户 (这里指 `ec2-user`) 添加到 `apache`。

   ```
   [ec2-user ~]$ sudo usermod -a -G apache ec2-user
   ```

1. 先退出再重新登录以选取新组，然后验证您的成员资格。

   1. 退出（使用 **exit** 命令或关闭终端窗口）：

      ```
      [ec2-user ~]$ exit
      ```

   1. 要验证您是否为 `apache` 组的成员，请重新连接到实例，然后运行以下命令：

      ```
      [ec2-user ~]$ groups
      ec2-user adm wheel apache systemd-journal
      ```

1. 将 `/var/www` 及其内容的组所有权更改到 `apache` 组。

   ```
   [ec2-user ~]$ sudo chown -R ec2-user:apache /var/www
   ```

1. 要添加组写入权限以及设置未来子目录上的组 ID，请更改 `/var/www` 及其子目录的目录权限。

   ```
   [ec2-user ~]$ sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
   ```

1. 要添加组写入权限，请递归地更改 `/var/www` 及其子目录的文件权限：

   ```
   [ec2-user ~]$ find /var/www -type f -exec sudo chmod 0664 {} \;
   ```

这样，`ec2-user` (和 `apache` 组的任何未来成员) 可以添加、删除和编辑 Apache 文档根目录中的文件，允许您添加内容，如静态网站或 PHP 应用程序。

**保护您的 Web 服务器 (可选)**  
运行 HTTP 协议的 Web 服务器不为其发送或接收的数据提供传输安全。当您使用 Web 浏览器连接到 HTTP 服务器时，网络路径上任何地方的窃听者都可以看到您访问的内容、收到的网页内容以及您提交的任何 HTML 表单的内容（包括密码）。 URLs 保护您的 Web 服务器的最佳实践是安装 HTTPS (HTTP Secure) 支持，它将使用 SSL/TLS 加密保护您的数据。

有关在服务器上启用 HTTPS 的信息，请参阅 [教程： SSL/TLS 开启配置 AL2023](SSL-on-amazon-linux-2023.md)。

## 步骤 2：测试 LAMP 服务器
<a name="test-lamp-server-2023"></a>

如果服务器已安装并运行，且文件权限设置正确，则 `ec2-user` 账户应该能够在 `/var/www/html` 目录 (可从 Internet 访问) 中创建 PHP 文件。

**测试您的 LAMP 服务器**

1. 在 Apache 文档根目录中创建一个 PHP 文件。

   ```
   [ec2-user ~]$ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
   ```

   尝试运行该命令时，如果出现“Permission denied (权限被拒绝)”错误，请尝试先注销，再重新登录，以获取您在 [设置文件权限](#setting-file-permissions-2023) 中配置的适当组权限。

1. 在 Web 浏览器中，键入您刚刚创建的文件的 URL。此 URL 是实例的公用 DNS 地址，后接正斜杠和文件名。例如：

   ```
   http://my.public.dns.amazonaws.com/phpinfo.php
   ```

   您应该会看到 PHP 信息页面：  
![\[LAMP 服务器测试显示 PHP 信息页面。\]](http://docs.aws.amazon.com/zh_cn/linux/al2023/ug/images/php-8.1.7-2022.png)

   如果您未看到此页面，请验证上一步中是否已正确创建 `/var/www/html/phpinfo.php` 文件。您还可以使用以下命令验证已经安装了所有必需的程序包。

   ```
   [ec2-user ~]$ sudo dnf list installed httpd mariadb-server php-mysqlnd
   ```

   如果输出中未列出任何必需的程序包，请使用 **sudo yum install *package*** 命令安装它们。

1. 删除 `phpinfo.php` 文件。尽管此信息可能很有用，但出于安全考虑，不应将其传播到 Internet。

   ```
   [ec2-user ~]$ rm /var/www/html/phpinfo.php
   ```

现在，您应该有了一个功能完善的 LAMP Web 服务器。如果您将内容添加到 Apache 文档根目录 (位于 `/var/www/html`)，您应该能够在您的实例的公有 DNS 地址中看到该内容。

## 步骤 3：确保数据库服务器的安全
<a name="secure-mariadb-lamp-server-2023"></a>

MariaDB 服务器的默认安装提供有多种功能，这些功能对于测试和开发都很有帮助，但对于产品服务器，应禁用或删除这些功能。**mysql\$1secure\$1installation** 命令可引导您设置根密码并删除安装中的不安全功能。即使您不打算使用 MariaDB 服务器，我们也建议执行此步骤。<a name="securing-maria-db-2023"></a>

**保护 MariaDB 服务器**

1. 启动 MariaDB 服务器。

   ```
   [ec2-user ~]$ sudo systemctl start mariadb
   ```

1. 运行 **mysql\$1secure\$1installation**。

   ```
   [ec2-user ~]$ sudo mysql_secure_installation
   ```

   1. 在提示时，键入根账户的密码。

      1. 键入当前根密码。默认情况下，根账户没有设置密码。按 Enter。

      1. 键入 **Y** 设置密码，然后键入两次安全密码。有关创建安全密码的更多信息，请参阅[https://identitysafe.norton.com/password-generator/](https://identitysafe.norton.com/password-generator/)。确保将此密码存储在安全位置。

         设置 MariaDB 根密码仅是保护数据库的最基本措施。在您构建或安装数据库驱动的应用程序时，您通常可以为该应用程序创建数据库服务用户，并避免使用根账户执行除数据库管理以外的操作。

   1. 键入 **Y** 删除匿名用户账户。

   1. 键入 **Y** 禁用远程根登录。

   1. 键入 **Y** 删除测试数据库。

   1. 键入 **Y** 重新加载权限表并保存您的更改。

1. (可选) 如果您不打算立即使用 MariaDB 服务器，请停止它。您可以在需要时再次重新启动。

   ```
   [ec2-user ~]$ sudo systemctl stop mariadb
   ```

1. (可选) 如果您希望每次启动时 MariaDB 服务器都启动，请键入以下命令。

   ```
   [ec2-user ~]$ sudo systemctl enable mariadb
   ```

## 步骤 4：（可选）安装 phpMyAdmin
<a name="install-phpmyadmin-lamp-server-2023"></a>

[phpMyAdmin](https://www.phpmyadmin.net/)是一款基于 Web 的数据库管理工具，可用于查看和编辑 EC2 实例上的 MySQL 数据库。按照下述步骤操作，在您的 Amazon Linux 实例上安装和配置 `phpMyAdmin`。

**重要**  
除非您已在 Apache SSL/TLS 中启用，否则我们不建议使用`phpMyAdmin`来访问 LAMP 服务器；否则，您的数据库管理员密码和其他数据将不安全地通过 Internet 传输。有关开发人员提出的安全建议，请参阅[保护您的 phpMyAdmin 安装](https://docs.phpmyadmin.net/en/latest/setup.html#securing-your-phpmyadmin-installation)。有关在 EC2 实例上保护 Web 服务器的一般信息，请参阅 [教程： SSL/TLS 开启配置 AL2023](SSL-on-amazon-linux-2023.md)。

**要安装 phpMyAdmin**

1. 安装所需的依赖项。

   ```
   [ec2-user ~]$ sudo dnf install php-mbstring php-xml -y
   ```

1. 重启 Apache。

   ```
   [ec2-user ~]$ sudo systemctl restart httpd
   ```

1. 重启 `php-fpm`。

   ```
   [ec2-user ~]$ sudo systemctl restart php-fpm
   ```

1. 导航到位于 `/var/www/html` 的 Apache 文档根。

   ```
   [ec2-user ~]$ cd /var/www/html
   ```

1. 从 [https://www.phpmyadmin.net/downloads](https://www.phpmyadmin.net/downloads) 选择最新 phpMyAdmin 版本的源软件包。要将文件直接下载到您的实例，请复制链接并将其粘贴到 **wget** 命令，如本示例中所述：

   ```
   [ec2-user html]$ wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
   ```

1. 使用以下命令创建 `phpMyAdmin` 文件夹并将程序包提取到其中。

   ```
   [ec2-user html]$ mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1
   ```

1. 删除*phpMyAdmin-latest-all-languages.tar.gz*压缩包。

   ```
   [ec2-user html]$ rm phpMyAdmin-latest-all-languages.tar.gz
   ```

1.  (可选) 如果 MySQL 服务器未运行，请立即启动它。

   ```
   [ec2-user ~]$ sudo systemctl start mariadb
   ```

1. 在 Web 浏览器中，键入 phpMyAdmin 安装的 URL。此 URL 是实例的公有 DNS 地址 (或公有 IP 地址)，后接正斜杠和您安装目录的名称。例如：

   ```
   http://my.public.dns.amazonaws.com/phpMyAdmin
   ```

   你应该会看到 phpMyAdmin 登录页面：  
![\[键入 phpMyAdmin 安装的 URL 的结果是 phpMyAdmin 登录屏幕。\]](http://docs.aws.amazon.com/zh_cn/linux/al2023/ug/images/phpmyadmin_login.png)

1. 使用您之前创建的`root`用户名和 MySQL 根密码登录您的 phpMyAdmin 安装。

   您的安装仍需进行配置，然后才能投入使用。我们建议您首先手动创建配置文件，如下所示：

   1. 要从最小的配置文件开始，请使用您常用的文本编辑器创建一个新文件，然后将 `config.sample.inc.php` 的内容复制到该文件中。

   1. 将文件另存为`config.inc.php`包含的 phpMyAdmin 目录中`index.php`。

   1. 有关任何其他设置，请参阅安装说明的 [“使用 phpMyAdmin 安装脚本](https://docs.phpmyadmin.net/en/latest/setup.html#using-the-setup-script)” 部分中的文件创建后说明。

    有关使用的信息 phpMyAdmin，请参阅《[phpMyAdmin 用户指南》](http://docs.phpmyadmin.net/en/latest/user.html)。

## 故障排除
<a name="lamp-troubleshooting-2023"></a>

本部分提供了解决在设置新 LAMP 服务器时可能遇到的常见问题的建议。

### 我无法使用 Web 浏览器连接到我的服务器
<a name="is_apache_on_2023"></a>

执行以下检查以查看您的 Apache Web 服务器是否正在运行且可以访问。
+ **Web 服务器正在运行吗？**

  您可以通过运行以下命令验证 **httpd** 是否已启用：

  ```
  [ec2-user ~]$ sudo systemctl is-enabled httpd
  ```

  如果 **httpd** 进程未运行，请重复[准备 LAMP 服务器](#install_apache-2023)中描述的步骤。
+ **防火墙是否配置正确？**

  验证实例的安全组是否包含允许端口 80 上的 HTTP 流量的规则。更多信息，请参阅[向安全组添加规则](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule)。

### 我无法使用 HTTPS 连接到我的服务器
<a name="is-https-enabled-2023"></a>

执行以下检查以查看 Apache Web 服务器是否配置为支持 HTTPS。
+ **Web 服务器配置是否正确？**

  安装 Apache 后，服务器将针对 HTTP 流量进行配置。要支持 HTTPS，请在服务器上启用 TLS 并安装 SSL 证书。有关信息，请参阅 [教程： SSL/TLS 开启配置 AL2023](SSL-on-amazon-linux-2023.md)。
+ **防火墙是否配置正确？**

  验证实例的安全组是否包含允许端口 443 上的 HTTPS 流量的规则。更多信息，请参阅[为您的 Linux 实例授权入站流量](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/authorizing-access-to-an-instance.html)。

## 相关主题
<a name="lamp-more-info-2023"></a>

有关将文件传输到您的实例或在 Web 服务器上安装 WordPress 博客的更多信息，请参阅以下文档：
+ *《Amazon EC2 用户指南》*中的[使用 WinSCP 将文件传输到 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html#Transfer_WinSCP)。
+ *《Amazon EC2 用户指南》*中的[使用 SCP 客户端将文件传输到 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-linux-inst-ssh.html#linux-file-transfer-scp)。
+ [教程：在上发布 WordPress 博客 AL2023](hosting-wordpress-aml-2023.md)

有关本教程中使用的命令和软件的更多信息，请参阅以下网页：
+ Apache Web 服务器：[http://httpd.apache.org/](http://httpd.apache.org/)
+ MariaDB 数据库服务器：[https://mariadb.org/](https://mariadb.org/)
+ PHP 编程语言：[http://php.net/](http://php.net/)

有关注册 Web 服务器域名或将现有域名转移到此主机的更多信息，请参阅 *Amazon Route 53 开发人员指南*中的[创建域和子域并将其迁移到 Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/creating-migrating.html)。