如何在 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 DNS
或 public 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 服务器?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 JMX 连接到在 EC2 上运行的 Java 实例
如何在 Amazon EC2 上部署 Java webapp,以便您可以有效地使用自动缩放?