Должны ли файлы конфигурации сервера / базы данных, включая пароли, храниться в системе контроля версий? - PullRequest
50 голосов
/ 22 ноября 2010

Мне хотелось бы услышать некоторые рекомендации ...

Предполагается, что веб-приложение взаимодействует с несколькими различными производственными серверами (базами данных и т. Д.) ... если файлы конфигурации содержат пароли базы данныххраниться в системе контроля версий (например, git, svn)?

Если нет, как лучше всего отслеживать пароли базы данных сервера (или других связанных) паролей, к которым вашему приложению необходим доступ?

Редактировать: добавлена ​​награда, чтобы стимулировать больше обсуждений и услышать, что больше людей считают лучшей практикой.

Ответы [ 12 ]

0 голосов
/ 29 февраля 2012

Без правильного процесса сборки я использую эту стратегию (для приложений PHP):

  1. Сделать папку /etc/companyname
  2. В нем поместите два файла:

    <?php // env.php
    return 'prod'; 
    
    <?php // appname-prod.php
    return array(
      'db' => array( /* credentials */ ),
      /* other host-specific conf data */
    ); 
    
  3. Сделать оба файла доступными для чтения только вашим процессом PHP

Теперь файл конфигурации вашего приложения будет выглядеть примерно так:

<?php // config.php
$env = (require "/etc/companyname/env.php");
$creds = (require "/etc/companyname/appname-{$env}.php");

Имея это, среда определяет используемые учетные данные, и вы можете перемещать код между предварительно сконфигурированными средами (и управлять некоторыми параметрами с помощью $env). Это, конечно, можно сделать с помощью переменных среды сервера, но это а) проще в настройке и б) не предоставляет учетные данные для каждого скрипта на сервере (не будет отображаться в нежелательной отладке, например phpinfo()) ).

Для более легкого чтения вне PHP вы можете сделать файлы учетных данных JSON или что-то в этом роде и просто смириться с крошечным ударом по производительности (APC их не кеширует).

0 голосов
/ 01 декабря 2010

Я бы всегда исключал жизненно важные конфигурационные файлы, которые содержат пароли или другие детали доступа (например, для баз данных), это просто лучшая практика.Кроме того, контроль над источниками и версиями обычно обслуживает более одного пользователя, и не все из них работают с одинаковыми данными базы данных или даже с одинаковыми настройками сервера (домены и т. Д.), И для этой цели файлы конфигурации должны быть исключены из него.всего много.

...