只需10分钟 在云中打造一个免费的Gemstone服务器
只需10分钟 在云中打造一个免费的Gemstone服务器
原创
作者:编译/周雪峰 2011-01-21 10:30:46
云计算 要在Gemstone中运行一个Seaside应用程序,一个微型的实例已经足够了吗?答案是:YES。实际上,我已经试着创建了一个已经配置好的Gemstone EC2 Linux AMI (Amazon Machine Image)。在本文中,我将会为您讲述如何使用这个已经配置好的映像把Seaside应用程序快速而免费地部署到EC2(Elastic Compute Cloud)上。
Amazon提供的一个免费一年的微型实例产品,引起了我的注意:
为了帮助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)上。
(关于Gemstone EC2 Linux AMI的创建过程,可以参考这篇博文:http://www.nickager.com/nasite/blog/Installing-Gemstone-on-an-Amazon-EC2-Linux-instance)
注意:这些说明都是基于从一个MacOS客户端连接到一个Amazon EC2实例的;对于其他Unix客户端来说,这些说明也同样适用。对于一个Windows客户端来说,你可能需要下载:
PuTTY
Cygwin
并相应地修改这些说明。
创建一个EC2实例
首先到http://aws.amazon.com注册。登陆以后你就可以导航到下面这个界面了:
*在“Region”组合框上下拉,选择离你最近的区域。
*点击“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。
如果你想使用Amazon提供的这个免费产品,可以选择“Micro”。Amazon对微型实例的描述如下:
这个系列的实例可以持续不断地给你提供少量的CPU资源,当其他周期可用的时候,你也可以增加CPU资源。它们比较适合那些低吞吐量的应用程序,以及那些周期性地消耗掉计算周期的Web站点。
接下来,我们给这个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)
不需要输入任何键/值对
因为我们在上面那个步骤中,已经把一个SSH密钥输入到“User Data”域中了,所以,无需再指定一个密钥对了:
对防火墙进行配置,打开22端口(SSH)和80端口(HTTP):
最后,点击“Launch”按钮,等待这个实例启动:
如果这个实例启动了,把这个实例的URL(Public DNS)拷贝下来:
把你的浏览器指向你的服务器的公用的DNS地址(例如:http://ec2-46-51-165-46.eu-west-1.compute.amazonaws.com),然后,你应该可以看到熟悉的Seaside欢迎屏:
恭喜你!你已经让属于你自己的,免费的Seaside服务器运行在Amazon EC2中了。
#p#
关于配置
你应该已经发现这个问题了,虽然计数器,任务和“create a component”样例都和预期的一样,在正常地运作,但是“/browse”命令, “/config”命令和指向JQuery样例的链接却返回403错误(unauthorised)和404错误(not found)。此外,底部的Seaside工具栏也消失了。这样设计主要是为了让这个环境更加安全——你的实例现在依赖于互联网了。下面几个小节将会为您讲述如何把你自己的代码载入到你的远程实例中,以及如何访问“/config”。
不止是一个欢迎屏,通过“/pier”命令,你还可以使用默认安装的Pier(关于Pier,具体可以参考:http://www.piercms.com/)。Pier是一个构建在Seaside之上的,强大而灵活的内容管理系统,因为它支持Blog,所以它是这种站点的理想选择。
访问“/config”命令
使用上面提到的那个公用的DNS地址,使用用户“seasideuser”ssh到新创建的实例:
ssh -L 8888:127.0.0.1:80 [email protected] |
你应该会看到一些类似于这样的东西:
$ ssh -L 8888:127.0.0.1:80 [email protected] 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
See /etc/image-release-notes for latest release notes. 🙂
|
现在,你应该可以浏览“http://localhost:8888/config”,访问相应的配置了。参数“-L 8888:127.0.0.1:80”表示服务端的localhost上的数据应该传送到客户端的localhost:8888上,同时,Web服务器会被配置成只能通过localhost来访问“/config”命令。
还有一个日志界面,也被配置成只能通过localhost来访问;浏览/tools/objectlog(用户名: admin, 密码: tool)可以访问这个界面。
#p#
把你自己的代码载入到你的Gemstone实例中
如果你已经登录到你的远程实例了,那么先“exit”这个实例,然后用下面的命令行ssh回来:
$ ssh -X -C [email protected] |
这应该会产生一些类似于这样的东西:
$ ssh -X -C [email protected] 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 See /etc/image-release-notes for latest release notes. 🙂
|
“-x”参数支持X11传送,“-C”压缩。这可以让你在你的远程实例上打开GemTools,但是那个窗口会传送(X11)到你本地计算机的显示屏上。
GemTools是一个Pharo环境,它可以让你连接到Gemstone,载入和修改代码,以及通过一个GUI环境来执行一些管理操作(例如启动和关闭服务器,备份和恢复数据库等等)。
启动Gemtools:
$ ~/gemtools.sh |
然后,按“Login”按钮连接到运行在你的实例中的Gemstone服务器:
你现在应该已经登录到你的Gemstone服务器了:
现在,你可以使用Monticello把你的代码载入到你的远程实例中。点击“Tools”按钮,然后选择“Monticello”。添加包含你的代码的代码库,然后正常载入。你还可以使用Metacello 和 Gofer来载入代码。
使用GemTools
虽然当GemTools运程运行在你的实例中的时候,在GemTools中,你也可以高效率地完成一些工作,但是,你可能会发现,使用VMWare GLASS virtual appliance,或者把Gemstone安装到你的本地机器上,在一个Pharo映像中完成这些工作,效率会更高一些。
如果你是通过一个MacOS客户端来连接的,那么你可能会发现映射Ctrl和CMD键是很有帮助的,具体可以参考:
《MacOS And X11》
#p#
有待改进
1,我尚未配置任何监控软件
2,如果他们崩溃了,没有办法重新启动Gems
3,没有提供数据库备份机制。
4,我还没有配置邮件服务器。
《Glass Daemon Tools》这篇文档详细地讲述实现其中一些改进的方法。
为了改进你自己的配置,你可以使用这个配置作为基础,然后,在社区中分享你自己的配置。创建和分享一个经过修改的配置都是十分简单的。
让你的实例更加安全
有很多种方法可以让你的实例更加安全,这是其中的三种方法(注意:这并不是一个完整的列表):
1,让你的系统软件处于最新状态
2,要求提供一个sudo密码
3,改变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 [email protected] |
最后,你可以重新编辑你的防火墙,移除对22端口的访问。
补充资料
这个实例的配置已经记录到以前的一篇博文中了:
《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邮件列表也有很大的参考价值。
原文名:Create a free Gemstone server in the cloud in 10 minutes 作者:Nick Ager
【编辑推荐】
- IBM启动"云引擎" 5分钟搞定一个IaaS云
- 技巧经验:搭建私有云要做哪些准备?
- 云计算背后的秘密(7)-YunTable的故事