

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

# 教程：使用 CodeDeploy （Windows 服务器、Ubuntu 服务器或红帽企业 Linux）将应用程序部署到本地实例
<a name="tutorials-on-premises-instance"></a>

本教程 CodeDeploy 通过指导您将示例应用程序修订部署到运行 Windows Server、Ubuntu 服务器或红帽企业 Linux (RHEL) 的单个本地实例（即不是 Amazon EC2 实例的物理设备），帮助您积累经验。有关本地实例及其使用方式的信息 CodeDeploy，请参阅[使用本地实例 CodeDeploy](instances-on-premises.md)。

不是您要找的内容？
+ 要练习部署到运行 Amazon Linux 或 RHEL 的 Amazon EC2 实例，请参阅[教程：部署 WordPress 到亚马逊 EC2 实例（亚马逊 Linux 或红帽企业 Linux 和 Linux、macOS 或 Unix）](tutorials-wordpress.md)。
+ 要练习部署到运行 Windows Server 的 Amazon EC2 实例，请参阅[教程：使用 CodeDeploy 部署“Hello, World\$1” 带有 CodeDeploy （Windows 服务器）的应用程序](tutorials-windows.md)。

**Topics**
+ [先决条件](tutorials-on-premises-instance-prerequisites.md)
+ [步骤 1：配置本地实例](tutorials-on-premises-instance-1-configure-instance.md)
+ [步骤 2：创建示例应用程序修订](tutorials-on-premises-instance-2-create-sample-revision.md)
+ [步骤 3：打包您的应用程序修订并将其上传到 Amazon S3](tutorials-on-premises-instance-3-bundle-sample-revision.md)
+ [步骤 4：部署应用程序修订](tutorials-on-premises-instance-4-deploy-sample-revision.md)
+ [步骤 5：验证您的部署](tutorials-on-premises-instance-5-verify-deployment.md)
+ [步骤 6：清理资源](tutorials-on-premises-instance-6-clean-up-resources.md)

# 先决条件
<a name="tutorials-on-premises-instance-prerequisites"></a>

在开始本教程之前，必须完成中的先决条件[入门 CodeDeploy](getting-started-codedeploy.md)，包括配置用户、安装或升级以及创建服务角色。 AWS CLI您无需按照先决条件中的所述创建 IAM 实例配置文件。本地实例不使用 IAM 实例配置文件。

您将配置作为本地实例的物理设备必须运行[CodeDeploy 代理支持的操作系统](codedeploy-agent.md#codedeploy-agent-supported-operating-systems) 中列出的操作系统之一。

# 步骤 1：配置本地实例
<a name="tutorials-on-premises-instance-1-configure-instance"></a>

您必须先配置本地实例，然后才能在其中进行部署。按照[使用本地实例 CodeDeploy](instances-on-premises.md)中的说明操作，然后返回此页。

## 安装代 CodeDeploy 理
<a name="tutorials-on-premises-instance-1-configure-instance-agent"></a>

配置本地实例后，按照[安装 CodeDeploy 代理](https://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent-operations-install.html)中针对本地实例的步骤进行操作，然后返回此页面。

# 步骤 2：创建示例应用程序修订
<a name="tutorials-on-premises-instance-2-create-sample-revision"></a>

在这一步中，您将创建要部署到本地实例的示例应用程序修订。

由于很难了解您的本地实例上已经安装了哪些软件和功能 - 或者您的组织策略允许安装哪些软件和功能 - 因此，我们在此处提供的示例应用程序修订仅使用批处理脚本（对于 Windows Server）或 shell 脚本（对于 Ubuntu Server 和 RHEL），将文本文件写入您本地实例上的某个位置。为多个 CodeDeploy 部署生命周期事件（包括 In **stall**、**AfterInstall**ApplicationStart****、和）中的每个事件写入一个文件**ValidateService**。在**BeforeInstall**部署生命周期事件期间，将运行一个脚本来删除此示例的先前部署期间写入的旧文件，并在您的本地实例上创建一个写入新文件的位置。

**注意**  
如果出现以下任何情况，此示例应用程序修订可能无法部署：  
在本地实例上启动 CodeDeploy 代理的用户没有执行脚本的权限。
用户无权在脚本中列出的位置创建或删除文件夹。
用户无权在脚本中列出的位置创建文本文件。

**注意**  
如果您配置了 Windows Server 实例并希望部署其他示例，则可能需要使用[教程：使用 CodeDeploy 部署“Hello, World\$1” 带有 CodeDeploy （Windows 服务器）的应用程序](tutorials-windows.md)教程的[步骤 2：将您的源内容配置为部署到 Windows Server Amazon EC2 实例](tutorials-windows-configure-content.md)中的示例。  
如果您配置了 RHEL 实例并希望部署其他示例，则可能需要使用[教程：部署 WordPress 到亚马逊 EC2 实例（亚马逊 Linux 或红帽企业 Linux 和 Linux、macOS 或 Unix）](tutorials-wordpress.md)教程的[步骤 2：将源内容配置为部署到 Amazon Linux 或 Red Hat Enterprise Linux Amazon EC2 实例](tutorials-wordpress-configure-content.md)中的示例。  
目前，Ubuntu Server 没有替代示例。

1. 在您的开发计算机上，创建名为 `CodeDeployDemo-OnPrem` 的子目录（子文件夹）来存储示例应用程序修订的文件，然后切换到该子文件夹。在此示例中，我们假定您将使用 `c:\temp` 文件夹作为 Windows Server 的根文件夹，或者使用 `/tmp` 文件夹作为 Ubuntu Server 和 RHEL 的根文件夹。如果您使用其他文件夹，请务必在整个教程中使用该文件夹取代我们提供的文件夹：

   对于 Windows：

   ```
   mkdir c:\temp\CodeDeployDemo-OnPrem
   cd c:\temp\CodeDeployDemo-OnPrem
   ```

   对于 Linux、macOS 或 Unix：

   ```
   mkdir /tmp/CodeDeployDemo-OnPrem
   cd /tmp/CodeDeployDemo-OnPrem
   ```

1. 在 `CodeDeployDemo-OnPrem` 子文件夹的根中，使用文本编辑器创建两个分别名为 `appspec.yml` 和 `install.txt` 的文件：

   对于 Windows Server 为 `appspec.yml`：

   ```
   version: 0.0
   os: windows
   files:
     - source: .\install.txt
       destination: c:\temp\CodeDeployExample
   hooks:
     BeforeInstall:
       - location: .\scripts\before-install.bat
         timeout: 900
     AfterInstall:
       - location: .\scripts\after-install.bat     
         timeout: 900
     ApplicationStart:
       - location: .\scripts\application-start.bat  
         timeout: 900
     ValidateService:
       - location: .\scripts\validate-service.bat    
         timeout: 900
   ```

   对于 Ubuntu Server 和 RHEL 为 `appspec.yml`：

   ```
   version: 0.0
   os: linux
   files:
     - source: ./install.txt
       destination: /tmp/CodeDeployExample
   hooks:
     BeforeInstall:
       - location: ./scripts/before-install.sh
         timeout: 900
     AfterInstall:
       - location: ./scripts/after-install.sh
         timeout: 900
     ApplicationStart:
       - location: ./scripts/application-start.sh
         timeout: 900
     ValidateService:
       - location: ./scripts/validate-service.sh
         timeout: 900
   ```

   有关 AppSpec 文件的更多信息，请参阅[将应用程序规范文件添加到修订版中 CodeDeploy](application-revisions-appspec-file.md)和[CodeDeploy AppSpec 文件引用](reference-appspec-file.md)。

   `install.txt`:

   ```
   The Install deployment lifecycle event successfully completed.
   ```

1. 在 `CodeDeployDemo-OnPrem` 子文件夹的根下，创建 `scripts` 子文件夹，然后切换到该子文件夹：

   对于 Windows：

   ```
   mkdir c:\temp\CodeDeployDemo-OnPrem\scripts
   cd c:\temp\CodeDeployDemo-OnPrem\scripts
   ```

   对于 Linux、macOS 或 Unix：

   ```
   mkdir -p /tmp/CodeDeployDemo-OnPrem/scripts
   cd /tmp/CodeDeployDemo-OnPrem/scripts
   ```

1. 在 `scripts` 子文件夹的根中，使用文本编辑器创建 4 个文件（对于 Windows Server，它们分别名为 `before-install.bat`、`after-install.bat`、`application-start.bat` 和 `validate-service.bat`；对于 Ubuntu Server 和 RHEL，它们分别名为 `before-install.sh`、`after-install.sh`、`application-start.sh` 和 `validate-service.sh`）：

   对于 Windows Server：

   `before-install.bat`:

   ```
   set FOLDER=%HOMEDRIVE%\temp\CodeDeployExample
   
   if exist %FOLDER% (
     rd /s /q "%FOLDER%"
   )
   
   mkdir %FOLDER%
   ```

   `after-install.bat`:

   ```
   cd %HOMEDRIVE%\temp\CodeDeployExample
   
   echo The AfterInstall deployment lifecycle event successfully completed. > after-install.txt
   ```

   `application-start.bat`:

   ```
   cd %HOMEDRIVE%\temp\CodeDeployExample
   
   echo The ApplicationStart deployment lifecycle event successfully completed. > application-start.txt
   ```

   `validate-service.bat`:

   ```
   cd %HOMEDRIVE%\temp\CodeDeployExample
   
   echo The ValidateService deployment lifecycle event successfully completed. > validate-service.txt
   ```

   对于 Ubuntu Server 和 RHEL：

   `before-install.sh`:

   ```
   #!/bin/bash
   export FOLDER=/tmp/CodeDeployExample
   
   if [ -d $FOLDER ]
   then
    rm -rf $FOLDER
   fi
   
   mkdir -p $FOLDER
   ```

   `after-install.sh`:

   ```
   #!/bin/bash
   cd /tmp/CodeDeployExample
   
   echo "The AfterInstall deployment lifecycle event successfully completed." > after-install.txt
   ```

   `application-start.sh`:

   ```
   #!/bin/bash
   cd /tmp/CodeDeployExample
   
   echo "The ApplicationStart deployment lifecycle event successfully completed." > application-start.txt
   ```

   `validate-service.sh`:

   ```
   #!/bin/bash
   cd /tmp/CodeDeployExample
   
   echo "The ValidateService deployment lifecycle event successfully completed." > validate-service.txt
   
   unset FOLDER
   ```

1. 仅对于 Ubuntu Server 和 RHEL，确保四个 shell 脚本都具有执行权限：

   ```
   chmod +x ./scripts/*
   ```

# 步骤 3：打包您的应用程序修订并将其上传到 Amazon S3
<a name="tutorials-on-premises-instance-3-bundle-sample-revision"></a>

在部署应用程序修订之前，您需要打包文件，然后将文件包上传到 Amazon S3 存储桶。按照[使用创建应用程序 CodeDeploy](applications-create.md)和[将修订推送 CodeDeploy 到 Amazon S3（仅限 EC2/本地部署）](application-revisions-push.md)中的说明操作。（虽然您可以为应用程序和部署组提供任意名称，不过我们建议您使用 `CodeDeploy-OnPrem-App` 作为应用程序名称，并使用 `CodeDeploy-OnPrem-DG` 作为部署组名称。） 在您完成这些指示的操作之后，返回本页。

**注意**  
或者，您可以将文件包上传到 GitHub 存储库并从那里进行部署。有关更多信息，请参阅 [CodeDeploy 与集成 GitHub](integrations-partners-github.md)。

# 步骤 4：部署应用程序修订
<a name="tutorials-on-premises-instance-4-deploy-sample-revision"></a>

在您将应用程序修订上传到 Amazon S3 存储桶之后，尝试将其部署到本地实例。按照[使用创建部署 CodeDeploy](deployments-create.md)中的说明操作，然后返回此页。

# 步骤 5：验证您的部署
<a name="tutorials-on-premises-instance-5-verify-deployment"></a>

要验证部署已经成功，请按照[查看 CodeDeploy 部署详情](deployments-view-details.md)中的说明操作，然后返回本页。

如果部署已成功，您将在 `c:\temp\CodeDeployExample` 文件夹（对于 Windows Server）或 `/tmp/CodeDeployExample` 文件夹（对于 Ubuntu Server 和 RHEL）中找到 4 个文本文件。

如果部署失败，请按照[使用 CodeDeploy 查看实例详细信息](instances-view-details.md)和 [排查实例问题](troubleshooting-ec2-instances.md)中的排除故障步骤操作。进行任何必要的修复，重新打包并上传应用程序修订，然后再次尝试部署。

# 步骤 6：清理资源
<a name="tutorials-on-premises-instance-6-clean-up-resources"></a>

为避免对您为此教程创建的资源继续收费，请删除您不再使用的 Amazon S3 存储桶。您还可以清理关联的资源，例如本地实例中的应用程序 CodeDeploy 和部署组记录。

您可以使用 AWS CLI 或 Amazon S3 控制台 CodeDeploy 和 Amazon S3 控制台的组合 AWS CLI 来清理资源。

## 清理资源（CLI）
<a name="tutorials-on-premises-instance-6-clean-up-resources-cli"></a>

**删除 Amazon S3 存储桶**
+ 使用 `--recursive` 开关对存储桶调用 [rm](https://docs.aws.amazon.com/cli/latest/reference/s3/rm.html) 命令（例如 `amzn-s3-demo-bucket`）。该存储桶及存储桶中的所有对象将被删除。

  ```
  aws s3 rm s3://your-bucket-name --recursive --region region
  ```

**要删除中的应用程序和部署组记录 CodeDeploy**
+ 对应用程序（例如，`CodeDeploy-OnPrem-App`）调用 [delete-application](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-application.html) 命令。将删除部署和部署组的记录。

  ```
  aws deploy delete-application --application-name your-application-name
  ```<a name="tutorials-on-premises-instance-6-clean-up-resources-deregister-cli"></a>

**注销本地实例并删除 IAM 用户**
+ 对本地实例和区域调用 [deregister](https://docs.aws.amazon.com/cli/latest/reference/deploy/deregister.html) 命令：

  ```
  aws deploy deregister --instance-name your-instance-name --delete-iam-user --region your-region
  ```
**注意**  
如果您不希望删除与此本地实例关联的 IAM 用户，请改为使用 `--no-delete-iam-user` 选项。

**卸载 CodeDeploy 代理并从本地实例中删除配置文件**
+ 从本地实例调用 [uninstall](https://docs.aws.amazon.com/cli/latest/reference/deploy/uninstall.html) 命令：

  ```
  aws deploy uninstall
  ```

现在您已完成清除此教程所用资源的全部步骤。

## 清理资源（控制台）
<a name="tutorials-on-premises-instance-6-clean-up-resources-console"></a>

**删除 Amazon S3 存储桶**

1. 登录 AWS 管理控制台 并打开 Amazon S3 控制台，网址为[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 选择要删除的存储桶旁边的图标（例如，`amzn-s3-demo-bucket`），但不要选择存储桶本身。

1. 选择**操作**，然后选择**删除**。

1. 在提示删除存储桶时，选择 **OK**。

**要删除中的应用程序和部署组记录 CodeDeploy**

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/codede](https://console.aws.amazon.com/codedeploy) ploy 上打开 CodeDeploy 控制台。
**注意**  
使用您在[入门 CodeDeploy](getting-started-codedeploy.md)中设置的同一用户登录。

1. 在导航窗格中，选择**应用程序**。

1. 选择要删除的应用程序的名称（例如，`CodeDeploy-OnPrem-App`），然后选择**删除应用程序**。

1. 在系统提示时，输入应用程序的名称以确认要删除应用程序，然后选择**删除**。

您不能使用 AWS CodeDeploy 控制台注销本地实例或卸载 CodeDeploy 代理。按照[注销本地实例并删除 IAM 用户](#tutorials-on-premises-instance-6-clean-up-resources-deregister-cli)中的说明进行操作。