Лучшая практика для версии wp-config.php?

Есть ли наилучшая практика для включения вашего файла wp-config.php в ваш репозиторий управления версиями?

Я рассматриваю возможность создания нового сайта с таким типом конфигурации (аналогично Alex King и Mark Jaquith ):

  /index.php
/local-config.php
/wp-config.php
/wp /(сердцевина)
/wp-content /(плагины, темы и т. д.)
 

Как я могу это сделать, не подвергая свои пароли git, если этот репозиторий становится общедоступным?

Особенно в сообщении Марка, похоже, что local-config.php может хранить локальные данные базы данных и пароли, но производственные остаются в wp-config.php. Это слишком много проблем, и я должен просто оставить wp-config.php неверсированным?

34 голоса | спросил jjeaton 20 Mayam12 2012, 09:44:10

4 ответа


42

Вот как я это делаю, и я не нашел ничего лучше этого. Я сохраняю другую версию файла wp-config.php под управлением версии, а затем сохраняю файл с одним каталогом, который содержит все учетные данные базы данных и соли /ключи. Также таким образом, я могу различать тип настройки, которую я запускаю, и делать что-то по-другому на основе этого.

Вот wp-config.php Я держусь под git ( https: //gist.github.com/1923821 ):

  & л;? PHP

/**
* Определить тип сервера
*
* В зависимости от типа можно настроить другой материал
* Примечание. Определите их все, не пропустите один, если другое уже определено
* /

define ('DB_CREDENTIALS_PATH', dirname (ABSPATH)); //кэшируем его для многократного использования
define ('WP_LOCAL_SERVER', file_exists (DB_CREDENTIALS_PATH. '/local-config.php));
define ('WP_DEV_SERVER', file_exists (DB_CREDENTIALS_PATH. '/dev-config.php));
define ('WP_STAGING_SERVER', file_exists (DB_CREDENTIALS_PATH. '/staging-config.php));

/**
* Загрузить учетные данные БД
* /

if (WP_LOCAL_SERVER)
    требуется DB_CREDENTIALS_PATH. '/local-config.php';
elseif (WP_DEV_SERVER)
    требуется DB_CREDENTIALS_PATH. '/dev-config.php';
elseif (WP_STAGING_SERVER)
    требуется DB_CREDENTIALS_PATH. '/staging-config.php';
еще
    требуется DB_CREDENTIALS_PATH. '/production-config.php';

/**
* Аутентификация уникальных ключей и солей.
*
* Измените их на разные уникальные фразы!
* Вы можете сгенерировать их, используя {@link https://api.wordpress.org/secret-key/1.1/salt/службу секретного ключа WordPress.org}
* Вы можете изменить их в любой момент времени, чтобы аннулировать все существующие файлы cookie. Это заставит всех пользователей снова войти в систему.
* /

if (! defined ('AUTH_KEY'))
    define ('AUTH_KEY', '9 * W = 5 <Rw-) c] .9} g <} iAQZ: Sy3wN} ');
if (! defined ('SECURE_AUTH_KEY'))
    define ('SECURE_AUTH_KEY', 'APge3 ~ H; g + b0FyNF & amp; e` $ = g? qj9 @ FQwqFe ^ Q4 (@ p # kDa = NR? $ Z9 | @ v * a (tOj * B +.') ;
if (! defined ('LOGGED_IN_KEY'))
    define ('LOGGED_IN_KEY', '5l0 +: WTpj8 # [V |; & amp; lt; Iw;% rkB (A} r ++ HwT | s [LW! .wt. = 5J! b% Z {F1 /[LxQ * d7J & амп; GT; Cm ');
if (! defined ('NONCE_KEY'))
    define ('NONCE_KEY', 'zO2cmQX`Kc ~ _XltJR & amp; T! Uc72 = 5Cc6`SxQ3; $ f] #J) p & amp; lt; /wwX & amp; 7RTB2) K1Qn2Y * c0');
if (! defined ('AUTH_SALT'))
    define ('AUTH_SALT', 'je] # Yh = RN DCrP9 /N = IX ^, TWqvNsCZJ4f7 @ 3, | @L] at .-, yc ^ - ^ +? 0ZfcHjD, WV');
if (! defined ('SECURE_AUTH_SALT'))
    define ('SECURE_AUTH_SALT', '^ `6z + F! \ + $ BmIp & amp; gt; y} Kr7] 0] Xb @ & amp; gt; 2sGc & amp; gt; Mk6, $ 5FycK; u.KU [Tw $ 345K9qoF} WV , - ');
if (! defined ('LOGGED_IN_SALT'))
    define ('LOGGED_IN_SALT', 'a | + yZsR-k & amp; lt; cSf @ PQ ~ v82a _ + {+ hRCnL & amp; | aF | Z ~ yU & amp; V0IZ} Mrz @ ND]) YD22iUM [% Oc') ;
if (! defined ('NONCE_SALT'))
    define ('NONCE_SALT', '| 1.e9Tx {fPv8D # IXO6 [& amp; lt; WY *,) + 7 + URp0 ~ |:] uqiCOzu93b8, h4; iak + eIN7klkrW');

/**
* Префикс таблицы базы данных WordPress.
*
* У вас может быть несколько установок в одной базе данных, если вы даете каждому уникальное
* префикс. Пожалуйста, только цифры, буквы и символы подчеркивания!
* /

$ table_prefix = 'ft_';

/**
* WordPress Localized Language, по умолчанию используется английский.
*
* Измените это, чтобы локализовать WordPress. Соответствующий файл MO для выбранного
* язык должен быть установлен на wp-content /languages. Например, установить
* de_DE.mo на wp-контент /языки и установите WPLANG в 'de_DE', чтобы включить немецкий
* поддержка языков.
* /

define ('WPLANG', '');

/**
* Для разработчиков: режим отладки WordPress.
*
* Измените это на true, чтобы отображать уведомления во время разработки.
* Настоятельно рекомендуется, чтобы разработчики плагина и темы использовали WP_DEBUG
* в их среде разработки.
* /

if (WP_LOCAL_SERVER || WP_DEV_SERVER) {

    define ('WP_DEBUG', true);
    define ('WP_DEBUG_LOG', true); //Хранится в wp-content /debug.log
    define ('WP_DEBUG_DISPLAY', true);

    define ('SCRIPT_DEBUG', true);
    define («SAVEQUERIES», true);

} else if (WP_STAGING_SERVER) {

    define ('WP_DEBUG', true);
    define ('WP_DEBUG_LOG', true); //Хранится в wp-content /debug.log
    define ('WP_DEBUG_DISPLAY', false);

} else {

    define ('WP_DEBUG', false);
}


/* Вот и все, перестань редактировать! Счастливый блог. * /

/** Абсолютный путь к папке WordPress. * /
если (! определено («ABSPATH»))
define ('ABSPATH', dirname (__ FILE__). '/');

/** Устанавливает файлы WordPress и включенные файлы. * /
require_once (ABSPATH. 'wp-settings.php');
 

И вот локальный файл конфигурации, который я держу в одном каталоге выше корня WordPress, и это также выходит за пределы доступного в Интернете каталога, поэтому в случае, если apache перестает анализировать файлы PHP и начинает их выбрасывать, наши учетные данные в базе данных по-прежнему безопасны ( https://gist.github.com/1923848 ):

  & л;? PHP

/**
 * Файл конфигурации WordPress для использования одного каталога над корнем WordPress, когда используется awesome версия wp-config.php.
 *
 * Awesome wp-config.php file - https://gist.github.com/1923821* /

/* Учетные данные локальной базы данных WordPress * /

define ('DB_NAME', 'project_21');
define ('DB_USER', 'root');
define ('DB_PASSWORD', 'root');
define ('DB_HOST', 'localhost');
define ('DB_CHARSET', 'utf8');
define ('DB_COLLATE', '');

/* Ключи & amp; Соли * /

define ('AUTH_KEY', '5H%) s-nQ, + fn0gwg /p1UjBTmCQ? l [8 -!> Q {MW & amp; X3DM, OF; TaI <SOOTrl0 + - @) *');
define ('SECURE_AUTH_KEY', '+% rr @, XIt-V + [.B9 ++ uH1L, L + r) uq} 5 (: ~ = & amp; 4 ~ Lk | .LV | y; R} fEo? G} + Sntf_JN} ');
define ('LOGGED_IN_KEY', 'Szv! gQm9 # (L & amp; TUD OnM`> sXGge: m1j`L2 5sO; hRNVhlN> IUED1 /`% <[ly-GxVJ');
define ('NONCE_KEY', 'o-Jo;> G # -% ~, [[email protected]%4^I.HDnc.3] P; e8]; 4pJt% $ xe5K <aOb | a2 * QKV4c-');
define ('AUTH_SALT', '8-tQb3d | W8,; Y_ # mfuFB.1 & amp; b% U2fnlLD | F & amp; yH) .tLRX = ANEdNap {78o | 9tqv6JPt');
define ('SECURE_AUTH_SALT', 'RSa% ^ qd ~ T | @ +! -; qgh, qK-GJ} zPpgxz # + @ v6-I; BMwqT`TzGTtg_ ^ n * ILxGOdbq4');
define ('LOGGED_IN_SALT', '] + XV) YK.Q-EU1vR [BT! Y $! d (J_ [AO37OP [Fg [/esFx; 6cI-L [^ O | cvtw9F [; _ * Q');
define ('NONCE_SALT', 'iP {nTQBzy & amp; f ^ hSbwBgyan.v9 <+ ErvAMi2ymLhz`Tl-fF? HXa (j <W`wA * 8U3R # - | w');
 

Таким образом, если указанный выше файл называется local-config.php , моя система ведет себя как локальная установка. Если его названный staging-config.php , он ведет себя как промежуточная установка и, если его назвал production-config.php . Это помогает мне иметь разные значения определенных констант, таких как отладка, которые имеют разные значения в разных средах и все еще имеют все под SCM (git). Потенциалы бесконечны и нет необходимости в хакерах, требуемых для разных условий.

Это гарантирует, что вы никогда не раскрываете какую-либо конфиденциальную информацию для публики, и я использую это только для начала любого проекта, над которым я работаю, у меня есть более сильные ключи по умолчанию и как только я добавляю их во второй файл конфигурации один выше, они используются вместо указанных здесь. Bliss!

ответил Ashfame 23 Maypm12 2012, 13:07:09
9
  

Как я могу это сделать, не подвергая свои пароли git, если этот репозиторий становится общедоступным?

Если ваш файл wp-config.php находится в управлении версиями, то любые содержащиеся в нем пароли будут также находиться в управлении версиями. Единственный способ избежать этого - не поместить файл в управление версиями.

  

Это слишком много проблем, и я должен просто оставить wp-config.php неверсированным?

Мое чувство кишки должно было бы полностью превзойти wp-config.php . Но есть некоторые способы обойти это.

Извлеките часть wp-config.php , которая содержит ваши пароли и хэши в отдельный файл, и include () в обычном wp-config .php . Затем поместите wp-config.php в элемент управления версиями, но сохраните файл include () отдельно.

<сильный> сор-config.php :

  & л;? PHP
/**
 * Базовые конфигурации WordPress.
 *
 * Этот файл имеет следующие конфигурации: настройки MySQL, префикс таблицы,
 * Секретные ключи, WordPress Language и ABSPATH. Вы можете найти дополнительную информацию
 *, посетив {@link http://codex.wordpress.org/Editing_wp-config.php Редактирование
 * wp-config.php} Страница Codex. Вы можете получить настройки MySQL с вашего веб-хостинга.
 *
 * Этот файл используется сценарием создания wp-config.php во время
 * монтаж. Вам не нужно использовать веб-сайт, вы можете просто скопировать этот файл
 * в "wp-config.php" и заполните значения.
 *
 * @package WordPress
 * /

/** База данных Charset для использования при создании таблиц базы данных. * /
define ('DB_CHARSET', 'utf8');

/** Тип сопоставления базы данных. Не меняйте это, если сомневаетесь. * /
define ('DB_COLLATE', '');

include ('conf.php');

/** # @ - * /

/**
 * Префикс таблицы базы данных WordPress.
 *
 * У вас может быть несколько установок в одной базе данных, если вы даете каждому уникальное
 * префикс. Пожалуйста, только цифры, буквы и символы подчеркивания!
 * /
$ table_prefix = 'wp_';

/**
 * WordPress Localized Language, по умолчанию используется английский.
 *
 * Измените это, чтобы локализовать WordPress. Соответствующий файл MO для выбранного
 * язык должен быть установлен на wp-content /languages. Например, установить
 * de_DE.mo на wp-контент /языки и установите WPLANG в 'de_DE', чтобы включить немецкий
 * поддержка языков.
 * /
define ('WPLANG', '');

/**
 * Для разработчиков: режим отладки WordPress.
 *
 * Измените это на true, чтобы отображать уведомления во время разработки.
 * Настоятельно рекомендуется, чтобы разработчики плагина и темы использовали WP_DEBUG
 * в их среде разработки.
 * /
define ('WP_DEBUG', false);

/* Вот и все, перестань редактировать! Счастливый блог. * /

/** Абсолютный путь к папке WordPress. * /
если (! определено («ABSPATH»))
    define ('ABSPATH', dirname (__ FILE__). '/');

/** Устанавливает файлы WordPress и включенные файлы. * /
require_once (ABSPATH. 'wp-settings.php');
 

Теперь вы можете видеть, что пароли и хэши вообще не включены в wp-config.php .

<сильный> conf.php :

  //** Настройки MySQL - вы можете получить эту информацию с вашего веб-хостинга ** //
/** Имя базы данных для WordPress * /
define ('DB_NAME', 'database_name_here');

/** Имя пользователя базы данных MySQL * /
define ('DB_USER', 'username_here');

/** Пароль базы данных MySQL * /
define ('DB_PASSWORD', 'password_here');

/** Имя хоста MySQL * /
define ('DB_HOST', 'localhost');


/** # @ +
 * Аутентификация уникальных ключей и солей.
 *
 * Измените их на разные уникальные фразы!
 * Вы можете сгенерировать их, используя {@link https://api.wordpress.org/secret-key/1.1/salt/службу секретного ключа WordPress.org}
 * Вы можете изменить их в любой момент времени, чтобы аннулировать все существующие файлы cookie. Это заставит всех пользователей снова войти в систему.
 *
 * @since 2.6.0
 * /
define ('AUTH_KEY', 'введите свою уникальную фразу здесь');
define ('SECURE_AUTH_KEY', 'введите свою уникальную фразу здесь');
define ('LOGGED_IN_KEY', 'поместите свою уникальную фразу здесь');
define ('NONCE_KEY', 'введите свою уникальную фразу здесь);
define ('AUTH_SALT', 'поставьте свою уникальную фразу здесь');
define ('SECURE_AUTH_SALT', 'введите свою уникальную фразу здесь');
define ('LOGGED_IN_SALT', 'поместите свою уникальную фразу здесь');
define ('NONCE_SALT', 'введите здесь свою уникальную фразу');
 

Но, честно говоря, на данный момент вы просто добавляете избыточный уровень абстракции. Вся причина wp-config.php является отдельной, в первую очередь потому, что она зависит от среды. Вы не должны копировать его с локального сервера на производство вообще ... поэтому он не должен находиться под управлением версиями вообще.

ответил EAMann 22 Maypm12 2012, 20:39:00
4

Пример от Марка предполагает, что вы работаете с частным репо

  if (file_exists (dirname (__FILE__). '/local-config.php')) {
  include (dirname (__FILE__). '/local-config.php');
  define ('WP_LOCAL_DEV', true);
} else {
  define ('DB_NAME', 'production_db');
  define ('DB_USER', 'production_user');
  define ('DB_PASSWORD', 'production_password');
  define ('DB_HOST', 'production_db_host');
}
 

Вместо определения учетных данных вы можете так же легко создать файл production-config.php и включить его в условную проверку:

  if (file_exists (dirname (__FILE__). '/local-config.php')) {
      include (dirname (__FILE__). '/local-config.php');
      define ('WP_LOCAL_DEV', true);
    } else {
     include (dirname (__FILE__). '/production-config.php')
    }
 

Затем в вашей версии без преобразования: config.php:

  define ('DB_NAME', 'production_db');
  define ('DB_USER', 'production_user');
  define ('DB_PASSWORD', 'production_password');
  define ('DB_HOST', 'production_db_host');
 
ответил Chris_O 25 Mayam12 2012, 11:02:06
1

Вы можете передать файл wp-config.php в репозиторий без ваших секретных строк, а затем запустите:

  git update-index - без изменений wp-config.php
 

Это позволит git предположить, что файл, ну, не изменился.

ответил getWeberForStackExchange 26 Mayam12 2012, 02:44:46

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132