如何在亚马逊的EC2上运行Java服务器?

问题描述:

我想在云上放置一个用Java编写的服务器程序。它将接受来自客户端的TCP套接字连接(客户端是使用3G的Android手机),做一些计算,将内容保存到MySQL数据库(也在EC2上),并通过TCP连接将内容发送回客户端。甚至可能需要创建服务器的多个实例(即进程组)。如何在亚马逊的EC2上运行Java服务器?

这很容易吗?我想我可以做一个AMI,但我不知道如何上传Java文件,编译和运行它们,并创建一个MySQL数据库等

任何帮助将不胜感激。

+1

假装EC2实例是一个真正的服务器,因为这正是你如何与它交互。当你学习上传文件,编译它们并运行它们时,不要搜索“如何在EC2上编译” - 事实上你从EC2租用你的'服务器'是无关紧要的。 – 2011-02-01 22:45:06

+1

我引用的服务器只是一个应用程序,用于监听端口上的传入连接,并生成一个可以执行一些工作的线程(所以我不确定Tomcat进入方程式的位置)。另外,我不确定客户端如何通过套接字进行连接:您需要一个IP地址和一个端口,那么您是否可以像获得本地计算机上的虚拟机一样获得AMI的IP地址?请原谅我的无知。顺便谢谢你的答案! – foxy 2011-02-01 22:53:20

+0

在亚马逊创建实例时,您会在云中获取服务器的IP地址。您使用该IP登录到该框来管理 – Speck 2011-02-01 22:57:27

远程管理服务器和解决大多数人从未听说过的问题,您感觉如何?这就是你在说的。

您将创建EC2实例,登录并配置它,就像您使用的任何其他服务器一样。您可以下载JDK,dbs等。您可以考虑使用厨师之类的工具来帮助您。您将使用ftp和scp将文件复制到服务器。

你可能会希望你的Java服务器在一个盒子上,并让它与单独的数据库服务器通信,因为你说你可能需要多个服务器。

一旦服务器按照您喜欢的方式工作,您可以创建一个映像用于启动多个实例,然后配置负载平衡器以指向您的服务器。

如果您可以在本地机器上创建MySql数据库,则可以在云中创建它。如果不是这样?...

这很容易吗?我想我可以让 成为一个AMI,...

我认为答案取决于您对系统管理的整体舒适程度。创建AMI以在EC2中运行与创建物理服务器或VM镜像非常相似。您需要安装操作系统,然后安装所需的工具,库和程序(如mysql,jdk,ssh等)。

您可以使用亚马逊预制AMI的http://aws.amazon.com/amis/之一为自己节省一点工作。但最终,您将负责服务器的所有系统管理。如果你从来没有从头开始构建服务器,那么在你面前有一个相当大的学习曲线。这不是无法克服的,但只是被警告,魔鬼在细节中;有一吨的东西,你需要学习;-)

...但我不知道如何上传的Java 文件,编译并运行它们,...

一旦服务器在EC2中安装并运行,编译它们并运行java文件与在本地进行编译和运行相同。通常情况下,您可能想要将java应用程序编译并打包成jar或war文件,然后将其传输到EC2服务器。如果您在您的EC2服务器上安装linux os,则可以使用scp或FTP客户端通过sftp传输文件,以将文件从本地移动到服务器。一旦最新的文件在您的服务器上,您可以SSH服务器,并启动您的应用程序。

...并创建一个MySQL数据库等...

安装mysql将特定于您选择安装在您的服务器上的操作系统。例如,你可以用以下命令mysql的容易安装在Ubuntu:

sudo aptitude install mysql 

再次,将有更多的系统管理型的东西在这里学到具体到MySQL数据库。

所以,这绝对是可行的。有经验的系统管理员可以非常容易/快速地构建AMI实例。如果这是你与系统管理第一次的经验,我建议找你已经躺在附近的老台式机和尝试安装Ubuntu和所有需要的库,你需要的工具(MySQL和JDK,SSH等。)。让您的Java程序在旧桌面上工作,然后从中创建AMI应该很容易。然后,您可以在EC2上运行您的自定义AMI并进行设置。

如果你没有一个备用桌面躺在附近,你可以使用虚拟机的产品,例如像VMWare Player或Sun的VirtualBox的之一,并在其中的一个建立一个服务器实例。

如果你想避免管理整个安装操作系统的麻烦,你可能想看看像slicehost和/或替代的Linode的EC2服务。他们给你ssh访问预安装的服务器。而且它的点击一个按钮来安装程序,如MySQL等

希望这个答案是相关的,有用的,运气好那么简单。 - 戴夫

+0

因此,我认为我可以创建一个带有所有软件的AMI: - Java:没问题 - MySQL:不确定,应该可以通过终端执行此操作远程。 - 我的Java代码(即我的服务器进程)以及服务器进程用来访问数据库(一个数据库,可能是多个访问它的服务器进程)的数据库包装器Java类。 – foxy 2011-02-01 22:48:48

如果您可以使用Tomcat作为您的服务器 - 您可能想尝试Amazon Web Services Elastic Beanstalk这将通过提供易于部署的Tomcat实例来大大简化您的任务。

编辑:AWS提供了关于如何在这里使用Java来开发一个完整的部分:http://aws.amazon.com/java/

看看使用Amazon Elastic Beanstalk。 Beanstalk是亚马逊的PaaS产品,它将缓解很多系统管理负担。下面是从他们的文档的简短描述:

AWS弹性魔豆是一个更容易 的方式为您快速部署 并在AWS云 管理应用程序。您只需上传 应用程序,Elastic Beanstalk 会自动处理容量配置,加载 平衡,自动缩放和 应用程序运行状况监视的部署 。

此外,如果你有兴趣使用MySQL,那么你应该看看Amazon RDS。同样,这将减轻数据库层的系统管理负担。下面是从他们的文档的简短描述:

亚马逊关系数据库服务 (亚马逊RDS)是一种Web服务, 使得它易于设置,操作和 规模在 云关系数据库。它提供了具有成本效益和 可调整大小的能力,同时管理 耗时的数据库管理任务 ,释放您专注于您的 应用和业务。

  1. 运行应用程序需要的应用程序。 s/w来运行它们。

  2. Cyber​​ Duck等应用程序有助于通过SFTP上传文件。

  3. 我成功地解决了同样的问题。相信我,你可以做到。所有u需要的是服务器的服务接口,如MySQL(使用工作台使用密钥对进行连接),终端接入(通过MAC使用腻子/ SSH)和好,你是好去

我觉得上手是使用整个单元打包成一个档案。

想象一下,当你有你的Java文件编译,嵌入式http服务器说tomcat。现在所有这些都装在一个罐子里准备好部署在Amazon's EC2上。有关嵌入式服务器和相关代码的更多信息,请使用this链接。

就数据库而言,您可以使用亚马逊的RDS。您可以在RDS上配置mysql并获取连接到它的链接。 Amazon RDS将帮助您开始使用数据库。

现在您已准备好开始使用应用程序。现在是部署在Amazon AMI

执行以下步骤来在Amazon EC2上的应用程序部署你的时间:

  1. 建立在Amazon EC2服务器实例参考EC2 getting started
  2. 接收私钥文件,即.pem(从步骤1接收),该文件将帮助您登录到服务器实例并执行SFTP。
  3. 使用Putty或类似SSH client登录到您在步骤1上创建的EC2服务器实例,使用.pem文件和服务器的公共DNS,请参阅Accessing Instance以进行SSH登录。
  4. 使用SFTP客户端将打包成jar的归档文件传输到服务器,WinnSCP就是这样一个客户端,请参考SFTP了解更多信息。
  5. 运行应用程序。注意在jar文件的情况下,你可以简单地启动java -jar TomcatApp.jar

如果一切配置正确,你会用来访问应用程序的EC2实例的public DNSpublic IP,这将是这样的形式:
http://<public_dns_address>:<port number>/servlet

希望它可以帮助你上手并为您提供一个总体看法。