如何在云中打造一个免费的Gemstone服务器
发布日期:2016-7-27 10:7:33
Amazon提供的一个免费一年的微型实例产品,引起了云计算企业如GOOGLE、阿里云等的广泛注意,所以,今天就来说一下: 为帮助AWS(Amazon Web Services)的新客户在云中入门,AWS引入了一个全新的,可免费使用的等级。从11月1日开始,新的AWS客户可免费使用Amazon EC2 Micro Instance一年...... 但要在Gemstone中运行一个Seaside应用程序,一个微型的实例已足够了吗?答案是:YES。事实上,我已试着创建了一个已经配置好的Gemstone EC2 Linux AMI (Amazon Machine Image)。在本文中,我将会为您讲述怎样使用这个已配置好的映像把Seaside应用程序快速而免费地部署到EC2(Elastic Compute Cloud)上。 注意:这些说明都是基于从一个MacOS客户端连接到一个Amazon EC2实例的;对其他Unix客户端来说,这些说明也同样适用。对一个Windows客户端来说,你可能需要下载: PuTTY Cygwin 并相应地修改这些说明。 1、创建一个EC2实例 首先到http://aws.amazon.com注册。登陆以后你就可导航到下面这个界面了,如图1所示: 图1 (1)在“Region”组合框上下拉,选择离你最近的区域。 (2)点击“Launch Instance”按钮来打开Request Instance Wizard 选择“Community AMI”标签,然后在搜索框中输入“ami-7f9bae0b”,这是已配置好的Gemstone/Seaside实例的AMI(Amazon Machine Image) ID。在以前的一篇博文中,我已记录下这个映像的配置过程了,关于这篇博文,可参考本文前面给出的链接。 注意:在记录下这个截屏以后,我才认识到,“ami-7f9bae0b”只能用于“EU-WEST”区域,Amazon没有直接把它拷贝到其他区域。在接下来的几天里,我会试着让它可以在“US”区域中使用的,在此之前,只有把你的区域设置成“EU-WEST”,你才可以找到这个AMI。如图2所示: 图2 若你想使用Amazon提供的这个免费产品,可以选择“Micro”。Amazon对微型实例的描述,如图3所示: 这个系列的实例可以持续不断地给你提供少量的CPU资源,当其他周期可用的时候,你也可以增加CPU资源。它们比较适合那些低吞吐量的应用程序,以及那些周期性地消耗掉计算周期的Web站点。 图3 接下来,我们给这个EC2实例输入一个RSA公钥,让它支持SSH访问。密钥是使用“ssh-keygen”命令生成的: $ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/Users/nickager/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /Users/nickager/.ssh/id_rsa. Your public key has been saved in /Users/nickager/.ssh/id_rsa.pub. 然后,使用“~/.ssh/id_rsa.pub”命令提取出你的公钥,用下面这种格式,把它输入到到这个实例的“User Data”域中 #cloud-config ssh_authorized_keys: - ssh-rsa AAAAB3NzaC1y........ disable_ec2_metadata: true 格式:CloudInit(syntax),如图4所示 图4 不需要输入任何键/值对,如图5所示 图5 由于我们在上面那个步骤中,已经把一个SSH密钥输入到“User Data”域中了,因此无需再指定一个密钥对了,如图6所示: 图6 对防火墙进行配置,打开22端口(SSH)与80端口(HTTP),如图7所示: 图7 最后,点击“Launch”按钮,等待这个实例启动,如图8所示: 图8 如果这个实例启动了,把这个实例的URL(Public DNS)拷贝下来,如图9所示: 图9 把你的浏览器指向你的服务器的公用的DNS地址(例如:http://ec2-46-51-165-46.eu-west-1.compute.amazonaws.com),然后,你应该可以看到熟悉的Seaside欢迎屏,如图10所示: 图10 恭喜你!你已经让属于你自己的,免费的Seaside服务器运行在Amazon EC2中了。 2、关于配置 你应该已发现这个问题了,虽然计数器,任务与“create a component”样例都和预期的一样,在正常地运作,但“/browse”命令, “/config”命令与指向JQuery样例的链接却返回403错误(unauthorised)和404错误(not found)。此外,底部的Seaside工具栏也消失了。这样设计主要是为让这个环境更加安全——你的实例现在依赖于互联网了。下面几个小节将会为您讲述怎样把你自己的代码载入到你的远程实例中,以及如何访问“/config”。 不止是一个欢迎屏,通过“/pier”命令,你还可以使用默认安装的Pier(关于Pier,具体可以参考:http://www.piercms.com/)。Pier是一个构建在Seaside之上的,强大而灵活的内容管理系统,因为它支持Blog,所以它是这种站点的理想选择。 3、访问“/config”命令 使用上面提到的那个公用的DNS地址,使用用户“seasideuser”ssh到新创建的实例: ssh -L 8888:127.0.0.1:80 seasideuser@ec2-46-51-165-46.eu-west-1.compute.amazonaws.com 你应该会看到一些类似于这样的东西: $ ssh -L 8888:127.0.0.1:80 seasideuser@ec2-46-51-165-46.eu-west-1.compute.amazonaws.com The authenticity of host 'ec2-46-51-165-46.eu-west-1.compute.amazonaws.com (79.125.98.212)' can't be established. RSA key fingerprint is de:96:12:b7:d0:9e:63:69:37:5a:4b:08:20:68:45:b6. Are you sure you want to continue connecting (yes/no)?yes Warning: Permanently added 'ec2-46-51-165-46.eu-west-1.compute.amazonaws.com,79.125.74.150' (RSA) to the list of known hosts. Last login: Wed Dec 29 18:25:11 2010 from 93-96-148-251.zone4.bethere.co.uk __| __|_ ) Amazon Linux AMI _| ( / Beta ___|___|\___| See /etc/image-release-notes for latest release notes. :-) [seasideuser@ip-10-234-159-73 ~]$ 现在,你应该可浏览“http://localhost:8888/config”,访问相应的配置了。参数“-L 8888:127.0.0.1:80”表示服务端的localhost上的数据应该传送到客户端的localhost:8888上,同时,Web服务器会被配置成只能通过localhost来访问“/config”命令。 还有一个日志界面,也被配置成只能通过localhost来访问;浏览/tools/objectlog(用户名: admin, 密码: tool)可访问这个界面。 4、把你自己的代码载入到你的Gemstone实例中 如果你已经登录到你的远程实例了,那么先“exit”这个实例,然后用下面的命令行ssh回来: $ ssh -X -C seasideuser@ec2-46-51-165-46.eu-west-1.compute.amazonaws.com 这应该会产生一些类似于这样的东西: $ ssh -X -C seasideuser@ec2-46-51-165-46.eu-west-1.compute.amazonaws.com Warning: untrusted X11 forwarding setup failed: xauth key data not generated Warning: No xauth data; using fake authentication data for X11 forwarding. __| __|_ ) Amazon Linux AMI _| ( / Beta ___|___|\___| See /etc/image-release-notes for latest release notes. :-) [seasideuser@ip-10-234-159-73 ~]$ “-x”参数支持X11传送,“-C”压缩。这可以让你在你的远程实例上打开GemTools,但是那个窗口会传送(X11)到你本地计算机的显示屏上。 GemTools是一个Pharo环境,它可以让你连接到Gemstone,载入和修改代码,以及通过一个GUI环境来执行一些管理操作(例如启动和关闭服务器,备份和恢复数据库等等)。 启动Gemtools: $ ~/gemtools.sh 然后,按“Login”按钮连接到运行在你的实例中的Gemstone服务器,如图11所示: 图11 你现在应该已登录到你的Gemstone服务器了,如图12所示: 图12 现在,你可使用Monticello把你的代码载入到你的远程实例中。点击“Tools”按钮,然后选择“Monticello”。添加包含你的代码的代码库,然后正常载入。你还可使用Metacello 和 Gofer来载入代码。 5、使用GemTools 尽管当GemTools运程运行在你的实例中的时候,在GemTools中,你也能够高效率地完成一些工作,但你可能会发现,使用VMWare GLASS virtual appliance,或把Gemstone安装到你的本地机器上,在一个Pharo映像中完成这些工作,效率会更高一些。 若你是通过一个MacOS客户端来连接的,那么你可能会发现映射Ctrl与CMD键是很有帮助的,具体可以参考: 《MacOS And X11》 6、有待改进 1、我尚未配置任何监控软件 2、如果他们崩溃了,没有办法重新启动Gems 3、没有提供数据库备份机制。 4、我还没有配置邮件服务器。 《Glass Daemon Tools》这篇文档详细地讲述实现其中一些改进的方法。 为了改进你自己的配置,你可以使用这个配置作为基础,然后,在社区中分享你自己的配置。创建和分享一个经过修改的配置都是十分简单的。 7、让你的实例更加安全 有很多种方法可以让你的实例更加安全,这是其中的三种方法(注意:这并不是一个完整的列表): a.让你的系统软件处于最新状态 b.要求提供一个sudo密码 c.改变SSH的端口 (1)让你的系统软件处于最新状态 定期地运行: sudo yum update (2)要求提供一个sudo密码 首先,你必须为seasideuser设置一个密码: $ passwd Changing password for user seasideuser. New password: 然后编辑/etc/sudoers: sudo vim /etc/sudoers 把这一行: seasideuser ALL = NOPASSWD: ALL 改成: seasideuser ALL = (ALL) ALL 现在,当你执行使用sudo的命令的时候,你必须要提供一个密码。 (3)改变SSH的端口 默认的SSH端口是22端口,许多人都会攻击这个端口。这就是说,ssh到这个实例的唯一方法是使用RSA密钥。此外,root访问也应该禁用(这是一种常见的攻击方法)。但是,如果你想更谨慎一些,你可以改变SSH的端口(但是,我怀疑这种方法提供的保护对确定性的攻击是无效的)。 首先,你应该在你的防火墙上打开新的端口。从“Amazon AWS EC2”标签中选择“Security Groups”,然后选择和你的实例相关的安全组。添加新的端口。 接下来编辑/etc/ssh/sshd_config sudo vim /etc/ssh/sshd_config 然后把这一行: Port 22 改成你的新端口,比如说20001: Port 20001 重新启动ssh daemon: sudo /etc/init.d/sshd restart 接下来“exit”你的实例,然后使用你的新端口来登录: ssh -p 20001 seasideuser@ec2-46-51-165-46.eu-west-1.compute.amazonaws.com 最后,你可以重新编辑你的防火墙,移除对22端口的访问。 8、补充资料 这个实例的配置已经记录到以前的一篇博文中了: 《Installing Gemstone on an Amazon EC2 Linux instance》:Installing Gemstone on an Amazon EC2 Linux instance 此外,还有很多和Gemstone有关的优秀资料: * Glass wiki * Gemstone manuals * James Foster's blog * Dale Henrick's blog GLASS邮件列表也有很大的参考价值。 下一条: 云计算背后的秘密-RPC框架
|