我想为一个 Rails 应用程序设置一个暂存服务器。 我使用 git 和 github、Cap,并拥有一个带有 Apache/Passenger 的 VPS。 就暂存设置的最佳实践而言,我很好奇暂存服务器的配置以及与其交互的过程。 我知道它应该尽可能与生产服务器相同,但限制公共访问会限制这一点,因此关于如何仅为我的使用安全保护它的建议也很重要。
另一个具体的问题是,我是否可以在 VPS 上创建一个虚拟主机,以便暂存服务器可以与生产服务器并存。 我感觉可能有理由避免这样做,虽然不确定。
我想为一个 Rails 应用程序设置一个暂存服务器。 我使用 git 和 github、Cap,并拥有一个带有 Apache/Passenger 的 VPS。 就暂存设置的最佳实践而言,我很好奇暂存服务器的配置以及与其交互的过程。 我知道它应该尽可能与生产服务器相同,但限制公共访问会限制这一点,因此关于如何仅为我的使用安全保护它的建议也很重要。
另一个具体的问题是,我是否可以在 VPS 上创建一个虚拟主机,以便暂存服务器可以与生产服务器并存。 我感觉可能有理由避免这样做,虽然不确定。
简单且便宜的解决方案:
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)我的暂存应用程序的灾难性故障是否会导致主要应用程序崩溃?最好希望答案是否定的。
我想这要看你的预发布服务器是否需要被其他人访问。如果其他人需要访问,那么你需要另外一个小型切片,并使用htaccess或防火墙规则限制谁可以访问它。如果没有其他人需要访问,我建议使用VMWare。你可以在自己的机器上运行它,或者在你周围的备用盒子上运行,或者在一台非常便宜的PC上运行。我们使用免费的VMWare Server 2作为我们的预发布和部署测试服务器,效果很好。它还可以通过复制基础VM设置来轻松创建新的测试服务器。如果你是Mac用户,你可以使用VMWare Fusion,需要付费,但我已经不得不用它来测试IE了。
使用两个尽可能相似的独立服务器(VPS或其他)作为基础镜像(硬件和软件)。自动化生产环境的所有配置,确保没有手工操作。利用该自动化工具生成与生产环境完全相同的分段服务器。维护自动化工具以确保两个环境保持同步,并可以按需复制。
解决了分段不同步问题和一级扩展问题。
就成本而言,VPS非常便宜。通过拥有分段服务器避免的生产停机故障数量将在很短时间内为您的分段环境付费(除非您实际上根本没有赚钱,否则停机时间并不是一个问题,您可以放心大胆地进行破坏)。