65.9K
CodeProject 正在变化。 阅读更多。
Home

从 Bitbucket 部署应用程序到阿里云容器服务的基础指南...

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2019 年 10 月 8 日

CPOL

14分钟阅读

viewsIcon

2752

从 Bitbucket 部署应用程序到阿里云容器服务并使用 Let’s Encrypt SSL/TLS 进行安全防护的入门指南 2019。

从 Bitbucket 部署应用程序到阿里云容器服务并使用 Let’s Encrypt SSL/TLS 进行安全防护的入门指南 2019

在使用微服务时,您总是希望确保同一服务的​​所有实例始终保持一致,并且所有微服务能够轻松地相互通信。这就是容器化的用武之地,而 Docker 是目前最受欢迎的容器化技术之一。在本文中,我们将学习如何从我们的 Bitbucket 仓库将一个简单的 Node.js 应用程序部署到阿里云容器服务,然后使用 Let’s Encrypt SSL/TLS 来保护我们将要使用的域。

所以,这里是我们将会使用的服务列表

  1. Docker
  2. Bitbucket
  3. 阿里云容器镜像服务
  4. 阿里云容器服务
  5. Node.js
  6. Let’s Encrypt SSL/TLS

Docker

Docker 是一种开源软件,旨在通过使用容器来创建、部署和运行应用程序。容器允许开发人员将应用程序与其所需的所有部分(如库和其他依赖项)打包在一起,并将其作为一个整体进行分发。通过这样做,借助容器,开发人员可以放心,应用程序将在任何其他 Linux 计算机上运行,而不会受到该计算机可能具有的任何与用于编写和测试代码的计算机不同的自定义设置的影响。
容器有点像虚拟机。但与虚拟机不同的是,Docker 不会创建一个完整的虚拟操作系统,而是允许应用程序使用与它们运行的系统相同的 Linux 内核,并且只需要将应用程序与主机计算机上尚不运行的内容一起分发。这提供了显著的性能提升,并减小了应用程序的尺寸。了解更多 >>

在本教程中,我们将使用 Docker 来容器化我们的应用程序,以便我们可以将其部署并在阿里云容器服务上运行。

Bitbucket

Bitbucket 是一个为专业团队设计的 Git 版本控制存储库管理解决方案。它为您提供了一个集中管理 Git 存储库、协作处理源代码并指导您完成开发流程的场所。它允许您创建无限的免费私有存储库,最多支持 5 位协作者。这使其成为托管专有代码的理想场所。了解更多>>

它的一些主要功能是

  1. 访问控制,用于限制对源代码的访问。
  2. 工作流控制,用于强制执行项目或团队工作流。
  3. 代码审查中的行内评论的 Pull Requests,用于协作。
  4. Jira 集成,用于完整的开发可追溯性。
  5. 完整的 Rest API,如果您希望构建自定义功能,但又无法从其市场获得,则可以使用它。

在本教程中,我们将使用 Bitbucket 来托管我们应用程序代码的存储库,并通过它创建一个 CI/CD 管道,将应用程序部署到阿里云容器服务。

阿里云容器镜像服务

阿里云容器镜像服务 (ACR) 是一个安全的镜像托管平台,提供容器化镜像的生命周期管理。通过 ACR,您可以完全控制您存储的镜像。ACR 具有许多功能,包括与 GitHub、Bitbucket 等的集成。它还可以从源代码到应用程序自动构建新的镜像(在编译和测试之后)。该服务简化了镜像注册表的创建和维护,并支持多区域的镜像管理。与容器服务等其他云服务结合使用时,容器注册表提供了在云中使用 Docker 的优化解决方案。了解更多>>

在本教程中,我们将使用 ACR 来托管我们的 Docker 镜像,然后我们可以使用这些镜像在阿里云容器服务上部署我们的应用程序。

阿里云容器服务

阿里云容器服务 (ACS) 是一个高性能、可扩展的容器应用程序管理服务,它使您能够使用 Docker 和 Kubernetes 来管理容器化应用程序的生命周期。
容器服务提供各种应用程序发布方法和持续交付能力,并支持微服务架构。
容器服务简化了容器管理集群的建立,并集成了阿里云的虚拟化、存储、网络和安全能力,以在云端创建最佳的容器运行环境。了解更多 >>

在本教程中,我们将使用阿里云容器服务来托管和部署我们的微服务。

Node.js

Node.js 是一个异步事件驱动的 JavaScript 运行时环境。它旨在构建可扩展的网络应用程序。Node 运行时环境包含了在您的计算机上将用 JavaScript 编写的程序作为独立应用程序执行所需的一切。Node.js 在 V8 JavaScript 运行时引擎上运行。该引擎将您的 JavaScript 代码转换为更快的机器代码。机器代码是计算机无需事先解释即可运行的低级代码。了解更多 >>

在本教程中,我们将使用 Node.js 创建一个简单的“Hello World”应用程序,然后尝试将其部署到 ACS。

Let’s Encrypt SSL/TLS

Let’s Encrypt 是一个全球证书颁发机构 (CA)。它允许世界各地的人们和组织获取、续订和管理 SSL/TLS 证书。网站可以使用这些证书启用安全的 HTTPS 连接。Let’s Encrypt 仅提供域名验证 (DV) 证书。它们不收取这些证书的费用。Let’s Encrypt 是一家非营利组织,其使命是通过推广 HTTPS 的广泛采用,来创建一个更安全、更注重隐私的网络。它们的服务免费且易于使用,因此任何网站都可以部署 HTTPS。了解更多 >>

在本教程中,我们将使用 Let’s Encrypt SSL/TLS 来保护我们的应用程序。

现在开始吧

首先,我们将为我们的应用程序代码在 Bitbucket 上创建一个私有存储库,因此您必须有一个 Bitbucket 账户;如果您还没有,则可以注册一个账户。然后,我们将使用阿里云服务来创建 Docker 镜像并部署我们的容器化应用程序。因此,您也必须设置一个阿里云账户。如果您还没有,则可以注册一个账户。

第一部分:在 Bitbucket Git 存储库中创建我们的应用程序和 Docker 配置

步骤 1:创建 Bitbucket 存储库

首先,登录您的 Bitbucket 账户,然后点击左侧菜单栏中的“+”按钮,然后从选项中选择“Repository”(存储库),然后在“Create a new repository”(创建新存储库)表单中,为存储库提供名称。然后按“Create Repository”(创建存储库)按钮。

步骤 2:将应用程序和 Docker 文件添加到存储库

现在我们已经成功创建了存储库,我们将开始将我们的应用程序和 Docker 文件添加到该存储库中。

因此,为了开始,我们将初始化一个本地目录的 Git。首先,在您的本地计算机上创建一个空目录,我们称之为“sample-app-for-alibaba-cloud”,然后在“Git Bash”或您首选的 CLI 中打开它。并在其中运行 git init 命令。

现在,我们将添加该目录中的文件。首先,我们将添加应用程序文件“app.js”,内容如下

const http = require('http');
const hostname = '127.0.0.1';<br>const port = 3000;
const server = http.createServer((req, res) => {<br>  res.statusCode = 200;<br>  res.setHeader('Content-Type', 'text/plain');<br>  res.end('Hello World\n');<br>});
server.listen(port, hostname, () => {<br>  console.log(`Server running at <a href="http://${hostname}:${port}/`">http://${hostname}:${port}/`</a>);<br>});

这将创建一个简单的“Hello World”应用程序,该应用程序将在 Node.js 内置服务器的 3000 端口上运行。

现在,我们将添加 Docker 配置文件“Dockerfile”,内容如下

# Use Node version 10.15.1<br>FROM node:10.15.1
# Create a directory where our app will be placed<br>RUN mkdir -p /usr/src/app
# Change directory so that our commands run inside this new directory<br>WORKDIR /usr/src/app
# Get all the code needed to run the app<br>COPY . /usr/src/app
# Expose the port the app runs in<br>EXPOSE 3000
# Serve the app<br>CMD node app.js

文件中的注释应该解释每一行做什么。此文件中的配置将用于确定如何创建我们应用程序的容器镜像。

现在,您应该已准备好将这些文件推送到我们之前创建的 Bitbucket 存储库,可以使用以下 Git 命令完成

git add .
git commit -m "app.js and dockerfile added"
git remote add origin https://your-username@bitbucket.org/your-username/the-repo-name.git
git push -u origin master

第二部分:将 Bitbucket 与 ACR 集成

您需要做的第一件事是激活阿里云容器镜像服务。它可以在您的阿里云控制台的“弹性计算”部分找到。
这将带您进入容器镜像服务控制台,您可以在其中配置和部署服务。届时,它可能会要求您输入 Docker 客户端的密码,请记住“登录 Docker 时,请使用您的阿里云账户作为用户名,并使用您刚刚设置的密码”。

现在,我们将创建一个新的 ACR 命名空间。通常,容器用于创建微服务。虽然我们的应用程序只使用了一个服务,但在现实世界中通常不会是这种情况。这就是 ACR 命名空间的作用,命名空间是存储库的集合,存储库是镜像的集合。建议为每个应用程序创建一个命名空间,并为每个服务镜像创建一个存储库。

因此,要创建一个新的命名空间,请转到 ACR 控制台中的“Namespaces”(命名空间)选项卡,然后点击右上角的“Create Namespace”(创建命名空间)按钮。然后输入命名空间的名称,然后点击“Confirm”(确认)按钮。

现在我们将我们的 Bitbucket 账户与 ACR 绑定。为此,请转到主 ACR 控制台上的“Code Source”(代码源)选项卡,从那里点击 Bitbucket 旁边的“Bind Account”(绑定账户)按钮,这将弹出一个小对话框,现在您应该点击“Go to the source code repository to bind account”(前往代码源存储库绑定账户)链接。

这将带您到 Bitbucket,要求您授予对阿里云的访问权限。在那里,您应该点击“Grant Access”(授予访问权限)按钮继续。

现在,您应该准备好创建一个 ACR 存储库了。为此,只需转到 ACR 控制台上的“Repositories”(存储库)选项卡,然后点击右上角的“Create Repository”(创建存储库)按钮。它会为您提供一个表单,您需要在其中输入存储库的详细信息,例如 Region(区域)、Namespace(命名空间)、Repository Name(存储库名称)、Summary(摘要)等。

填写完该部分后,点击“Next”(下一步)按钮。在下一页上,它会为您提供一个选择“Code Source”(代码源)选项的表单。在此页面上,我们将把我们的 **Bitbucket** 存储库与我们的 ACR 存储库集成。在“Code Source”(代码源)选项卡中选择“Bitbucket”,然后点击我们之前创建的 Bitbucket 存储库。

为了帮助配置持续集成,请务必选中“Automatically Build Image”(自动构建镜像)。选中此项后,代码提交后即可自动构建镜像,无需手动触发构建。现在,最后点击“Create Repository”(创建存储库)按钮来创建 ACR 存储库并将其与 Bitbucket 存储库集成。

第三部分:部署应用程序

首先,我们需要创建一个 VPC。为此,只需导航到“Networking”(网络)下的“Virtual Private Cloud”(虚拟专用云)。这将带您进入 VPC 控制台,在那里您可以点击“Create VPC”(创建 VPC)按钮来创建 VPC 和 VSwitch。点击按钮后,您将看到一个小的表单,用于选择新 VPC 的选项,我们将大部分使用默认设置,只需输入名称,然后点击“OK”(确定)按钮继续。

要开始使用阿里云容器服务,我们需要做的第一件事是导航到容器服务仪表板。此仪表板可以在您的阿里云控制台的“弹性计算”部分找到。

首次尝试时,它可能会显示一个警告“Container service needs to create default roles”(容器服务需要创建默认角色)。这是因为一旦您请求集群,阿里云就会开始配置运行它所需的资源。这包括负载均衡器、虚拟机、路由器等。基本上是运行您自己的 Docker 集群所需的一切。并且负载均衡器需要在工作之前设置资源访问管理 (RAM) 服务。要解决此问题,只需点击“Go to RAM console”(前往 RAM 控制台)按钮,然后一旦重定向,点击“Confirm Authorization Policy”(确认授权策略)按钮。

这将最终带您进入容器服务概览页面,从那里选择左上角的“Container Service-Swarm”(容器服务-Swarm),然后点击“Create Cluster”(创建集群)按钮。

这将带您进入集群创建向导。它将向您显示配置集群所需的所有选项,例如 Name(名称)、Region(区域)、Zone(可用区)、VPC 等。

我们将大部分使用默认值,但出于演示目的,我们将更改“Instance Configuration”(实例配置)下的“Instance Type”(实例类型)为“1 Core(s) 1 G (ecs.n1.tiny)”(1 个核心 1 GB (ecs.n1.tiny))。我们还需要为将为该集群创建的 ECS 实例设置登录凭证,您将有两个选项:“Key Pair”(密钥对)或“Password”(密码),选择您喜欢的即可。配置完成后,点击“Create”(创建)按钮继续。然后,您将看到一个对话框,其中包含刚刚创建的集群的所有详细信息,请确保一切正确,然后点击“OK”(确定)按钮继续。

现在,我们将为 Bitbucket 上的源代码创建一个 Tag(发布)。这将自动在 ACR 中构建镜像。为此,请先导航到我们之前创建的 Bitbucket 存储库的 commits(提交)页面,然后选择我们推送到其中的最新提交。在该页面上,您会在页面右侧看到一个“Tags”(标签)选项,旁边有一个“+”按钮,点击它以打开创建新标签的对话框,在对话框中将有两个字段:Name(名称)和 Description(描述),以“release-v*”的格式输入名称,例如“release-v1.0.0”,然后点击“Create Tag”(创建标签)按钮。

接下来,导航回 ACR 控制台上的“Repositories”(存储库),然后点击我们之前创建的 ACR 存储库旁边的“manage”(管理)按钮。

这将带您进入该存储库的“Details”(详细信息)页面,在那里您将找到存储库的所有详细信息,例如 Name(名称)、Region(区域)、Type(类型)、Code Repository Link(代码存储库链接)、Internet Address(互联网地址)、VPC Address(VPC 地址)等。从那里导航到“Build”(构建)选项卡,在“Build Log”(构建日志)下,您将找到我们之前创建的标签的构建记录。一旦构建状态为“Successful”(成功),点击右上角的“Deploy Application”(部署应用程序)按钮,它将弹出一个小对话框,您可以在其中配置部署选项,例如“Repository Address”(存储库地址)和“Container Cluster”(容器集群)。对于“Container Cluster”(容器集群)选项,选择“Swarm”,然后点击“Deploy”(部署)按钮。

这将带您进入 ACS 应用程序创建向导。在那里,“Basic Information”(基本信息)选项卡中,您将获得 Name(名称)、Version(版本)、Cluster(集群)、Update(更新)和 Description(描述)等选项。输入名称并选择我们之前创建的集群,然后选中“Pull Docker Image”(拉取 Docker 镜像),然后点击“Next”(下一步)按钮继续。

这将带您进入创建向导的“Configuration”(配置)选项卡。在那里,您应该选择我们的 Docker 容器的“Image Name”(镜像名称)和“Image Version”(镜像版本),并将“Port Mapping”(端口映射)下的“host Port”(主机端口)设置为“3000”。然后继续在“Web routing”( Web 路由)下添加 Port(端口)和 Domain(域名)。您还会在此页面上找到许多其他配置选项,但出于本文的目的,我们将使用它们的默认值。现在点击“Create”(创建)按钮最终创建应用程序。

然后,在“Done”(完成)页面上,点击“View Application List”(查看应用程序列表)链接以继续进入应用程序列表页面,在那里您将找到我们刚刚创建的应用程序,点击它以进入应用程序的概览页面。然后点击“Routes”(路由)选项卡以获取我们应用程序的访问端点。

好了,我们已成功部署了我们的容器化应用程序。现在,进入最后一部分。

第四部分:使用 Let’s Encrypt SSL/TLS 保护我们的应用程序

要开始此操作,您应该首先阅读 John Hanley 的这篇关于在阿里云上配置 Let’s Encrypt ACME 的指南。现在,一旦您配置好所有内容并创建了证书文件,请继续按照上述步骤进行。

由于 HTTPS 在服务器负载均衡器层面上受支持。要支持 HTTPS,我们需要创建一个服务器负载均衡器证书。为此,请导航到“Networking”(网络)下的服务器负载均衡器控制台,然后通过点击左侧面板中的“Certificates”(证书)链接,继续进入“Certificates”(证书)页面。到达那里后,点击“Create Certificate”(创建证书)按钮,然后选择“Upload Third-Party Certificate”(上传第三方证书)选项,然后点击“Next”(下一步)按钮。

这将带您进入“Upload Third-Party Certificate”(上传第三方证书),填写所需信息,然后点击“Next”(下一步)按钮。

成功创建证书后,导航到服务器负载均衡器页面,找到并点击在集群创建期间分配的服务器负载均衡器实例。进入后,在“Listeners”(监听器)选项卡下点击“Add Listener”(添加监听器)按钮。

这将打开添加监听器的向导,从那里您应该按照本指南 HTTP to HTTPS(HTTP 到 HTTPS)来填写向导。完成后,您就可以使用 Let’s Encrypt SSL/TLS 保护的容器化应用程序了。

© . All rights reserved.