热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用DockerCompose将WindsAPI部署到AWSECS

https:getstream.iowindsWinds是Stream提供的一种流行的RSS和Podcast应用程序,该服务使您可以在数小时而不是数月内构建新闻和活动
https://getstream.io/winds

Winds是Stream提供的一种流行的RSS和Podcast应用程序,该服务使您可以在数小时而不是数月内构建新闻和活动提要。 Winds是100%开放源代码,后端易于安装在本地环境或云中-我们将在本教程中介绍该任务。 为了确保您通过本教程学习, 确保完成所有先决条件。

前提条件📚

与任何教程一样,它也有一些要求。 对于这篇文章,您需要确保已经进行了后续操作并可以继续运行,并且可以继续进行。 如果您决定跳过这些要求,您可能会一hung不振-我们不希望这种情况发生。

  1. 具有对ECS和ElastiCache的完全访问权限的Amazon Web Services(AWS)帐户
  2. 来自https://github.com/GetStream/Winds的Winds的新克隆
  3. 具有MongoDB Atlas或其他MongoDB提供程序的帐户(我们建议使用MongoDB Atlas)
  4. 流的免费帐户
  5. AWS ElastiCache设置并运行Redis的实例( 复制URI,不久即可使用 )
  6. 来自Mercury的免费API密钥(用于处理RSS文章解析,因此非常重要)
  7. 一组免费的来自阿尔及利亚的证书
  8. 您计算机上安装的AWS CLI
  9. 除AWS CLI外还安装了ECS CLI
  10. Docker Hub上的帐户(您可以根据需要使用其他提供程序;但是,我强烈建议您坚持使用Docker Hub)

我还要提到的另一件事是,您应该对您的AWS账户具有以下权限(或类似权限):

  • AmazonEC2ContainerRegistryFullAccess

而已! 💥

设置依赖项🛠

希望我们在上面提供了详尽的列表,希望您有机会完成各个步骤并复制第三方URI和凭据以继续前进。 下一步要求我们修改Winds / api目录中的docker-compose-aws文件。

启动时,文件将如下所示:

按照docker-compose-aws.yml文件中的指示填写凭据。 不要忘记您的JWT的随机值 。

您应该得到一个看起来像这样的文件:

注意:我们在 docker-compose.yml 文件上 使用了 docker-compose-aws.yml 文件,因为我们在同一目录中有两个docker-compose文件。 通过在文件后添加“ -aws”,我们可以轻松指定在构建环境时要命中的文件。

使用ECS CLI启动并运行🤔

Amazon Web Services(AWS CLI)的Elastic Container Service命令行界面提供了高级命令,可简化本地开发环境中的集群和任务的创建,更新和监视。

在这里重要的是ECS CLI支持Docker Compose文件,这是我们用来定义应用程序如何以及应该如何在云中运行的文件。 虽然它是用于多容器应用程序的(在docker-compose-aws.yml中也有一个文件),但出于本教程的目的,我们将使用单个容器应用程序。

让我们继续并配置AWS ECS CLI,以便我们可以启动并运行。 首先,我们将使用以下命令创建“配置文件”:

接下来,使用以下命令很好地完成配置:

注意:将启动类型替换为您要默认使用的启动类型(EC2)region_name和所需的AWS区域,将cluster_name(WINDS)替换为要使用的现有Amazon ECS集群或新集群的名称,并使用configuration_name(WINDS)您想要提供此配置的名称。

使用EC2任务创建集群✍

AWS ECS需要权限,以便您的EC2任务可以将日志存储在CloudWatch中。 任务执行IAM角色包含此权限。 为此,我们需要使用AWS CLI创建任务执行IAM角色。

1.创建一个名为task-execution-assume-role.json的文件 ,其内容如下:

2.创建任务执行角色(与task-execution-assume-role.json在同一目录中):

3.附加任务执行角色策略:

创建群集和安全组🔑

接下来,我们将创建带有安全组的Amazon ECS集群。

1.在集群配置中,我们已将EC2指定为默认启动类型,因此以下命令将创建一个空集群和一个配置有两个公共子网的VPC:

注意:创建资源时,此命令可能需要几分钟才能完成。 您还需要记下创建的VPC和子网ID,我们将很快使用它们。

2.使用AWS CLI,使用上一个命令中输出的VPC值创建一个安全组:

3.使用AWS CLI,我们将添加一个安全组规则以允许对端口80的入站访问:

指定AWS ECS的参数

除了我们为您创建的docker-compose-aws.yml文件之外,您还需要创建一个具有以下内容的ecs-params.yml文件:

注意:此参数文件特定于AWS ECS,如果要在AWS上运行Winds API,则此文件是必需的。 您可以在上面的先前请求中找到需要指定的值。

将映像部署到Docker Hub🚴

在本节中,我们将概述如何将Winds API构建,标记和上传到Docker和AWS。

创建和上传

对于此步骤,您需要使用以下命令登录Docker:

然后,运行以下命令以构建Docker映像(您必须位于/ api目录中):

标记和推送

首先,您需要获取Docker Image ID,可以运行docker image list ,它将输出所有Docker映像。 从标记为“ winds”的那一个中获取ID,并将其放入下面的命令中。

正确标记图像所需的命令是:

现在,是时候将标记的图像推送到AWS了。 您可以执行以下操作:

大约需要30秒,但要完成。

部署到集群📤

现在我们已经配置了文件和基础架构,我们可以继续使用以下命令将Docker compose文件部署到ECS:

注意:默认情况下,该命令在当前目录中查找名为docker-compose.yml的文件。 因为我们有两个文件,所以我们需要使用–file选项(或简称-f)指定另一个docker compose文件。

如果一切顺利,您应该在ECS控制台中看到以下内容! 如果单击任务,您会注意到有一个公共IP地址可以让您查看API(它应该以“ pong”响应)。

做完了! 👏

我希望您喜欢本教程,了解如何使用Docker将Winds部署到AWS。 在以后的文章中,我将概述如何在Google和Digital Ocean上进行相同的部署。

如果您有兴趣部署前端,请查看这篇文章 ,概述如何使用AWS S3和CloudFront进行部署。

编码愉快! 🎉

标签: AWS ECS , 容器 , 部署 , Docker , 风

最初于 2018 年9月6日 发布在 getstream.io

From: https://hackernoon.com/deploying-the-winds-api-to-aws-ecs-with-docker-compose-4daf8d130d3b



推荐阅读
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • position属性absolute与relative的区别和用法详解
    本文详细解读了CSS中的position属性absolute和relative的区别和用法。通过解释绝对定位和相对定位的含义,以及配合TOP、RIGHT、BOTTOM、LEFT进行定位的方式,说明了它们的特性和能够实现的效果。同时指出了在网页居中时使用Absolute可能会出错的原因,即以浏览器左上角为原始点进行定位,不会随着分辨率的变化而变化位置。最后总结了一些使用这两个属性的技巧。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
author-avatar
星魂陨石
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有