教程:在 AL2 0 LAMP 23 上安装服务器 - Amazon Linux 2023

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

教程:在 AL2 0 LAMP 23 上安装服务器

以下过程可帮助你在 023 实例(有时称为 LAMP Web 服务器或堆栈)上AL2安装支持 M ar iaDB(SQL我的社区开发的分支)的 Apache Web 服务器。PHP LAMP您可以使用此服务器托管静态网站或部署用于读取和写入数据库信息的动态PHP应用程序。

重要

这些程序旨在与 AL2 023 一起使用。如果您尝试在其他发行版(例如 Ubuntu 或红帽企业 Linux)上设置 LAMP Web 服务器,则本教程将无法运行。对于 Ubuntu,请参阅以下 Ubuntu 社区文档:。ApacheMySQLPHP有关其他发布版本,请参阅特定于该版本的文档。

步骤 1:准备LAMP服务器

先决条件
  • 本教程假设您已经使用 AL2 023 启动了一个新实例,该实例的公共DNS名称可以从互联网上访问。有关更多信息,请参阅 AL2亚马逊上的 023 EC2。您还必须将安全组配置为允许SSH(端口 22)、HTTP(端口 80)和HTTPS(端口 443)连接。有关这些先决条件的更多信息,请参阅 Amazon EC2 用户指南中的授权 Linux 实例的入站流量

  • 以下步骤安装 AL2 023 上可用的最新PHP版本,当前为 8.1。如果您计划使用本教程中描述的PHP应用程序以外的应用程序,则应检查它们与 8.1 的兼容性。

准备LAMP服务器
  1. 连接到您的实例。有关更多信息,请参阅 正在连接到 AL2 023 个实例

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

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

    [ec2-user ~]$ sudo dnf upgrade -y
  3. 安装最新版本的 Apache Web 服务器和适用于 AL2 0 PHP 23 的软件包。

    [ec2-user ~]$ sudo dnf install -y httpd wget php-fpm php-mysqli php-json php php-devel
  4. 安装 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.
  5. 启动 Apache Web 服务器。

    [ec2-user ~]$ sudo systemctl start httpd
  6. 使用 systemctl 命令配置 Apache Web 服务器,使其在每次系统启动时启动。

    [ec2-user ~]$ sudo systemctl enable httpd

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

    [ec2-user ~]$ sudo systemctl is-enabled httpd
  7. 如果您尚未添加安全规则,允许您的实例的入站HTTP(端口 80)连接。默认情况下,启动向导-N安全组是在启动期间为您的实例创建的。如果您未添加其他安全组规则,则该组仅包含一条允许SSH连接的规则。

    1. 打开亚马逊EC2控制台,网址为https://console.aws.amazon.com/ec2/

    2. 在左侧的导航中,选择 Instances(实例),然后选择您的实例。

    3. 安全选项卡上,查看入站规则。您应看到以下规则:

      Port range Protocol Source 22 tcp 0.0.0.0/0
      警告

      使用0.0.0.0/0允许所有IPv4地址使用访问您的实例SSH。这在测试环境中可以接受一小段时间,但是在生产环境中并不安全。在生产环境中,您仅授权特定 IP 地址或地址范围访问您的实例。

    4. 如果没有允许HTTP(端口 80)连接的入站规则,则必须立即添加规则。选择安全组的链接。使用授权您的 Linux 实例的入站流量中的步骤,添加具有以下值的新入站安全规则:

      • 类型:HTTP

      • 协议:TCP

      • Port Range:80

      • Source:Custom

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

    您可以使用 Amazon EC2 控制台公开DNS您的实例(选中 “公开 IPv4 DNS” 列;如果此列处于隐藏状态,请选择 “首选项”(齿轮形图标)并切换为 “公开 IPv4 DNS”)。

    验证实例的安全组是否包含允许端口 80 上HTTP流量的规则。有关更多信息,请参阅向安全组添加规则

    重要

    如果您使用的不是 Amazon Linux,则还可能需要在实例上配置防火墙才能允许这些连接。有关如何配置防火墙的更多信息,请参阅适用于特定分配的文档。

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

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

设置文件权限
  1. 将您的用户 (这里指 ec2-user) 添加到 apache

    [ec2-user ~]$ sudo usermod -a -G apache ec2-user
  2. 先退出再重新登录以选取新组,然后验证您的成员资格。

    1. 退出(使用 exit 命令或关闭终端窗口):

      [ec2-user ~]$ exit
    2. 要验证您是否为 apache 组的成员,请重新连接到实例,然后运行以下命令:

      [ec2-user ~]$ groups ec2-user adm wheel apache systemd-journal
  3. /var/www 及其内容的组所有权更改到 apache 组。

    [ec2-user ~]$ sudo chown -R ec2-user:apache /var/www
  4. 要添加组写入权限以及设置未来子目录上的组 ID,请更改 /var/www 及其子目录的目录权限。

    [ec2-user ~]$ sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
  5. 要添加组写入权限,请递归地更改 /var/www 及其子目录的文件权限:

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

现在,ec2-user(以及该apache群组中的任何 future 成员)都可以在Apache文档根目录中添加、删除和编辑文件,从而使您能够添加内容,例如静态网站或PHP应用程序。

保护您的 Web 服务器 (可选)

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

有关在服务器HTTPS上启用的信息,请参阅教程:在 AL2023 上配置 SSL/TLS

第 2 步:测试您的LAMP服务器

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

测试您的LAMP服务器
  1. 在 Apache 文档根目录中创建一个文件。PHP

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

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

  2. 在 Web 浏览器中URL,键入您刚刚创建的文件。URL这是您的实例的公共DNS地址,后面是正斜杠和文件名。例如:

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

    您应该会看到PHP信息页面:

    LAMP服务器测试显示PHP信息页面。

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

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

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

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

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

现在,您应该拥有一台功能齐全LAMP的 Web 服务器。如果您在 Apache 文档根目录中添加内容/var/www/html,则应该能够在您的实例的公共DNS地址上查看该内容。

步骤 3:确保数据库服务器的安全

MariaDB 服务器的默认安装提供有多种功能,这些功能对于测试和开发都很有帮助,但对于产品服务器,应禁用或删除这些功能。mysql_secure_installation 命令可引导您设置根密码并删除安装中的不安全功能。即使您不打算使用 MariaDB 服务器,我们也建议执行此步骤。

保护 MariaDB 服务器
  1. 启动 MariaDB 服务器。

    [ec2-user ~]$ sudo systemctl start mariadb
  2. 运行 mysql_secure_installation

    [ec2-user ~]$ sudo mysql_secure_installation
    1. 在提示时,键入根账户的密码。

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

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

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

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

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

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

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

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

    [ec2-user ~]$ sudo systemctl stop mariadb
  4. (可选) 如果您希望每次启动时 MariaDB 服务器都启动,请键入以下命令。

    [ec2-user ~]$ sudo systemctl enable mariadb

步骤 4:(可选)安装 phpMyAdmin

phpMyAdmin是一款基于 Web 的数据库管理工具,可用于查看和编辑EC2实例上的 “我的SQL数据库”。按照下述步骤操作,在您的 Amazon Linux 实例上安装和配置 phpMyAdmin

重要

除非您已在 Apache TLS 中启用SSL/,否则我们不建议使用phpMyAdmin访问LAMP服务器;否则,您的数据库管理员密码和其他数据将不安全地通过 Internet 传输。有关开发人员提出的安全建议,请参阅保护您的 phpMyAdmin 安装。有关保护EC2实例上的 Web 服务器的一般信息,请参阅教程:在 AL2023 上配置 SSL/TLS

要安装 phpMyAdmin
  1. 安装所需的依赖项。

    [ec2-user ~]$ sudo dnf install php-mbstring php-xml -y
  2. 重启 Apache。

    [ec2-user ~]$ sudo systemctl restart httpd
  3. 重启 php-fpm

    [ec2-user ~]$ sudo systemctl restart php-fpm
  4. 导航到位于 /var/www/html 的 Apache 文档根。

    [ec2-user ~]$ cd /var/www/html
  5. https://www.phpmyadmin.net/downloads 选择最新 phpMyAdmin 版本的源包。要将文件直接下载到您的实例,请复制链接并将其粘贴到 wget 命令,如本示例中所述:

    [ec2-user html]$ wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
  6. 使用以下命令创建 phpMyAdmin 文件夹并将程序包提取到其中。

    [ec2-user html]$ mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1
  7. 删除存储在设备上的 phpMyAdmin-latest-all-languages.tar.gz tarball。

    [ec2-user html]$ rm phpMyAdmin-latest-all-languages.tar.gz
  8. (可选)如果 “我的SQL服务器” 未运行,请立即启动它。

    [ec2-user ~]$ sudo systemctl start mariadb
  9. 在 Web 浏览器中,键入URL您的 phpMyAdmin 安装内容。URL这是您的实例的公有DNS地址(或公有 IP 地址),后跟正斜杠和安装目录的名称。例如:

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

    你应该会看到 phpMyAdmin 登录页面:

    键入 phpMyAdmin 安装URL的结果是 phpMyAdmin 登录屏幕。
  10. 使用您之前创建的root用户名和 My SQL root 密码登录您的 phpMyAdmin 安装。

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

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

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

    3. 有关任何其他设置,请参阅安装说明的 “使用 phpMyAdmin 安装脚本” 部分中的文件创建后说明。

    有关使用的信息 phpMyAdmin,请参阅《phpMyAdmin 用户指南》

故障排除

本节提供有关解决您在设置新LAMP服务器时可能遇到的常见问题的建议。

我无法使用 Web 浏览器连接到我的服务器

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

  • Web 服务器正在运行吗?

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

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

    如果 httpd 进程未运行,请重复准备LAMP服务器中描述的步骤。

  • 防火墙是否配置正确?

    验证实例的安全组是否包含允许端口 80 上HTTP流量的规则。有关更多信息,请参阅向安全组添加规则

我无法使用连接到我的服务器 HTTPS

执行以下检查以查看您的 Apache Web 服务器是否配置为支持HTTPS。

  • Web 服务器配置是否正确?

    安装 Apache 后,服务器就配置好了HTTP流量。要支持HTTPS,请在服务器TLS上启用并安装SSL证书。有关信息,请参阅教程:在 AL2023 上配置 SSL/TLS

  • 防火墙是否配置正确?

    验证实例的安全组是否包含允许端口 443 上HTTPS流量的规则。有关更多信息,请参阅授权 Linux 实例的入站流量

相关 主题

有关将文件传输到您的实例或在 Web 服务器上安装 WordPress 博客的更多信息,请参阅以下文档:

有关本教程中使用的命令和软件的更多信息,请参阅以下网页:

有关注册 Web 服务器域名或将现有域名转移到此主机的更多信息,请参阅 Amazon Route 53 开发人员指南中的创建域和子域并将其迁移到 Amazon Route 53