一个预算有限的Web应用暂存服务器的最佳实践

18

我想为一个 Rails 应用程序设置一个暂存服务器。 我使用 git 和 github、Cap,并拥有一个带有 Apache/Passenger 的 VPS。 就暂存设置的最佳实践而言,我很好奇暂存服务器的配置以及与其交互的过程。 我知道它应该尽可能与生产服务器相同,但限制公共访问会限制这一点,因此关于如何仅为我的使用安全保护它的建议也很重要。

另一个具体的问题是,我是否可以在 VPS 上创建一个虚拟主机,以便暂存服务器可以与生产服务器并存。 我感觉可能有理由避免这样做,虽然不确定。

5个回答

16

简单且便宜的解决方案:

1)将staging.domainname.com指向你的VPS。

2)添加一个虚拟主机用于staging环境,将其指向应用程序的staging副本。

3)添加一个staging环境设置。(你知道可以在Rails中定义新的环境吗?有趣的东西!)我认为这与复制production.rb到staging.rb并进行必要的调整以及更新database.yml一样简单。

4)在ActionController中添加类似以下代码的内容。

   if (ENV["RAILS_ENV"] == "staging")
     before_filter :verifies_admin
   end

“verifies_admin”可以是您想要的任何内容。我建议使用HTTP基本身份验证——便宜又简单。

def verifies_admin
  authenticate_or_request_with_http_basic do |username, password|
    username == "foo" && password == "bar"
  end
end
请注意,如果支付网站向您发出传入请求,这可能会破坏您与该支付网站的连接,不过这很容易修复(只需关闭适当控制器和/或操作的before_filter即可)。 更好的答案:

1)购买第二个VPS,与您常规的VPS从相同的映像配置,和/或从相同的从裸金属安装脚本(我喜欢Capistrano& Deprec)配置。

2)将staging.domainname.com指向它。

3)否则,它与另一个选项相同。

需要考虑的事情:

1)我是否应该有一个暂存数据库?特别是如果您将测试模式更改的话,那么很可能是这样。

2)是否应该具有在暂存和生产系统之间移动数据的功能?

3)我的暂存应用程序的灾难性故障是否会导致主要应用程序崩溃?最好希望答案是否定的。


1
这篇文章有点旧了,但是你可以采用Patrick的计划并将它们应用到Amazon EC2的新Microinstances上,这些实例每月运行大约15美元,并且在可爆发的机器上提供512mb+的内存,是一个非常划算的选择。其中一个好处是,你在常规EC2或其他机器上使用的镜像可以轻松地放在Microinstance上。我有一个大型实例在运行,还有一个Microinstance用于暂存和游戏。 - Mike
在EC2的评论中补充一点,为了更加节约成本,您可以通过EC2管理控制台或脚本启动和停止EC2实例,并且只在需要时使用它们。如果您想要部署到暂存环境,测试一下,然后关闭暂存服务器,那么您只需要支付运行时间的费用。 - Danny

4
我想补充一下,创建Capistrano的Jamis Buck还创建了一个针对使用Capistrano设置多阶段环境的gem。即使不使用宝石,您也可以完成它,但是宝石使其更加容易。您可以在此处找到他的帖子及说明:http://weblog.jamisbuck.org/2007/7/23/capistrano-multistage 此外,《程序员修炼之道》中有一篇非常有用的文章,名为“高级Rails技巧”,它详细介绍了如何设置多阶段环境。我发现此帖子的回答与《Rails技巧》一书相结合,让设置变得非常容易。
StackOverflow不允许我添加另一个链接,但是如果您搜索“Advanced Rails Recipes”,该书将是第一个结果。

3

我想这要看你的预发布服务器是否需要被其他人访问。如果其他人需要访问,那么你需要另外一个小型切片,并使用htaccess或防火墙规则限制谁可以访问它。如果没有其他人需要访问,我建议使用VMWare。你可以在自己的机器上运行它,或者在你周围的备用盒子上运行,或者在一台非常便宜的PC上运行。我们使用免费的VMWare Server 2作为我们的预发布和部署测试服务器,效果很好。它还可以通过复制基础VM设置来轻松创建新的测试服务器。如果你是Mac用户,你可以使用VMWare Fusion,需要付费,但我已经不得不用它来测试IE了。


非常感谢 - 我已经澄清了谁需要它。只有我,但它还需要与第三方支付网站进行通信。 - user65663
应该可以正常工作。您可以配置VMWare虚拟机以访问互联网。 - scottd

3
我可能会因为说这句话而被批评,但对于预算紧张的小型网站,我认为在生产网站旁边运行演示网站没有任何问题。
如果您正在使用Rails、Apache和Passenger,请设置不同的Rails配置(和数据库),并将每个配置设置为一个命名虚拟主机。用htaccess保护其中一个。从您的域名(staging.*)创建一个A记录,并将其指向那里。
当然,它们彼此并不完全隔离。你可能会把所有东西都搞崩。糟糕!但这可能并不重要。 :)

1

使用两个尽可能相似的独立服务器(VPS或其他)作为基础镜像(硬件和软件)。自动化生产环境的所有配置,确保没有手工操作。利用该自动化工具生成与生产环境完全相同的分段服务器。维护自动化工具以确保两个环境保持同步,并可以按需复制。

解决了分段不同步问题和一级扩展问题。

就成本而言,VPS非常便宜。通过拥有分段服务器避免的生产停机故障数量将在很短时间内为您的分段环境付费(除非您实际上根本没有赚钱,否则停机时间并不是一个问题,您可以放心大胆地进行破坏)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接