

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

# 教程：在上安装 LAMP 服务器 AL1
<a name="install-LAMP"></a>

**注意**  
 不再支持亚马逊 Linux 1（AL1前身为亚马逊 Linux AMI）。本指南仅供参考。

以下过程可帮助您在您的 AL1 实例（有时称为 LAMP 网络服务器或 LAMP 堆栈）上安装支持 PHP 和 MySQL 的 Apache Web 服务器。您可以使用此服务器来托管静态网站或部署能对数据库中的信息执行读写操作的动态 PHP 应用程序。

**重要**  
如果您尝试在其他发行版（例如 Ubuntu 或红帽企业 Linux）上设置 LAMP Web 服务器，则本教程不适合。有关信息 AL2，请参阅[教程：在上安装 LAMP 服务器 AL2](https://docs.aws.amazon.com/linux/al2/ug/ec2-lamp-amazon-linux-2.html)。[对于 Ubuntu，请参阅以下 Ubuntu 社区文档 SQLPHP。ApacheMy](https://help.ubuntu.com/community/ApacheMySQLPHP)有关其他发布版本，请参阅特定于该版本的文档。

**选项：使用 Automation 完成本教程**  
要使用 AWS Systems Manager 自动化而不是以下任务来完成本教程，请运行 [AWS Docs-Install ALAMPServer-AL A](https://console.aws.amazon.com/systems-manager/automation/execute/AWSDocs-InstallALAMPServer-AL) utomation 文档。

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

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

**先决条件**  
本教程假定您已经使用 Amazon Linux AMI 启动具有可从 Internet 访问的公有 DNS 名称的新实例。有关更多信息，请参阅*《Amazon EC2 用户指南》*中的[启动实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html)。您还必须配置安全组，以便允许 SSH (端口 22)、HTTP (端口 80) 和 HTTPS (端口 443) 连接。有关这些先决条件的更多信息，请参阅 *Amazon EC2 用户指南*中的[安全组规则](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules.html)。

**使用 Amazon Linux AMI 安装和启动 LAMP Web 服务器**

1. [连接到您的 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html)。

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

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

   ```
   [ec2-user ~]$ sudo yum update -y
   ```

1. 您的实例处于最新状态后，便可以安装 Apache Web 服务器、MySQL 和 PHP 软件包。
**重要**  
一些应用程序可能与以下建议的软件环境不兼容。在安装这些软件包之前，请检查您的 LAMP 应用程序是否与其兼容。如果出现问题，您可能需要安装替代环境。有关更多信息，请参阅 [我想在我的服务器上运行的应用程序软件与所安装的 PHP 版本或其他软件不兼容](#software-versions-alami) 

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

   ```
   [ec2-user ~]$ sudo yum install -y httpd24 php72 mysql57-server php72-mysqlnd
   ```

   如果您收到错误消息`No package package-name available`，则说明您的实例未通过 Amazon Linux AMI 启动（可能您正在 AL2改用）。您可以使用以下命令查看 Amazon Linux 的版本。

   ```
   cat /etc/system-release
   ```

1. 启动 Apache Web 服务器。

   ```
   [ec2-user ~]$ sudo service httpd start
   Starting httpd:                                            [  OK  ]
   ```

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

   ```
   [ec2-user ~]$ sudo chkconfig httpd on
   ```

   当您成功地使用 **chkconfig** 命令启用服务时，该命令不提供任何确认消息。

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

   ```
   [ec2-user ~]$ chkconfig --list httpd
   httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
   ```

   在这里，**httpd** 是处于运行级别 2、3、4 和 5 的 `on`（这是您希望看到的）。

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. 选择安全组的链接。使用[向安全组添加规则](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule)中的步骤，添加具有以下值的新入站安全规则：
      + **类型**：HTTP
      + **协议**：TCP
      + **Port Range**：80
      + **Source**：Custom

1. 测试您的 Web 服务器。在 Web 浏览器中，键入您的实例的公有 DNS 地址 (或公有 IP 地址)。可以使用 Amazon EC2 控制台获取实例的公有 DNS 地址。如果 `/var/www/html` 中没有内容，您应该会看到 Apache 测试页面。将内容添加到文档根目录后，您的内容将显示在您的实例的公有 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 ~]$ ls -l /var/www
total 16
drwxr-xr-x 2 root root 4096 Jul 12 01:00 cgi-bin
drwxr-xr-x 3 root root 4096 Aug  7 00:02 error
drwxr-xr-x 2 root root 4096 Jan  6  2012 html
drwxr-xr-x 3 root root 4096 Aug  7 00:02 icons
drwxr-xr-x 2 root root 4096 Aug  7 21:17 noindex
```

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

**设置文件权限**

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 wheel apache
      ```

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
   [ec2-user ~]$ 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 在亚马逊 Linux 上配置 AMI](SSL-on-amazon-linux-ami.md)。

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

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

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

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

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

   尝试运行该命令时，如果出现“Permission denied (权限被拒绝)”错误，请尝试先注销，再重新登录，以获取您在 [步骤 1：准备 LAMP 服务器](#prepare-lamp-server-alami) 中配置的适当组权限。

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

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

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

   如果您未看到此页面，请验证上一步中是否已正确创建 `/var/www/html/phpinfo.php` 文件。您还可以使用以下命令验证已经安装了所有必需的程序包。第二列中的程序包版本不需要与此示例输出匹配。

   ```
   [ec2-user ~]$ sudo yum list installed httpd24 php72 mysql57-server php72-mysqlnd
   Loaded plugins: priorities, update-motd, upgrade-helper
   Installed Packages
   httpd24.x86_64                          2.4.25-1.68.amzn1                    @amzn-updates
   mysql56-server.x86_64                   5.6.35-1.23.amzn1                    @amzn-updates
   php70.x86_64                            7.0.14-1.20.amzn1                    @amzn-updates
   php70-mysqlnd.x86_64                    7.0.14-1.20.amzn1                    @amzn-updates
   ```

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

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

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

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

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

**确保数据库服务器的安全**

1. 启动 MySQL 服务器。

   ```
   [ec2-user ~]$ sudo service mysqld start
   Initializing MySQL database:  
   ...
   
   PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
   ...
   
   Starting mysqld:                                           [  OK  ]
   ```

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/)。确保将此密码存储在安全位置。

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

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

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

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

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

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

   ```
   [ec2-user ~]$ sudo service mysqld stop
   Stopping mysqld:                                           [  OK  ]
   ```

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

   ```
   [ec2-user ~]$ sudo chkconfig mysqld on
   ```

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

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

**要安装 phpMyAdmin**

[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)。
**注意**  
Amazon Linux 软件包管理系统目前不支持 phpMyAdmin 在 PHP 7 环境中自动安装。本教程介绍如何 phpMyAdmin手动安装。

1. 使用 SSH 登录您的 EC2 实例。

1. 安装所需的依赖项。

   ```
   [ec2-user ~]$ sudo yum install php72-mbstring.x86_64 -y
   ```

1. 重启 Apache。

   ```
   [ec2-user ~]$ sudo service httpd restart
   Stopping httpd:                                            [  OK  ]
   Starting httpd:                                            [  OK  ]
   ```

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

   ```
   [ec2-user ~]$ cd /var/www/html
   [ec2-user 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 service mysqld start
   Starting mysqld:                                           [  OK  ]
   ```

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/al1/ug/images/phpmyadmin_login.png)

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

   您的安装仍需进行配置，然后才能投入使用。要进行配置 phpMyAdmin，您可以[手动创建配置文件](https://docs.phpmyadmin.net/en/latest/setup.html#manually-creating-the-file)，[使用安装控制台](https://docs.phpmyadmin.net/en/latest/setup.html#using-setup-script)或将两种方法结合使用。

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

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

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

### 我无法使用 Web 浏览器连接到我的服务器。
<a name="is-apache-on-alami"></a>

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

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

  ```
  [ec2-user ~]$ chkconfig --list httpd
  httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
  ```

  在这里，**httpd** 是处于运行级别 2、3、4 和 5 的 `on`（这是您希望看到的）。

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

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

### 我想在我的服务器上运行的应用程序软件与所安装的 PHP 版本或其他软件不兼容
<a name="software-versions-alami"></a>

本教程建议安装大多数 up-to-date版本的 Apache HTTP 服务器、PHP 和 MySQL。在安装其他 LAMP 应用程序之前，请检查其要求以确认它们与已安装的环境兼容。如果不支持最新版本的 PHP，则可以 (并且完全安全) 降级到较旧的受支持配置。您还可以并行安装 PHP 的多个版本，至少可以解决部分兼容性问题。有关如何从安装的多个版本 PHP 中选择其一配置为首选项的信息，请参阅 [Amazon Linux AMI 2016.09 发行说明。](https://aws.amazon.com/amazon-linux-ami/2016.09-release-notes/)

**如何降级**  
本教程的以前版本经过良好测试，需要以下核心 LAMP 程序包：
+ `httpd24`
+ `php56`
+ `mysql55-server`
+ `php56-mysqlnd`

如果您已按照本教程开头的建议安装了最新的软件包，您必须首先卸载如下这些软件包和其他依赖项：

```
[ec2-user ~]$ sudo yum remove -y httpd24 php72 mysql57-server php72-mysqlnd perl-DBD-MySQL57
```

其次，安装替代环境：

```
[ec2-user ~]$ sudo yum install -y  httpd24 php56 mysql55-server php56-mysqlnd
```

如果您以后决定升级到建议的环境，您必须先删除自定义软件包和依赖项：

```
[ec2-user ~]$ sudo yum remove -y  httpd24 php56 mysql55-server php56-mysqlnd perl-DBD-MySQL56
```

现在，您可以如前所述安装最新版的软件包。

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

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

有关本教程中使用的命令和软件的更多信息，请参阅以下网页：
+ Apache Web 服务器：[http://httpd.apache.org/](http://httpd.apache.org/)
+ MySQL 数据库服务器：[http://www.mysql.com/](http://www.mysql.com/)
+ PHP 编程语言：[http://php.net/](http://php.net/)
+ `chmod`命令：[https://en.wikipedia。 org/wiki/Chmod](https://en.wikipedia.org/wiki/Chmod)
+ `chown`命令：[https://en.wikipedia。 org/wiki/Chown](https://en.wikipedia.org/wiki/Chown)

有关为您的 Web 服务器注册域名或将现有域名转移到该主机的更多信息，请参阅 [Amazon Route 53 *开发者指南中的在不迁移父域的情况下使用 Amazon Route 53* 作为子域名的 DNS 服务](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/creating-migrating.html)。