作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
米歇尔Sciabarra的头像

米歇尔Sciabarra

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

以前在

DigitalOcean
Share

为什么你可能需要它?

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

使用云来保存工作有很多明显的原因. Today, 与传统的桌面商务应用程序相比, 有些web应用程序在功能上没有明显的缺点. 只要有网络浏览器,内容就可以在任何地方获得,而现在,几乎无处不在. 协作和共享更容易,丢失文件的可能性也更小.

不幸的是, 这些云优势在软件开发领域并不像在业务应用程序领域那样普遍. 有一些尝试提供在线IDE,但它们与传统IDE相去甚远.

That is a paradox; while we are still bound to our desktop for daily coding, 该软件现在在多个服务器上运行. 开发人员需要处理他们无法在计算机上保存的东西. Indeed, laptops are no longer increasing their processing power; having more than 16GB of RAM on a laptop is rare and expensive, 还有更新的设备, tablets, 例如, 更少.

However, 即使它还不可能取代传统的桌面应用程序进行软件开发, 这是可能的 将整个开发桌面移动到云中. 那天我意识到,我不再需要把所有的软件都放在笔记本电脑上, 并注意到web版本的终端和VNC的可用性, 我把所有东西都移到了云端. 最后,我开发了一个构建工具包,用于以自动化的方式创建该环境.

云中的开发人员

对于开发人员来说,云意味着什么? 当然是在其中发展!

在本文中,我提供了一组脚本,用于构建基于云的开发环境 Scala 以及大数据应用, 在Amazon AWS上与Docker一起运行, 并包括一个可访问web的桌面与IntelliJ IDE, Spark, Hadoop和齐柏林作为服务, 还有命令行工具,比如基于web的SSH, SBT和亚扪石. 该工具包免费提供 GitHub,我在这里描述使用它来构建实例的过程. 您可以构建您的环境并根据您的特定需求对其进行定制. 你不应该花超过10分钟的时间来启动和运行它.

什么是在“BigDataDevKit”?

我开发工具包的主要目标是我的开发环境应该是我可以简单启动的, 我使用的所有服务和服务器, 然后在不再需要的时候销毁它们. 当你在不同的项目中工作时,这一点尤其重要, 其中一些涉及大量的服务器和服务, 当你从事大数据项目时.

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

  • 包括所有常用的开发工具,最重要的是一个图形化IDE.
  • 我需要的服务器和服务是否唾手可得.
  • 从零开始轻松快速地创建,并可扩展以添加更多服务.
  • 仅使用web浏览器即可完全访问.
  • 可选地,允许使用专门的客户机(VNC客户机和SSH客户机)进行访问.

利用现代云基础设施和软件, 现代浏览器的威力, 宽带的广泛使用, 还有无价的多克, 我为Scala创建了一个开发环境 大数据发展 为了更好,它取代了我的开发笔记本电脑.

Currently, 我可以随时工作, 要么是MacBook Pro, Surface平板电脑, 甚至是iPad(带键盘), 尽管最后一个选择并不理想. All these devices are merely clients; the desktop and all the servers are in the cloud.

Docker和Amazon AWS!

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

  • 用于服务器的亚马逊网络服务.
  • GitHub用于存储代码.
  • Dropbox可以保存文件.

我也使用一些免费服务,比如 DuckDns 的动态IP地址和 让我们加密 获取免费的SSL证书.

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

  • 一个图形桌面与Intellij的想法,可通过网络浏览器访问.
  • Web可访问的命令行工具,如SBT和菊石.
  • 用于存储文件和运行MapReduce作业的Hadoop.
  • 用于定时作业的Spark Job Server.
  • 齐柏林飞艇是一款基于网络的笔记本.

最重要的是, web访问使用HTTPS完全加密, 用于基于web的VNC和SSH, 而且有多种保护措施可以避免数据丢失, 一个问题是, of course, 当您不“拥有”物理硬盘上的内容时,这一点很重要. 请注意,在计算机上获得所有工作的副本是自动的,而且非常快. 如果你失去了一切,因为有人偷了你的密码, 反正你电脑里也有一份, 只要您正确配置了所有内容.

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

现在,让我们开始描述环境是如何工作的. 当我早上开始工作的时候, 第一件事是登录到亚马逊网络服务控制台,在那里我可以看到所有实例. Usually, 我为不同的项目配置了许多开发实例, 我把没用的关掉,以节省账单. 毕竟,我一次只能做一个项目. (嗯,有时候我用两个.)

Screen 1

我选择我想要的实例,启动它,等一会儿,或者去喝杯咖啡. 这和打开你的电脑没什么不同. 启动并运行实例通常需要几秒钟的时间. 看到绿色图标后,我打开浏览器,进入一个众所周知的URL: http://msciab.duckdns.org/vnc.html. Note, this is my URL; when you create a kit, you will create your unique URL.

因为AWS在启动时为每台机器分配一个新的IP, 我配置了动态DNS服务, 因此,您可以始终使用相同的URL访问您的服务器, 即使你停止并重新启动它. 你甚至可以在浏览器中收藏它. 此外, 我使用HTTPS, 与有效的密钥,以获得我的工作从嗅探器的全面保护, 以防我需要管理密码和其他敏感数据.

Screen 2

加载后,系统将用Web VNC Web客户端NoVNC欢迎您. 只需登录,桌面就会出现. 我使用的是最小桌面, 故意, 只是一个带有应用程序的菜单, 我唯一的奢侈是虚拟桌面(因为我在开发时打开了很多窗口). 对于邮件,我仍然依赖其他应用程序,现在主要是其他浏览器选项卡.

在虚拟机上,我有开发大数据应用所需要的东西. 首先,有一个IDE. 在构建中,我使用了IntelliJ Idea社区版. 此外,还有一个SBT构建工具和一个Scala REPL, Ammonite.

Screen 3

此环境的主要特性, however, 服务是否作为容器部署在同一虚拟机中. 特别是,我有:

  • Zeppelin,用于动态使用Scala代码和进行数据分析的web笔记本(http://zeppelin:8080)
  • Spark作业服务器,通过Rest接口执行和部署Spark作业(http://sparkjobserver:8080).
  • 用于存储和检索HDFS数据的Hadoop实例(http://hadoop:50070).

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

Screen 4

每个服务运行在单独的Docker容器中. 不要太专业, 您可以将其视为虚拟机中的三个独立服务器. 使用Docker的美妙之处在于你可以添加服务,甚至可以添加两个或三个虚拟机. 使用Amazon容器,您可以轻松地扩展环境.

最后,但并非最不重要的是,您有一个可用的web终端. 只需使用HTTPS访问您的URL,您将在网页中欢迎终端.

Screen 5

在上面的截图中,你可以看到我列出了容器, 三个服务器加上桌面是哪一个. 这个命令行shell允许您访问包含容器的虚拟机, 允许你管理它们. 就好像您的服务器“在矩阵中”(在容器中虚拟化), 但是这个外壳可以让你逃离“矩阵”来管理服务器, 和桌面. From here, 您可以重新启动容器, 访问它们的文件系统并执行Docker允许的其他操作. 我不会在这里详细讨论Docker,但是有大量的文档 码头工人的网站.

如何设置实例

到目前为止你喜欢这个吗,你想要你的实例吗? 它既简单又便宜. 您只需支付亚马逊网络服务上虚拟机的费用,再加上存储空间,就可以获得它. 当前配置的工具包需要4GB的RAM才能使所有服务运行. 如果您很小心,只在需要时使用虚拟机, 你工作, say, 每月160小时, 按当前价格计算,一台虚拟机将花费160 x 0美元.052美元,即每月8美元. 你必须加上存储成本. 我大约用30GB,但所有东西加起来都可以控制在10美元以下.

However, 这并不包括Dropbox (Pro)账户的费用, 您是否需要备份超过2GB的代码. 这需要每月额外支付15美元,但它为您的数据提供了重要的安全性. Also, 您将需要一个私有存储库, 付费GitHub或其他服务, 比如Bitbucket, 哪个提供免费的私有存储库.

我想强调的是,如果您只在需要时使用它,它比专用服务器便宜. Yes, 这里提到的所有内容都可以在物理服务器上进行设置, 但因为我的工作是处理大数据,所以我需要很多其他的AWS服务, 所以我认为把所有东西都放在同一个地方是合乎逻辑的.

我们来看看怎么做整个过程.

先决条件

在开始构建虚拟机之前,您需要注册以下四个服务:

你唯一需要信用卡的是亚马逊网络服务. DuckDns是完全免费的, 而DropBox则提供2GB的免费存储空间, 哪一种可以胜任许多任务. Let 's Encrypt也是免费的, 并且在构建映像以签署证书时在内部使用它. 除了这些, 我也建议使用存储库托管服务, 比如GitHub或Bitbucket, 如果您想存储代码, however, 它不是安装所必需的.

首先,导航到 GitHub BigDataDevKit仓库.

Screen 6

滚动页面并将图像中显示的脚本复制到您选择的文本编辑器中:

Screen 7

该脚本用于引导映像. 您必须更改它并为参数提供一些值. 注意,更改引号内的文本. 注意,不能使用引号本身这样的字符, 密码中的反斜杠或美元符号, 除非你 quote them. 此问题仅与密码相关. 如果您想要安全起见,请避免使用引号、美元符号或反斜杠.

The PASSWORD 参数是您选择通过web界面访问虚拟机的密码. The EMAIL 参数是您的电子邮件,并将在您注册SSL证书时使用. 您将被要求提供您的电子邮件, 它是从Let 's Encrypt获得免费SSL证书的唯一要求.

得到的值 TOKEN and HOST,进入DuckDNS网站并登录. 您需要选择一个未使用的主机名.

Screen 8

查看映像,查看必须复制令牌的位置以及必须添加主机名的位置. 你必须点击“添加域名”按钮来保留主机名.

配置实例

假设您拥有所有参数并编辑了脚本, 现在可以启动实例了. 登录亚马逊网络服务管理界面, 转到EC2实例面板,点击“启动实例”.

Screen 9

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

Screen 10

在第二个屏幕上,选择实例类型. 考虑到运行的软件的大小, 有多个服务,你至少需要4GB的内存, 所以我建议你选择 t2.medium instance. 你可以把它修剪一下,用 t2.small 如果你关闭了一些服务,甚至是 micro 如果你只想要桌面.

Screen 11

在第三个屏幕, 单击“高级详细信息”,粘贴在上一步中配置的脚本. 我还建议您启用防止终止的保护, 这样即使意外终止,你也不会失去所有的成果.

Screen 12

下一步是配置存储. 一个实例的默认大小是8GB,这不足以包含我们将要构建的所有映像. 我建议将其增加到20GB. 此外,虽然不需要,但我建议另一个至少10GB的块设备. 该脚本将把第二个块设备挂载为数据文件夹.您可以对其内容进行快照, 终止实例, 然后使用快照重新创建它并恢复所有工作. 此外, 当您终止实例时,自定义块设备不会丢失,因此具有防止意外丢失数据的双重保护. 为了进一步提高您的安全性,您可以使用Dropbox自动备份数据.

Screen 13

第五步是命名实例. 选择你自己的. 第六步提供了一种配置防火墙的方法. 默认情况下,只有SSH可用,但我们还需要HTTPS, 所以不要忘记添加一个打开HTTPS的规则. 你可以向全世界开放HTTPS, 但最好只连接到你的IP地址,以防止其他人访问你的桌面和shell, 尽管它仍然有密码保护.

完成最后一个配置后,就可以启动实例了. 您会注意到,由于初始化脚本正在运行,初始化第一次可能会花费相当多的时间,并且它还将执行一些冗长的任务,例如使用Let 's Encrypt生成HTTPS证书.

Screen 14

当您最终看到管理控制台“运行”并显示确认信息时, 它不再是初始化, 你可以走了.

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

Replace YOURHOST 使用您选择的主机名, 但别忘了这是一个HTTPS网站, not HTTP, 所以你和服务器的连接是加密的,所以你必须写 http// 在URL中. 该站点还将提供Let 's Encrypt的有效证书. 如果在获取证书方面有问题, 初始化脚本将生成一个自签名证书. 您仍然可以使用加密连接进行连接, 但是浏览器会警告你这是一个未知的网站, 而且网络连接也不安全. 这不应该发生,但你永远不知道.

屏幕上15

假设一切正常,然后访问web终端Butterfly. 您可以使用该用户登录 app 以及您在设置脚本中输入的密码.

登录后, 您有一个自引导的虚拟机, 它还包括Docker和其他好东西, 比如Nginx前端, Git, 以及蝴蝶网终端. 现在,您可以通过为开发环境构建Docker映像来完成设置.

接下来,输入以下命令:

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

最后一个命令还将要求您键入Desktop访问的密码. 完成后,它将开始构建映像. 注意,构建大约需要10分钟, 但你可以看到发生了什么,因为所有的东西都显示在屏幕上.

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

/app/.dropbox-dist / dropboxd

系统将显示一个链接,您必须点击才能启用Dropbox. 你需要登录Dropbox,然后你就完成了. 无论你把什么放在Dropbox文件夹中,它都会在你所有的Dropbox实例之间自动同步.

完成后,您可以重新启动虚拟机,并访问您的环境 http://YOURHOST.dyndns.org/vnc.html URL.

您可以停止您的机器,并在恢复工作时重新启动它. 访问URL保持不变. 这样,您只需按使用时间付费,再加上每月使用的存储空间.

保存您的资料

下面的讨论需要了解Docker和Amazon是如何工作的. 如果你不想了解细节, 请记住以下简单的规则:在虚拟机中, 有一个 /应用程序/ Dropbox 文件夹可用,无论你放在哪里 /应用程序/ Dropbox 是保存的,其他的东西都是一次性的,可以带走吗. 为了进一步提高安全性,还可以将宝贵的代码存储在版本控制系统中.

现在,如果你真的想理解这一点,请继续往下读. 如果你按照我的指示创建虚拟机, 保护虚拟机不被终止, 所以你不可能不小心破坏它. 如果您明确决定终止它,主卷将被销毁. 所有Docker映像都将丢失,包括您所做的所有更改.

但是,由于文件夹 /应用程序/ Dropbox 作为容器的Docker卷挂载,它不是Docker映像的一部分. 在虚拟机中,文件夹 /app 是否挂载在您创建的Amazon卷中, 即使您明确终止虚拟机,它也不会被销毁. 要移除音量,必须明确地移除它.

不要混淆Docker卷, 哪些是Docker逻辑实体, 使用Amazon卷, 哪个是某种物理实体. 发生的是 /应用程序/ Dropbox Docker卷放在 /app 亚马逊体积.

当您终止虚拟机时,不会自动销毁Amazon卷, 所以放进去的东西都会被保存下来, 直到你也明确地销毁了音量. 此外, 您放入Docker卷中的任何内容都存储在容器之外, 所以当容器被销毁时,它不会被销毁. 如果你启用了Dropbox, 推荐, 你所有的内容都被复制到Dropbox服务器上, 如果您将Dropbox与您的计算机同步,则将其存储到硬盘上。. 此外,建议将源代码存储在版本控制系统中.

So, 如果你把你的东西放在Dropbox文件夹下的版本控制系统里, 要丢失数据,所有这些都必须发生:

  • 您明确终止了虚拟机.
  • 明确地从虚拟机中移除数据卷.
  • 你明确地从Dropbox中删除数据,包括历史记录.
  • 您明确地从版本控制系统中删除数据.

我希望你的数据足够安全.

我为每个项目保留一个虚拟机, 当我结束的时候, 我一直关闭未使用的虚拟机. 当然,我在GitHub上有我所有的代码,并备份在Dropbox. 此外, 当我停止做一个项目时, 在完全删除虚拟机之前,我对亚马逊网络服务块进行了快照. This way, 每当项目恢复时, 比如维护, 我所需要做的就是使用快照启动一个新的虚拟机. 我所有的数据都恢复了,我可以继续工作了.

优化访问

First, 如果你能直接上网, 没有代理人的调解, 您可以使用本机SSH和VNC客户端. 如果需要在虚拟机内外复制文件,直接SSH访问非常重要. 然而,对于文件共享,你应该考虑将Dropbox作为一个更简单的选择.

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

结论

本文解释了如何利用现代云技术实现有效的开发环境. 虽然云中的机器不能完全替代您的工作计算机或笔记本电脑, 当需要访问IDE时,它足以用于开发工作. 根据我的经验,以目前的互联网连接,它已经足够快了.

在云中,服务器访问和操作比在本地更快. 您可以快速增加(或减少)内存, 启动另一个环境, 创建一个映像, and so on. 你有一个数据中心在你的指尖, 当你处理大数据项目时, well, 您需要健壮的服务和大量的空间. 这就是云所提供的.

就这一主题咨询作者或专家.
预约电话
米歇尔Sciabarra的头像
米歇尔Sciabarra

位于 圣贝内代托德尔特伦托,阿斯科利皮切诺省,意大利

成员自 2016年1月8日

作者简介

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

Toptal作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

以前在

DigitalOcean

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

Toptal开发者

加入总冠军® community.