首页 > 系统相关 >在 Amazon Linux 2023 上安装 LAMP

在 Amazon Linux 2023 上安装 LAMP

时间:2023-08-21 11:45:41浏览次数:38  
标签:Web phpMyAdmin sudo LAMP Amazon ec2 2023 服务器 user

通过以下步骤,您可以将带 PHP 和 MariaDB(一个由社区开发的 MySQL 分支)支持的 Apache Web 服务器(有时称为 LAMP Web 服务器或 LAMP 堆栈)安装到 Amazon Linux 2023 实例上。您可以使用此服务器来托管静态网站或部署能对数据库中的信息执行读写操作的动态 PHP 应用程序。

重要

这些过程适用于 Amazon Linux 2023。如果您尝试在其他发行版(例如 Ubuntu 或红帽企业 Linux)上设置 LAMP Web 服务器,则本教程不适合。对于 Amazon Linux 2,请参阅在 Amazon Linux 2 上安装 LAMP。对于 Amazon Linux AMI,请参阅 在 Amazon Linux 上安装 LAMP。对于 Ubuntu,请参阅以下 Ubuntu 社区文档:ApacheMySQLPHP。有关其他发布版本,请参阅特定于该版本的文档。

任务

步骤 1:准备 LAMP 服务器

先决条件
  • 本教程假定您已经使用 Amazon Linux 2023 启动具有可从 Internet 访问的公有 DNS 名称的新实例。有关更多信息,请参阅步骤 1:启动实例。您还必须配置安全组,以便允许 SSH (端口 22)、HTTP (端口 80) 和 HTTPS (端口 443) 连接。有关这些先决条件的更多信息,请参阅 为您的 Linux 实例授权入站流量

  • 以下过程将安装 Amazon Linux 2023 上可用的最新 PHP 版本(当前为 8.1)。如果您计划使用本教程中所述的 PHP 应用程序之外的 PHP 应用程序,则应检查其与 8.1 的兼容性。

准备 LAMP 服务器
  1. 连接到您的 实例

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

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

     
    [ec2-user ~]$ sudo dnf update -y
  3. 安装 Apache Web 服务器的最新版本,以及适用于 Amazon Linux 2023 的 PHP 程序包。

     
    [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) 连接。默认情况下,启动期间将为您的实例创建 launch-wizard-N 安全组。如果您没有添加其他安全组规则,此组仅包含允许 SSH 连接的一条规则。

    1. 通过以下网址打开 Amazon 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)连接的入站规则,则必须立即添加规则。选择安全组的链接。使用 向安全组添加规则 中的过程,添加具有以下值的新入站安全规则:

      • Type:HTTP

      • Protocol:TCP

      • Port Range:80

      • Source:Custom

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

    您可以使用 Amazon EC2 控制台获取实例的公有 DNS(选中 Public IPv4 DNS(公有 IPv4 DNS)列;如果此列处于隐藏状态,请选择首选项(齿轮状图标),并开启 Public 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 组的任何未来成员) 可以添加、删除和编辑 Apache 文档根目录中的文件,允许您添加内容,如静态网站或 PHP 应用程序。

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

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

有关在服务器上启用 HTTPS 的信息,请参阅 在 Amazon Linux 2 上配置 SSL/TLS

步骤 2:测试 LAMP 服务器

如果服务器已安装并运行,且文件权限设置正确,则 ec2-user 账户应该能够在 /var/www/html 目录 (可从 Internet 访问) 中创建 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 信息页面:

    如果您未看到此页面,请验证上一步中是否已正确创建 /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 实例上查看和编辑 MySQL 数据库。按照下述步骤操作,在您的 Amazon Linux 实例上安装和配置 phpMyAdmin

重要

除非您在 Apache 中启用了 SSL/TLS,否则我们不建议您使用 phpMyAdmin 访问 LAMP 服务器;如果您使用 phpMyAdmin,您的数据库管理员密码和其他数据将无法安全地通过 Internet 传输。有关开发人员提供的安全建议,请参阅保护 phpMyAdmin 安装。有关在 EC2 实例上保护 Web 服务器的一般信息,请参阅 在 Amazon Linux 2023 上配置 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. (可选) 如果 MySQL 服务器未运行,请立即启动它。

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

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

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

  10. 使用您先前创建的 root 用户名和 MySQL 根密码登录到 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 证书。有关信息,请参阅 在 Amazon Linux 2023 上配置 SSL/TLS

  • 防火墙是否配置正确?

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

相关主题

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

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

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

标签:Web,phpMyAdmin,sudo,LAMP,Amazon,ec2,2023,服务器,user
From: https://www.cnblogs.com/yoloooo/p/17645607.html

相关文章

  • 前端学习笔记202308学习笔记第七拾玖天-Map之2
    ......
  • YACS 2023年8月月赛 乙组 T3 香槟塔 题解
    题目链接乙组中比较好的一道思维题。首先考虑暴力,如果没满就倒满了就往下继续倒,直到倒完或溢出为止,但如果开始就全满然后每次都从最上面倒那么$O(n^2)$就超时了。我们希望找到一个数据结构(当然不是也行)能够快速得到从某个位置向下(包括当前位置)第一个没满的香槟塔,显然并查集。......
  • YACS 2023年8月月赛 乙组 T1 最长回文 题解
    题目链接小清新的区间DP题。看到数据范围以及回文一眼盯真得到是区间DP。设$f[i][j]$为区间$[i,j]$成为回文串最少要经过几次操作,转移一个个看。首先可以删掉第$j$个,$f[i][j]=\min(f[i][j],f[i][j-1]+1)$,同理也可以删掉第$i$个,$f[i][j]=\min(f[i][j],f[i+1][j]+1)$......
  • YACS 2023年6月月赛 乙组 T3 工作安排 题解
    这道题是乙组里比较新奇的一题,本来一眼看下来不会,后来蒙了个按照单位时间内收到罚款排序居然对了,十分意外。简单的证明一下:假设有两个工作,时间分别为$t_1$$f_1$$t_2$$f_2$,假设把第一个放在前面更优,前面的罚款不变。则有$t_1\timesf_1+(t_1+t_2)\timesf_2<t_2\timesf_2+(......
  • 2023.8.20 _码客行_编程公益课 在线评估
    2023.8.20_码客行_编程公益课在线评估师大附小六年级学生有\(400\)名学生参加期末测试,平均\(92\)分,其中男生的平均分为\(96\)分,女生的平均分为\(80\)分,参加竞赛的男生比女生多多少人?#include<iostream>usingnamespacestd;intmain(){cout<<"男生比女生多"<<200<<"......
  • The 2023 ICPC China Shaanxi Provincial Programming Contest
    链接:https://qoj.ac/contest/1290A表达式板子。\(O(|s|)\)。#include"bits/stdc++.h"usingnamespacestd;usingi64=longlong;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);strings;cin>>s;intn=s......
  • 2023.8.20 - nginx子域名简单判断案例
    server{listen80;server_namelvyehao.com;indexindex.htmlindex.htmindex.php;#设置子域名目录set$doc"lvyehao.com";if($host~^(\w+)\.lvyehao\.com){set$doc$1;}......
  • 2023/8/20读书笔记
    QT事件机制qt的事件机制是非常重要的,下面来慢慢解析。C++程序还记得第一个程序helloworld吗?如下#include<iostream>intmain(){ std::cout<<"helloworld"<<std::endl; return0;}当执行时代码从上到下执行。然后程序就执行完毕了。QT窗口程序#include"widg......
  • [2023 上半年] [软件设计师] [下午题] 题解报告
    2023年下午题整体难度有所上升,取消了简单和困难难度,全部设置为中等难度。第一题数据流图随着农业领域科学种植的发展,需要对农业基地及农事进行信息化管理,为租户和农户等人员提供种植相关服务。现欲开发农事管理服务平台,其主要功能是:(1)人员管理。平台管理员管理租户;租户管理农户并......
  • day01-运维介绍与虚拟机安装-20230820
     1.解释我们正在使用哪些互联网行业的软件,移动端?PC端? (1)平台不一样视觉范围更广,可设计的地方更多,设计性更强,相对来说容错度更高一些。操作局限性大,在设计上可用空间显得尤为珍贵,避免原件过小过近。(2)操作系统不一样对于会员系统、视频和音乐、购物支付等功能都进行了精简,使......