如何在 Amazon 的 EC2 上运行 Java 服务器?

Posted

技术标签:

【中文标题】如何在 Amazon 的 EC2 上运行 Java 服务器?【英文标题】:How to run a Java server on Amazon's EC2? 【发布时间】:2011-06-19 13:26:44 【问题描述】:

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

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

任何帮助将不胜感激。

【问题讨论】:

假设 EC2 实例是一个真实的服务器,因为这正是您与之交互的方式。当您学习上传文件、编译并运行它们时,不要搜索“如何在 EC2 上编译”——您从 EC2 租用“服务器”这一事实无关紧要。 我所指的服务器只是一个应用程序,它侦听端口上的传入连接,并产生一个执行某些工作的线程(所以我不确定 Tomcat 的位置) .另外,我不确定客户端如何通过套接字进行连接:您需要一个 IP 地址和一个端口,那么您是否像在本地计算机上的 VM 上一样获得 AMI 的 IP 地址?请原谅我的无知。顺便说一句,谢谢您的回答! 当您在 Amazon 创建实例时,您会在云中获得服务器的 IP 地址。您使用该 IP 登录框进行管理 【参考方案1】:

我认为开始是使用一个完整的单元打包到一个档案中。

在您编译 Java 文件时想一想,嵌入式 http 服务器说 tomcat。现在所有这些都打包在一个 jar 中,准备在Amazon's EC2 上部署。使用this链接了解更多关于嵌入式服务器和相关代码的信息。

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

现在您已准备好开始和使用应用程序。现在是在 Amazon AMI 上部署的时候了

执行以下步骤在 Amazon EC2 上部署您的应用程序:

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

如果一切配置正确,您将使用 EC2 实例的 public DNSpublic IP 访问应用程序,其格式为:http://<public_dns_address>:<port number>/servlet

希望它可以帮助您入门并为您提供整体视图。

【讨论】:

【参考方案2】:

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

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

    我成功地解决了同样的问题。相信我,你可以做到。您所需要的只是服务器服务的接口,例如 MySQL(使用 WorkBench 使用密钥对进行连接)、终端访问(通过 MAC 使用 PUTTY/SSH),一切顺利

【讨论】:

【参考方案3】:

如果您可以使用 Tomcat 作为您的服务器 - 您可能想尝试 Amazon Web Services Elastic Beanstalk 它提供一个简单的 Tomcat 实例来部署,从而大大简化您的任务。

编辑:AWS 在此处提供了有关如何使用 Java 进行开发的完整部分:http://aws.amazon.com/java/

【讨论】:

【参考方案4】:

看看使用Amazon Elastic Beanstalk。 Beanstalk 是亚马逊的 PaaS 产品,它将减轻很多系统管理负担。以下是他们文档中的简要说明:

AWS Elastic Beanstalk 是一个偶数 更简单的方式让您快速部署 和管理 AWS 中的应用程序 云。您只需上传您的 应用程序和 Elastic Beanstalk 自动处理部署 容量配置、负载的详细信息 平衡、自动缩放和 应用程序运行状况监控。

另外,如果您对使用 MySQL 感兴趣,那么您应该查看Amazon RDS。同样,这将减轻数据库层的系统管理负担。以下是他们文档中的简要说明:

亚马逊关系数据库服务 (Amazon RDS) 是一种 Web 服务, 易于设置、操作和 在 云。它提供了具有成本效益和 可调整容量,同时管理 耗时的数据库管理 任务,让您可以专注于自己的 应用程序和业务。

【讨论】:

Cloudcat 也可用,它提供在 EC2 上运行的 Tomcat 和 MySQL 预配置,并带有一个受支持的管理控制台,用于上传、部署应用程序和监控您的实例。【参考方案5】:

这很容易做到吗?我想我可以 一个 AMI,...

我认为答案取决于您对系统管理的熟悉程度。创建要在 EC2 中运行的 AMI 实际上与创建物理服务器或 VM 映像几乎相同。您需要安装操作系统,然后安装所需的工具、库和程序(如 mysql、jdk、ssh 等)。

您可以使用 Amazon 的一个预构建 AMI 的http://aws.amazon.com/amis/ 为自己节省一点工作量。但是,最终,您将负责服务器的所有系统管理。如果您从未从头开始构建服务器,那么您将面临相当大的学习曲线。这不是不可逾越的,但请注意,魔鬼在细节中;你需要学习很多东西;-)

...但我不确定如何上传 Java 文件,编译并运行它们,...

一旦服务器在 EC2 中设置并运行,编译它们并运行 java 文件就与在本地编译和运行一样。通常,您可能希望将您的 java 应用程序编译并打包到 jar 或 war 中,然后将其传输到您的 EC2 服务器。如果您在 EC2 服务器上安装 linux 操作系统,您可以使用 scp 或 FTP 客户端通过 sftp 传输文件,从而将文件从本地移动到服务器。最新文件在您的服务器上启动后,您可以 ssh 到服务器并启动您的应用程序。

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

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

sudo aptitude install mysql

同样,这里将有更多特定于 mysql 数据库的系统管理员类型的东西要学习。

所以,这绝对是可行的。经验丰富的系统管理员可以非常轻松/快速地构建 AMI 实例。如果这是您第一次体验系统管理,我建议您找一个旧桌面并尝试安装 Ubuntu 以及您需要的所有必需的库和工具(mysql、jdk、ssh 等)。让您的 java 程序在旧桌面上运行,然后从中创建 AMI 应该很容易。然后您可以在 EC2 上运行您的自定义 AMI,并将进行设置。

如果您周围没有备用桌面,您可以使用 VMWare Player 或 Sun 的 VirtualBox 等虚拟机产品之一,并在其中一个上构建服务器实例。

如果您想避免管理整个操作系统安装的麻烦,您可能希望查看像 slicehost 和/或 linode 这样的服务,而不是 EC2。它们使您可以通过 ssh 访问预安装的服务器。而且安装mysql等程序就像点击按钮一样简单。

希望这个答案是相关且有用的,祝你好运。 - 戴夫

【讨论】:

所以,我想我可以创建一个包含所有软件的 AMI: - Java:没问题 - MySQL:不确定,应该可以通过终端远程执行此操作。 - 我的 Java 代码(即我的服务器进程),以及服务器进程用来访问数据库的 Database Wrapper Java 类(一个数据库,可能有多个服务器进程访问它)。 非常酷。是的,绝对可以通过终端远程安装和配置mysql。您从哪个 AMI 开始(哪个操作系统)? 感谢您的回答,戴夫。不确定是什么操作系统,可能是Linux。认为我们将需要一个带有 Java 服务器和数据库的 AMI,并将此 AMI 复制两次以实现容错。两个服务器进程将形成一个进程组,消息将从客户端(android 手机)通过 3G 多播到该组。在这个阶段有点毛骨悚然,但它就是那样 - 复杂!【参考方案6】:

您对远程管理服务器和解决大多数人从未听说过的问题感到满意吗?这就是你所说的。

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

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

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

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

【讨论】:

以上是关于如何在 Amazon 的 EC2 上运行 Java 服务器?的主要内容,如果未能解决你的问题,请参考以下文章