Logo
Section 1 / 22

从零开始:基础网页应用

在本地创建 Hello World Web 应用并用 pm2 管理,再推送到 GitHub

导入

从零开始:基础网页应用

在本地创建 Hello World Web 应用并用 pm2 管理,再推送到 GitHub

在本部分中,我们将引导你完成在 AWS 云上运行一个基本 Web 应用程序的全过程。我们将从一个空白项目开始,逐步构建应用程序及其基础设施。每个步骤都专注于基础设施的一个特定方面,我们会详细解释其原理和原因。

本指南中展示的所有源代码均可在 GitHub 上找到。每个提交代表书中一个代码检查点,你可以在此处查看全部内容:AWS Bootstrap。

在与 AWS 交互时,我们将同时使用 AWS 控制台 和 AWS CLI。此外,我们还将使用以下工具:

  • GitHub 作为应用程序和基础设施代码的源代码仓库。
  • node.js 和 npm 用于构建我们的应用程序。
  • git 用于版本控制。
  • curl 用于与我们的应用程序进行交互。

目标

  • 在单个 EC2 实例上运行一个简单的 Web 应用程序。

步骤

  • 编写一个基本的“Hello World”Web 应用程序。

在本节中,我们将创建一个小型 Web 应用程序,并将其部署到 AWS 账户中的一个 EC2 实例上。我们将首先手动完成所有步骤,后续章节将实现自动化。我们的应用程序并不复杂,部署方式也远非理想,但这将使我们能够在这本书的剩余部分中,一步步构建出一个结构良好、自包含的 AWS 环境。

创建我们的应用程序

我们需要安装 git 和 npm。但不用担心,这些工具已在我们的平台上预先安装好,因此你可以直接在终端中使用它们。

现在,让我们创建一个最简化的应用程序,并为其建立一个 git 仓库来存储代码。

1mkdir aws-bootstrap && cd aws-bootstrap 2git init 3npm init -y

我们的应用程序将在端口 8080 上监听 HTTP 请求,并返回 "Hello World"。整个应用将仅包含一个文件:server.js。

1const { hostname } = require('os'); 2const http = require('http'); 3const message = 'Hello World\n'; 4const port = 8080; 5const server = http.createServer((req, res) => { 6 res.statusCode = 200; 7 res.setHeader('Content-Type', 'text/plain'); 8 res.end(message); 9}); 10server.listen(port, hostname, () => { 11 console.log(`Server running at http://${hostname()}:${port}/`); 12});

⚠️ 第 4 行:我们将在端口 8080 上运行服务器,因为低于 1024 的端口号需要 root 权限。

我们可以直接使用 node 命令运行应用程序。

1node server.js 2Server running at http://localhost:8080/

然后,我们可以在另一个终端窗口中使用 curl 进行测试。

1curl localhost:8080 2Hello World

上述所有命令均已预执行于下方的代码沙箱中。点击 RUN 按钮即可启动服务器。

No configuration found for ID: 5cad977d6db49584d20a080940ccfe1941c355a0a6832629ec0485f58baba031

接下来,我们使用进程管理器来监控应用程序,以便在崩溃时自动重启。为此,我们需要修改 package.json 文件。

1{ 2 "name": "aws-bootstrap", 3 "version": "1.0.0", 4 "description": "", 5 "main": "server.js", 6 "scripts": { 7 "start": "node ./node_modules/pm2/bin/pm2 start ./server.js --name hello_aws --log ../logs/app.log", 8 "stop": "node ./node_modules/pm2/bin/pm2 stop hello_aws", 9 "build": "echo 'Building...'" 10 }, 11 "dependencies": { 12 "pm2": "^4.2.0" 13 } 14}

第 11 行:引入 pm2 作为依赖项,这是一个 Node.js 进程管理工具。

第 7 行:从现在起,我们将使用 npm start 通过 pm2 启动应用程序。

第 7 行:pm2 将以 hello_aws 为名称监控该进程,并将标准输出重定向到 ../logs/app.log。

第 8 行:我们将使用 npm stop 命令通知 pm2 停止应用程序。

第 9 行:一个占位用的构建步骤。实际生产环境的构建流程应放在此处。

现在,我们需要使用 npm 安装我们在 package.json 中新增的依赖项。

1npm install

在 package.json 中,我们指定应用程序的日志输出路径为 ../logs。将日志目录置于应用程序目录之外,这一点在后续使用 CodeDeploy 部署时非常重要,因为它可以防止每次部署时日志目录被删除。目前,我们先在本地手动创建该目录。

1mkdir ../logs

现在,我们就可以通过进程管理器启动应用程序了。

1npm start 2 3[PM2] Applying action restartProcessId on app [hello_aws](ids: [ 0 ]) 4[PM2] [hello_aws](0) ✓ 5[PM2] Process successfully started 6┌────┬────────────┬───────┬──────┬───────────┬──────────┬──────────┐ 7│ id │ name │ mode │ ↺ │ status │ cpu │ memory │ 8├────┼────────────┼───────┼──────┼───────────┼──────────┼──────────┤ 9│ 0 │ hello_aws │ fork │ 0 │ online │ 0% │ 8.7mb │

再次使用 curl 测试,应该仍能收到 "Hello World" 消息。

1curl localhost:8080 2Hello World

同样,这些命令已预执行于下方的代码沙箱中。点击 RUN 按钮即可启动服务器。

No configuration found for ID: 1a11b940948d2722c081ee52b9de807c49b2c3f0a6e6207a7a73f1a8ae01e816

在一切正常后,我们现在可以将所有更改提交到 git。

1git add server.js package.json package-lock.json 2git commit -m "Create basic hello world web application"

将代码推送到 GitHub

如果你还没有 GitHub 账号,请先 注册一个(对于这类简单项目是免费的)。注册完成后,下一步是创建 GitHub Token。

接着,创建一个 新的 GitHub 仓库。我们将其命名为 aws-bootstrap。目前仓库需设为公开,但稍后配置 CodeBuild 后可改为私有。

现在有了 GitHub 仓库,我们就可以将本地更改推送上去。

1git remote add origin https://github.com/<username>/aws-bootstrap.git 2git push -u origin master

第 1 行:将 <username> 替换为你自己的 GitHub 用户名。

所有 git 命令均已执行,你只需先设置你的 GitHub 用户名(Git_username)为环境变量。

注意:
在运行代码前,请提供你的 用户名 和 GitHub_Token。

No configuration found for ID: 68fddabf3f5fbbd71c60b1f1c5e3a7bc3bde73e1b226f0f772d03cf99207c70e

注意:你只能为一个新的 GitHub 仓库运行一次上述沙箱。若要再次运行,必须删除现有仓库,重新创建一个,然后才能再次运行。


在下一课中,我们将把应用程序托管在 EC2 实例上,并手动安装它。

结论

从零开始:手动搭建 AWS 基础设施