在 Amazon Lightsail 上部署容器 LAMP Web 应用程序

入门指南

模块 1:准备容器

在此模块中,您将使用 AWS CLI 配置 LAMP 堆栈

简介

在此模块中,您将使用 AWS CLI 从预配置了 LAMP 组件的蓝图中创建 Lightsail 实例。您将在实例创建期间从 GitHub 存储库中安装 PHP 应用程序。

您将学到的内容

  • 如何使用 AWS CLI 创建 Lightsail 实例
  • 使用实例的用户数据部署您的 PHP 应用程序

 完成时间

10 分钟

 模块先决条件

  • 具有管理员级访问权限的 AWS 账户**
  • 推荐的浏览器:最新版 Chrome 或 Firefox

[**] 过去 24 小时内创建的账户可能尚不具有访问此教程所需服务的权限。

实施

创建 Lightsail 实例

当您创建 Lightsail 实例时,您可以选择将用户数据传递给实例,该实例可以用于执行常见的自动化配置任务,甚至在实例启动后运行脚本。在本指南的后面,您将使用 AWS CLI 创建 Lightsail 实例。将以下脚本复制到命令的 --user-data 部分:

# remove default website
#-----------------------
cd /opt/bitnami/apache2/htdocs 
rm -rf *

# clone github repo
#------------------
/opt/bitnami/git/bin/git clone -b loft https://github.com/aws-developer-center/todo-php .

# set write permissons on the settings file
#-----------------------------------
chown bitnami:daemon ./*
chmod 666 connectvalues.php

# inject database password into configuration file
#-------------------------------------------------
sed -i.bak "s/<password>/$(cat /home/bitnami/bitnami_application_password)/;" /opt/bitnami/apache2/htdocs/connectvalues.php

# create database
#----------------
cat /home/bitnami/htdocs/data/init.sql | /opt/bitnami/mariadb/bin/mysql -u root -p$(cat /home/bitnami/bitnami_application_password)

此脚本将删除蓝图的默认网站、克隆示例应用程序以替换它、设置适当的文件权限、在示例应用程序的配置文件中配置自动生成的数据库密码,并执行 init.sql 脚本以创建数据库并用初始值填充数据库。

要在实例运行后立即访问实例,您需要一个 SSH 密钥。要生成一个密钥,请运行以下命令:

aws lightsail create-key-pair \
    --key-pair-name LightsailGuide > ssh_key_response.json

cat ssh_key_response.json | jq -r '.publicKeyBase64' > lightsailguide.pub
cat ssh_key_response.json | jq -r '.privateKeyBase64' > lightsailguide
chmod 400 lightsailguide.pub lightsailguide

现在,您已准备好使用 AWS CLI 创建实例。在此指南中,我们将使用爱尔兰 (eu-west-1) 区域和 blueprintId 为 lamp_7 的 LAMP 蓝图。如果您想要查看可用蓝图的完整列表,您可以运行以下命令:

aws lightsail get-blueprints

您必须在创建 Lightsail 实例时指定实例捆绑包。在此指南中,我们将使用 micro_2_0 捆绑包。您可以使用以下命令查看可用捆绑包列表:

aws lightsail get-bundles

要使用用户数据脚本和您创建的 SSH 密钥创建 Lightsail 实例,请运行以下命令:

# Create the Lightsail instance:
aws lightsail create-instances \
    --instance-names "LightsailLampExample" \
    --availability-zone eu-west-1a \
    --blueprint-id lamp_7 \
    --bundle-id micro_2_0 \
    --key-pair-name LightsailGuide \
    --user-data '# remove default website
#-----------------------
cd /opt/bitnami/apache2/htdocs 
rm -rf *

# clone github repo
#------------------
/opt/bitnami/git/bin/git clone -b loft https://github.com/aws-developer-center/todo-php .

# set write permissons on the settings file
#-----------------------------------
chown bitnami:daemon ./*
chmod 666 connectvalues.php

# inject database password into configuration file
#-------------------------------------------------
sed -i.bak "s/<password>/$(cat /home/bitnami/bitnami_application_password)/;" /opt/bitnami/apache2/htdocs/connectvalues.php

# create database
#----------------
cat /home/bitnami/htdocs/data/init.sql | /opt/bitnami/mariadb/bin/mysql -u root -p$(cat /home/bitnami/bitnami_application_password)' 

命令将输出您创建的实例的详细信息:

{
    "operations": [
        {
            "id": "a49e1398-fb81-455a-8a50-3159c9bd9966",
            "resourceName": "LightsailLampExample",
            "resourceType": "Instance",
            "createdAt": "2021-09-21T16:38:40.566000+02:00",
            "location": {
                "availabilityZone": "eu-west-1a",
                "regionName": "eu-west-1"
            },
            "isTerminal": false,
            "operationType": "CreateInstance",
            "status": "Started",
            "statusChangedAt": "2021-09-21T16:38:40.566000+02:00"
        }
    ]
}

您的实例需要几分钟才能可用,您可以使用以下命令来检查进度:

aws lightsail get-instance-state --instance-name LightsailLampExample

当您查看以下输出时,实例在运行,但它可能仍在通过用户数据脚本工作:

{
    "state": {
        "code": 16,
        "name": "running"
    }
}

要测试应用程序,您需要实例的公有 IP 地址。运行以下命令以检索您的实例公有 IP 地址。

aws lightsail get-instance --instance-name LightsailLampExample | jq -r .instance.publicIpAddress

复制 IP 地址并将其粘贴到您的浏览器中,您应看到应用程序在运行:

结论

在第一个模块中,我们学习了如何使用 AWS CLI 创建基础设施以及部署示例应用程序。在下一个模块中,我们将学习如何清理本指南中使用的资源。

下一模块:清理资源

请就我们的表现提供反馈。