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

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

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2019 年 10 月 8 日

CPOL

14分钟阅读

viewsIcon

3998

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

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

当您处理微服务时,总是希望确保同一服务的​​所有实例始终相同,并且所有微服务都可以轻松通信。而这正是容器化技术发挥作用的地方,Docker 是目前最受欢迎的容器化技术之一。在本文中,我们将学习如何将一个简单的 Node.js 应用程序从我们的 Bitbucket 仓库部署到阿里云容器服务,然后使用 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 Namespace。通常,容器用于创建微服务。尽管我们的应用程序只有一个服务,但在现实世界中通常不会是这种情况。这时 ACR Namespaces 就派上用场了,Namespace 是 Repositories 的集合,Repository 是 Images 的集合。建议为每个应用程序创建一个 Namespace,为每个服务镜像创建一个 Repository。

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

现在我们将把我们的 Bitbucket 帐户与 ACR 绑定。要做到这一点,请转到 ACR 控制台主界面上的“Code Source”(代码源)选项卡,然后点击 Bitbucket 旁边的“Bind Account”(绑定帐户)按钮,这将弹出一个小对话框,现在您应该点击“Go to the source code repository to bind account”(转到源代码仓库绑定帐户)链接。

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

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

填写完该部分后,点击“Next”(下一步)按钮。在下一页上,它会为您提供一个表单来选择“Code Source”(代码源)选项。在此页面上,我们将把我们的 **Bitbucket** Repository 与我们的 ACR Repository 集成。从“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 集群所需的一切。负载均衡器在正常工作前需要设置 Resource Access Management (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 )”。我们还需要为将为此集群创建的 ECS 实例设置登录方式,您将有两个选项:“Key Pair”(密钥对)或“Password”(密码),选择您喜欢的任何一种。配置完成后,点击“Create”(创建)按钮继续。然后您将看到一个对话框,其中包含刚创建集群的所有详细信息,请确保所有信息都正确,然后点击“OK”(确定)按钮继续。

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

接下来,导航回 ACR 控制台中的 Repositories(仓库),然后点击我们之前创建的 ACR Repository 旁边的“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 Application creation wizard(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”(查看应用程序列表)链接,继续进入 Applications List(应用程序列表)页面,在那里您将找到我们刚刚创建的应用程序,点击它进入应用程序的概览页面。然后点击“Routes”(路由)选项卡以获取我们应用程序的 Access Endpoint(访问端点)。

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

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

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

由于 HTTPS 在服务器负载均衡器层受到支持。为了支持 HTTPS,我们需要创建一个服务器负载均衡器证书。要做到这一点,请导航到网络下的服务器负载均衡器控制台,然后通过点击左侧面板中的“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.