第 2 步:将源内容配置为部署到 Amazon Linux 或红帽企业 Linux Amazon EC2 实例 - Amazon CodeDeploy
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

第 2 步:将源内容配置为部署到 Amazon Linux 或红帽企业 Linux Amazon EC2 实例

现在是时候配置应用程序的源内容以拥有可部署到实例的内容了。

获取源代码

在此教程中,您将 WordPress 内容发布平台从开发计算机部署到目标 Amazon EC2 实例。要获取 WordPress 源代码,可使用内置命令行调用。或者,如果您的开发计算机上已安装 Git,可改用 Git。

对于这些步骤,我们假定您将 WordPress 源代码的副本下载到开发计算机上的 /tmp 目录。(您可以选择所需的任何目录,但请记住,将这些步骤中指定的任何 /tmp 替换为您的位置。)

选择以下两个选项之一,将 WordPress 源文件复制到您的部署计算机上。第一个选项使用内置命令行调用。第二个选项使用 Git。

获取 WordPress 源代码的副本(内置命令行调用)

  1. 调用 wget 命令可将 WordPress 源代码的副本以 .zip 文件的形式下载到当前目录:

    wget https://github.com/WordPress/WordPress/archive/master.zip
  2. 调用 unzipmkdircprm 命令可执行以下任务:

    • master .zip 文件解压缩到 /tmp/WordPress_Temp 目录 (文件夹)。

    • 将其解压缩的内容复制到 /tmp/WordPress 目标文件夹中。

    • 删除临时 /tmp/WordPress_Temp 文件夹和 master 文件。

    运行这些命令(一次运行一条命令):

    unzip master -d /tmp/WordPress_Temp
    mkdir -p /tmp/WordPress
    cp -paf /tmp/WordPress_Temp/WordPress-master/* /tmp/WordPress
    rm -rf /tmp/WordPress_Temp
    rm -f master

    这将在 /tmp/WordPress 文件夹中保留一组干净的 WordPress 源代码文件。

获取 WordPress 源代码的副本 (Git)

  1. 在您的开发计算机上下载并安装 Git

  2. /tmp/WordPress 文件夹中,调用 git init 命令。

  3. 调用 git clone 命令可克隆公有 WordPress 存储库,并在 /tmp/WordPress 目标文件夹中创建此存储库的副本:

    git clone https://github.com/WordPress/WordPress.git /tmp/WordPress

    这将在 /tmp/WordPress 文件夹中保留一组干净的 WordPress 源代码文件。

创建脚本来运行应用程序

接下来,在目录中创建一个文件夹和一些脚本。CodeDeploy 使用这些脚本在目标 Amazon EC2 实例上设置和部署应用程序修订。您可使用任何文本编辑器来创建脚本。

  1. 在 WordPress 源代码的副本中创建脚本目录:

    mkdir -p /tmp/WordPress/scripts
  2. install_dependencies.sh 中创建一个 /tmp/WordPress/scripts 文件。将以下行添加到该文件中。此 install_dependencies.sh 脚本安装 Apache、MySQL 和 PHP。还会将 MySQL 支持添加到 PHP 中。

    #!/bin/bash sudo amazon-linux-extras install php7.4 sudo yum install -y httpd mariadb-server php
  3. start_server.sh 中创建一个 /tmp/WordPress/scripts 文件。将以下行添加到该文件中。此 start_server.sh 脚本启动 Apache 和 MySQL。

    #!/bin/bash systemctl start mariadb.service systemctl start httpd.service systemctl start php-fpm.service
  4. stop_server.sh 中创建一个 /tmp/WordPress/scripts 文件。将以下行添加到该文件中。此 stop_server.sh 脚本停止 Apache 和 MySQL。

    #!/bin/bash isExistApp=pgrep httpd if [[ -n $isExistApp ]]; then systemctl stop httpd.service fi isExistApp=pgrep mysqld if [[ -n $isExistApp ]]; then systemctl stop mariadb.service fi isExistApp=pgrep php-fpm if [[ -n $isExistApp ]]; then systemctl stop php-fpm.service fi
  5. create_test_db.sh 中创建一个 /tmp/WordPress/scripts 文件。将以下行添加到该文件中。此 create_test_db.sh 脚本使用 MySQL 创建 test 数据库以供 WordPress 使用。

    #!/bin/bash mysql -uroot <<CREATE_TEST_DB CREATE DATABASE IF NOT EXISTS test; CREATE_TEST_DB
  6. 最后,在 /tmp/WordPress/scripts 中创建 change_permissions.sh 脚本。这将用于更改 Apache 中的文件夹权限。

    重要

    此脚本更新 /tmp/WordPress 文件夹上的权限,以便所有人可以写入其中。这是必需的,以便 WordPress 可在第 5 步:更新和重新部署您的 WordPress 应用程序期间写入其数据库。设置 WordPress 应用程序之后,运行以下命令,将权限更新为更安全的设置:

    chmod -R 755 /var/www/html/WordPress
    #!/bin/bash chmod -R 777 /var/www/html/WordPress
  7. 为所有脚本提供可执行文件权限。在命令行上,键入:

    chmod +x /tmp/WordPress/scripts/*

添加应用程序规范文件

接下来,添加应用程序规范文件(AppSpec 文件),YAML-格式化的文件由 CodeDeploy 使用该文件

  • 将应用程序修订中的源文件映射到其在目标 Amazon EC2 实例上的目的地。

  • 为部署的文件指定自定义权限。

  • 指定部署期间要在目标 Amazon EC2 实例上运行的脚本。

AppSpec 文件必须命名为appspec.yml. 它必须放置在应用程序源代码的根目录中。在本教程中,根目录为 /tmp/WordPress

使用文本编辑器创建一个名为 appspec.yml 的文件。将以下行添加到该文件中:

version: 0.0 os: linux files: - source: / destination: /var/www/html/WordPress hooks: BeforeInstall: - location: scripts/install_dependencies.sh timeout: 300 runas: root AfterInstall: - location: scripts/change_permissions.sh timeout: 300 runas: root ApplicationStart: - location: scripts/start_server.sh - location: scripts/create_test_db.sh timeout: 300 runas: root ApplicationStop: - location: scripts/stop_server.sh timeout: 300 runas: root

CodeDeploy 使用此 AppSpec 文件复制/tmp/WordPress开发计算机上的文件夹到/var/www/html/WordPress在目标 Amazon EC2 实例上的文件夹。在部署期间,CodeDeploy 将指定的脚本运行为root中的/var/www/html/WordPress/scripts在部署生命周期内的指定事件中,位于目标 Amazon EC2 实例上的文件夹,如BeforeInstallAfterInstall. 如果这些脚本中的任意脚本的运行时间超过 300 秒 (5 分钟),CodeDeploy 会停止部署并将部署标记为失败。

有关这些设置的更多信息,请参阅 CodeDeploy AppSpec 文件参考

重要

此文件中各项之间的空格的位置和数量很重要。如果间距不正确,CodeDeploy 会引发可能难以调试的错误。有关更多信息,请参阅AppSpec 文件间距