作者是各自领域的专家,并就其所展示经验的主题撰写文章. 我们所有的内容都由同一领域的顶级专家同行评审和验证.
米歇尔·夏芭拉的简介

Michele Sciabarra

Michele是一名拥有超过20年经验的系统架构师. 他是一个多语言开发人员,但他的专长是Scala和DevOps.

Previously At

DigitalOcean
Share

为什么你可能需要它?

我是一名开发人员,每天都在集成开发环境(IDE)中工作。, 就像Intellij IDEA或Eclipse. 这些IDE是桌面应用程序. 自从谷歌文档问世以来, 我看到越来越多的人将他们的工作从Word或Excel的桌面版本转移到云端, 使用相当于文字处理器或电子表格的在线应用程序.

使用云存储工作有明显的原因. Hoy en día, 与传统的桌面业务应用程序相比, 一些web应用程序在功能方面没有缺点. 只要有网络浏览器,内容就可以使用, y estos días, 这几乎在任何地方都发生. 协作和共享很容易,文件丢失的可能性也更小.

Desafortunadamente, 云计算的这些优势在软件开发领域并不常见, 就像它们适用于业务应用程序一样. 有一些尝试提供在线IDE,但它们不接近传统IDE.

Eso es paradójico; mientras seguimos atados a nuestro escritorio para la programación diaria, 软件现在已经在多个服务器上生成. 开发人员需要处理他们不能再保存在电脑上的东西. Por supuesto, las laptops ya no aumentan su poder de procesamiento; tener más de 16gb de RAM en una laptop es raro y costoso, 更不用说最新的设备了, por ejemplo, tablets, 记忆更少.

Sin embargo, 即使仍然不可能取代传统的桌面应用程序进行软件开发, es posible 将整个开发桌面移动到云. 我发现它的那天, 我不再需要把所有的软件都放在笔记本电脑上, 注意到web版本的终端和VNC的可用性, moví todo a la nube. 最终,我开发了一个构建工具包来自动创建这样的环境.

云中的开发人员

云对开发人员意味着什么? 当然是在里面发展!

在本文中,我提出了一组脚本,用于构建一个基于云的开发环境 Scala 以及大数据应用, 在Amazon AWS上使用Docker运行,并使用IntelliJ IDE压缩web可访问的桌面, Spark, Hadoop和齐柏林飞艇作为服务, 以及基于web的SSH等行命令工具, SBT y Ammonite. 该工具包可在 GitHub,我还描述了用于构建实例的过程. 您可以构建您的环境,并根据您的特殊需求定制它. 让它工作不应该超过10分钟.

“BigDataDevKit”里有什么?

我开发工具包的主要目标是,我的开发环境应该是可以用我工作的所有服务和服务器激活的东西, 然后在不再需要的时候摧毁它们. 这一点很重要,特别是当你在处理不同的项目时.

我理想的基于云的环境应该:

  • 包括所有典型的开发工具,特别是图形IDE.
  • 我需要的所有服务器和服务都在手边.
  • 从零开始创建和扩展以添加更多服务是简单和快速的.
  • 完全可以通过一个网络浏览器访问.
  • 可选地允许使用专用客户端(VNC客户端和SSH客户端)访问.

通过使用现代云基础设施和软件, 现代搜索引擎的力量, 各种宽带可用性和无价的Docker, 我为Scala创建了一个开发环境 desarrollo big data 它取代了我的开发笔记本电脑.

Actualmente, 我可以随时工作, 无论是在MacBook Pro上, Surface平板电脑,甚至iPad(带键盘), 尽管我承认后一种选择并不理想. Todos estos aparatos son básicamente clientes; el escritorio y todos los servicios están en la nube.

Docker y Amazon AWS!

我当前的环境是使用以下在线服务构建的:

  • 服务器的Amazon Web服务.
  • GitHub存储代码.
  • Dropbox保存文件.

我还使用一些免费服务,比如 DuckDns 对于IP地址和 Let’s encrypt 获取免费的SSL证书.

目前,在这种环境下,我有:

  • 一个带有Intellij idea的图形桌面,可以通过网络浏览器访问.
  • 可通过web访问的命令行工具,如SBT和Ammonite.
  • Hadoop用于保存文件和执行MapReduce作业.
  • 用于计划作业的Spark作业服务器.
  • 齐柏林飞艇为一个基于网络的笔记本.

但最重要的是,web访问是基于web的VNC和SSH的HTTPS编码, 有几个救生索可以防止数据丢失, 一个问题是, por supuesto, 当你不“拥有”物理硬盘上的内容时,这很重要. 记住,在你的电脑上获得你所有工作的副本是自动的,非常快. 如果你因为有人偷了你的密码而失去了一切, 你有一个副本在你的电脑无论如何, 只要你设置好了一切.

使用AWS和Docker使用基于Web的开发环境

现在,让我们开始描述环境是如何工作的. 当我早上开始工作的时候, 我要做的第一件事是登录Amazon Web services控制台, 我在哪里可以看到我所有的实例. Usualmente, 我为不同的项目配置了许多开发实例,并将那些没有使用的实例关闭,以节省账单. 毕竟,我一次只能做一个项目. (嗯,有时我两个人工作).

Pantalla 1

Así que, 选择我想要的实例, la inicio, 等一会儿,或者我去喝杯咖啡. 和打开电脑没有太大区别. 实例开始工作通常需要几秒钟. 一旦我看到绿色图标,我打开搜索引擎,转向一个已知的URL: http://msciab.duckdns.org/vnc.html. Ten en cuenta, ésta es mi URL; cuando creas un kit, crearás tu URL única.

因为AWS在启动时为每台机器分配了一个新的IP, 配置动态DNS服务, 所以你总是可以使用相同的URL登录到你的服务器, 即使你停止它,重新开始. 你也可以在搜索引擎中标记它. Aún más, 我使用HTTPS和有效的密钥,以最大限度地保护我的工作从好奇, 以防你需要处理密码和其他敏感数据.

Pantalla 2

一旦上传,系统将欢迎您与NoVNC, VNC web客户端. 只需输入并显示一个桌面. 我很少使用办公桌, intencionalmente, 只有一个带有应用程序的菜单,我唯一的奢侈品是一个虚拟桌面(因为我在开发时打开了很多窗口). Para el correo, 我仍然依赖其他应用程序, 今天大部分是搜索引擎中的其他标签.

在虚拟机中,我有开发大数据应用程序所需的东西. 首先,有一个IDE. 在构建的时候,我使用IntelliJ版本 Idea community. 此外,还有SBT构建工具和来自Scala RELP的Amonnite.

Pantalla 3

这种环境的主要特征, sin embargo, 服务是否作为容器部署在同一个虚拟机中. En particular, tengo: * Zeppelin,用于使用Scala代码进行数据分析的web笔记本(http://zeppelin:8080) * Spark作业服务器,用于执行和部署 spark jobs 使用Rest接口(http://sparkjobserver:8080). *用于从HDFS存储和删除数据的Hadoop实例(http://hadoop:50070).

注意,这些URL是固定的,但可以在虚拟环境中访问. 你可以在下面的截图中看到他们的网页界面.

Pantalla 4

每个服务在单独的Docker容器中运行. 不用太专业地说, 把它想象成虚拟机中的三个不同的服务器. 使用Docker的好处在于,您可以添加服务,甚至可以添加两到三个虚拟机. 通过使用Amazon容器,您可以轻松地调整您的环境.

最后但并非最不重要的是,你有一个可用的网络终端. 只需用HTTPS输入你的URL,他们就会用终端欢迎你进入一个网站.

Pantalla 5

在上面的截图中,您可以看到容器列表, 这三个服务器加桌面是什么. Esta línea de comando Shell 让您访问容器所在的虚拟机, 让你管理它们. 就好像你的服务器“在矩阵中”(实际上是在容器中), pero este Shell 给你一个逃离“矩阵”来管理服务器和桌面. 从这里您可以重新启动容器, 访问您的文件系统并执行Docker允许的其他操作. 我现在不打算详细讨论Docker,但有很多文档 página web de Docker.

如何安装实例

到目前为止,你喜欢这个吗?你想要你的实例吗? Es fácil y barato. 你可以用Amazon Web services上的虚拟机成本加上存储成本来拥有它. 当前配置中的套件需要4gb RAM才能使用所有服务. 如果你很小心,只在需要的时候使用虚拟机, y trabajas, digamos, 160 horas al mes, 以目前的价格,一个虚拟机将花费你160 x 0.052美元,或每月8美元. 你必须加上存储成本. 我用的是大约30gb的,但所有的东西都可以用不到10美元.

Sin embargo, 这还不包括Dropbox (Pro)账户的费用(最终), 如果您想备份超过2gb的代码. 这每月要多花15美元,但为您的数据提供了重要的安全保障. 您还需要一个私有存储库, 无论是GitHub付费服务还是其他服务, como Bitbucket, 提供免费的私有存储库.

我想强调的是,如果您只在需要时使用它,它比专用服务器更经济. Sí, 这里提到的一切都可以安装在物理服务器上, 但因为我是在处理大数据, 我需要很多AWS服务,所以我认为把所有东西都放在一个地方是有意义的.

让我们看看如何完成整个安装.

Pre-requisitos

在开始构建虚拟机之前, 你必须注册以下四项服务:

唯一需要使用信用卡的地方是亚马逊网络服务. DuckDns是完全免费的, 而DropBox会给你2gb的免费存储空间, 这对很多任务来说都足够了. Let 's Encrypt也是免费的,在内部构建用于签名证书的映像时使用. Aparte de esto, 我也推荐存储库托管服务, 比如GitHub或Bitbucket, sin embargo, 如果您想存储代码, 不需要安装.

首先,导航到 GitHub存储库BigDataDevKit.

Pantalla 6

滚动页面并从首选文本编辑器复制图像中显示的脚本:

Pantalla 7

这个脚本是提升图像所必需的. 您必须更改它并为参数提供一些值. 仔细更改引文内的文本. 注意,你不能使用像引号本身这样的字符, 密码中的反斜杠或美元符号, 除非你把它们放进去 cita. 此问题仅与密码相关. 如果你想确保安全,避免引用、美元符号或倒条.

El parámetro PASSWORD 它是您通过web界面进入虚拟机时选择的密码. El parámetro EMAIL 这是您的电子邮件,将在您注册SSL证书时使用. 你将被要求提供你的电子邮件地址, 从Let 's Encrypt获得SSL证书的唯一要求是什么.

求出的值 TOKEN y HOST,进入DuckDNS网站并登录. Tendrás que escoger hostname nuevo.

Pantalla 8

看图片,看看你应该在哪里复制 token 你应该在哪里加上你的 hostname. 您必须点击“添加域名”按钮来预订 hostname.

配置实例

假设您拥有所有参数并编辑了脚本, 您可以启动实例了. 进入Amazon Web服务管理界面, 转到EC2实例面板并单击“启动实例”.

Pantalla 9

在第一个屏幕中,您将选择一个图像. 该脚本是围绕Amazon Linux构建的,没有其他选项可用. 从Amazon中选择Linux,它是快速入门列表中的第一个选项.

Pantalla 10

在第二个屏幕中,选择实例类型. 给定正在运行的软件的大小, 有多种服务,您至少需要4gb内存, 所以我建议您选择实例 t2.medium. 你可以用 t2.small 如果你关闭一些服务或直到 micro 如果你只想要一张桌子.

Pantalla 11

在第三个屏幕, 点击“高级详细信息”并粘贴您在上一步中设置的脚本. 我还建议你建立对期限的保护, para que así, 如果意外终止发生,不要失去你所有的工作.

Pantalla 12

下一步是设置存储. 一个实例的标准是8gb, 这不足以包含我们将要构建的所有图像. 我建议增加到20gb. 同样,虽然不是必需的,但我建议另一个至少10gb的设备块. 脚本将把第二个设备块挂载为数据文件. 你可以对它的内容拍照, terminar la instancia, 然后使用内容的图像重新创建它,并恢复所有工作. Más aún, 当实例终止时,自定义块设备不会丢失, 所以对意外数据丢失有双重保护. 为了进一步提高您的安全性,您可以使用Dropbox自动备份您的数据.

Pantalla 13

第五步是给实例命名. Escoge el que quieras. 第六步提供了一种配置访问控制栏的方法. 默认情况下,只有SSH可用,但也需要HTTPS. 你可以向世界开放HTTPS, 但最好是只访问您的IP,以防止其他人进入您的桌面和 shell,尽管它仍然有密码保护.

完成最后一个配置后,就可以启动实例了. 您将注意到初始化第一次可能需要几分钟,因为启动脚本正在运行, 它还会做一些有点长时间的测试, 例如,使用Let 's Encrypt生成HTTPS证书.

Pantalla 14

Eventualmente, 当您看到管理控制台在“运行”与确认, 它不再“初始化”, 你已经准备好开始了.

假设所有参数都是正确的,您可以导航到 http://YOURHOST.duckdns.org.

Reemplazas YOURHOST 使用您选择的主机名, 但不要忘记这是一个HTTPS网站, no HTTP, 所以你和服务器的连接是加密的, 所以你必须写 http// en la URL. 该网站还将为Let 's Encrypt提供有效证书. 如果取得证书有问题, 初始化中的脚本将生成一个自签名证书. 你也可以用加密连接, 但搜索引擎会警告你这是一个未知的网站和不安全的连接. 不应该发生,但你永远不知道.

Pantalla 15

假设一切正常,那么你就可以进入蝴蝶网络终端. 您可以使用用户名登录 app 以及您在安装脚本中使用的密码.

一旦你登录了, 你有一个驱动的虚拟机,其中还包括Docker和其他礼物, como Nginx Frontend, Git, 和蝴蝶网络终端. 现在,您可以通过为开发环境构建Docker映像来完成安装.

然后输入以下命令:

git克隆http://github.com/sciabarra/BigDataDevKit
cd BigDataDevKit
sh build.sh

最后一个命令将要求您输入密码以进入桌面. 完成后,您将开始构建图像. 请注意,施工大约需要10分钟, 但你可以看到发生了什么,因为所有的东西都显示在屏幕上.

一旦构建完成,你也可以使用以下命令安装Dropbox:

/app/.dropbox-dist / dropboxd

系统会显示一个链接,你必须点击该链接才能激活Dropbox. 你必须登录到Dropbox,然后你就准备好了. 你放在Dropbox文件夹中的任何东西都会自动与所有Dropbox实例同步.

完成后,可以重新启动虚拟机并在URL中进入环境 http://YOURHOST.dyndns.org/vnc.html.

您可以停止机器并在继续工作时重新启动它. 访问URL保持不变. De esta manera, 你只需要为你使用它的时间付费, 加上每月额外的存储使用.

Preservar tu data

下面的讨论需要一些关于Docker和Amazon如何工作的知识. 如果你不想了解细节, 注意以下规则:在虚拟机中有一个可用的文件夹 /app/Dropbox我的意思是,不管你放什么 /app/Dropbox 它被保存了下来,其他的都是一次性的,可能会消失. 为了提高安全性,将宝贵的代码存储在系统控制版本中.

现在,如果你想理解这一点,请继续阅读. 如果您按照我的指示创建虚拟机, 这是保护终止,所以你不能意外地破坏它. 如果您决定故意终止它,主卷将被销毁. 所有Docker映像将丢失,包括您所做的所有更改.

然而,由于文件夹 /app/Dropbox 它被挂载为容器的Docker卷,而不是Docker映像的一部分. 在虚拟机中,文件夹 /app 挂载在您创建的Amazon卷上, 即使你指定虚拟机,它也没有被摧毁. 要删除卷,您必须特别删除它.

不要混淆Docker卷, 谁是Docker的逻辑实体, con Volúmenes Amazon, 这是一个相当物理的实体. 发生的是Docker卷 /app/Dropbox 在亚马逊卷内 /app.

当您完成虚拟机时,Amazon卷不会自动销毁, 所以里面的东西会被保存下来, 直到您明确销毁卷. Más aún, 您放入Docker卷的任何内容都存储在容器之外, 所以当容器被破坏时,它不会被破坏. 如果你启用了Dropbox, como lo recomendé, 你所有的内容都被复制到Dropbox服务器和你的硬盘上, 如果你将Dropbox与你的电脑同步. 还建议将源代码存储在版本控制系统中.

Así que, 如果你把你的东西放在Dropbox文件夹下的版本控制系统中, 要失去你的数据,必须经历以下一切:

  • 具体地删除虚拟机.
  • 具体地从虚拟机中删除数据卷.
  • 特别删除Dropbox数据,包括历史记录.
  • 具体地从版本控制系统中删除.

我希望你的数据得到充分保护.

我为每个项目维护一个虚拟机, y cuando termino, 我关闭未使用的虚拟机. 当然,我所有的代码都在GitHub上,并保存在Dropbox中. También, 当我停止做一个项目时, 在完全删除虚拟机之前,我拍了一张亚马逊Web服务块的照片. De esta manera, 当你回到一个项目时, por ejemplo, para mantenimiento, 我所要做的就是使用块照片启动一个新的虚拟机. 我所有的数据都返回到你的网站,我可以继续我的工作.

Optimizar el acceso

Primero, 如果你可以在没有代理的情况下访问互联网, 您可以使用本地SSH和VNC客户端. 如果您需要将文件复制到虚拟机内外,直接SSH访问是很重要的. 然而,要共享文件,你应该考虑Dropbox作为一个更简单的选择.

VNC web访问是无价的,但有时它可能比本地客户端慢. 您可以使用端口5900访问虚拟机中的VNC服务器. 您必须特别打开它,因为它默认关闭. 我建议你只打开你的IP地址, 因为互联网上到处都是“机器人”,它们扫描互联网,寻找可以加入的服务, VNC通常是这些机器人的目标.

Conclusión

本文解释了如何充分利用现代云技术来实现有效的开发环境. 而云机器不能完全取代你的工作电脑或笔记本电脑, 当访问IDE很重要时,它足以做开发工作. En mi experiencia, 使用当前的互联网连接, 它的速度足够快,可以工作.

Al estar en la nube, 对服务器的访问和操作比本地的要快. 你可以增加(或减少)内存, iniciar otro ambiente, 创建一个图像等等. 当你在处理大数据项目时,你的手边有一个醒酒器, bueno, 您需要健壮的服务和大量的空间. 这就是云所提供的.

就这个问题咨询作者或专家.
Schedule a call
米歇尔·夏芭拉的简介
Michele Sciabarra

Located in 圣贝内代托德尔特隆托,意大利阿斯科利皮塞诺省

Member since January 8, 2016

About the author

Michele是一名拥有超过20年经验的系统架构师. 他是一个多语言开发人员,但他的专长是Scala和DevOps.

Toptal作者是各自领域的专家,并就其所展示经验的主题撰写文章. 我们所有的内容都由同一领域的顶级专家同行评审和验证.

Previously At

DigitalOcean

世界级的文章,每周交付.

订阅意味着同意我们的 privacy policy

世界级的文章,每周交付.

订阅意味着同意我们的 privacy policy

Toptal Developers

Join the Toptal® community.