避免硬编码服务器配置

3
我正在开发一个Rails应用程序,准备将其开源。我将其部署到一个配置有nginx和unicorn的VPS服务器上,遵循this RailsCast的指导。
为了使Capistrano、Nginx和Unicorn正常工作,我需要在config/文件夹中添加一些服务器配置文件,例如deploy.rbnginx.confunicorn.rbunicorn_init.sh
我使用git存储库,并且所有内容都在master分支下运行。换句话说,Capistrano从该分支拉取以在服务器上部署,并且这也是我即将开源的分支。
但是,我不希望我的服务器配置文件公开可用。
最好的解决方案是什么?
我是否应该分叉它,并将一个存储库设置为官方公共存储库,另一个用作我的版本,并将官方存储库设置为我的上游?
还是将我的配置参数设置为环境变量,并将配置文件留在存储库中会更好?
4个回答

1
这个解决方案是我找到的最好的解决方法(也是我个人使用的方法)。
你应该把你的配置文件放在:
/path/to/deployed_app/shared

然后在Capistrano任务中,将其符号链接到这些文件:

namespace :deploy do
  task :symlink_shared do
    run "ln -s #{shared_path}/database.yml #{release_path}/config/"
  end
end

before "deploy:restart", "deploy:symlink_shared"

1

我已经做了这两种方法,但是因为查找环境变量并不那么吸引人,所以最终我选择了:

  • 在我的仓库中拥有一个原始的yml文件,以给出期望的格式(命名为config.yml_example

  • 在我的服务器上使用符号链接目录来存放实际的yml文件


1

如果你愿意,你仍然可以将当前存储库开源,除非你希望它使用另一个名称,例如托管的组织(即rails/rails)。 除此之外,由于听起来你不想让它们公开,请从git历史记录中删除那些文件,有关详细信息,请参见:https://help.github.com/articles/remove-sensitive-data

实现使用这些配置的最佳方法是在服务器上设置共享目录,然后进行符号链接,请参见:Where do you put your app-config-files when deploying rails with capistrano and svn


0

不要将您的配置文件放在版本控制下。相反,使用.dist文件名后缀创建默认或示例版本,并将原始文件名放在.gitignore中以防止意外上传。然后用户必须在启动应用程序之前将myconfig.conf.dist复制到myconfig.conf

优点

  • 避免了配置的意外上传
  • 当上游配置文件更改时,避免了git pull上的配置冲突
  • 避免了git pull上的意外配置更改
  • 用户在git clone之后不会忘记适应配置

缺点

  • 在启动或部署之前需要为用户添加一个额外的步骤
  • 需要在自述文件中记录,以便用户知道它
  • 不阅读自述文件的用户仍可能错过它,并想知道为什么应用程序无法工作

P.S.:这不是针对Rails特定的,而是我所有版本控制应用程序配置文件的方法。


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