Есть ли лучший способ включить ваш файл wp-config.php
в репозиторий управления версиями?
Я рассматриваю возможность создания нового сайта с такой конфигурацией (аналогично Alex King и Mark Jaquith ):
/index.php /local-config.php /wp-config.php /wp/ (core) /wp-content/ (plugins, themes, etc.)
Как я могу это сделать, не подвергая свои пароли git, если этот репозиторий станет публичным?
Особенно в записи Марка, похоже, что local-config.php может хранить локальные данные базы данных и пароли, но производственные остаются в wp-config.php. Это слишком много проблем, и я должен просто оставить wp-config.php неверсированным?
Вот как я это делаю, и я не нашел ничего лучше этого. Я сохраняю другую версию файла wp-config.php под управлением версии, а затем сохраняю файл с одним каталогом, который содержит все учетные данные базы данных и соли / ключи. Также таким образом, я могу различать тип установки, которую я запускаю, и делать что-то по-другому на основе этого.
Вот wp-config.php
Я держусь под git
( https://gist.github.com/1923821 ):
<?php /** * Define type of server * * Depending on the type other stuff can be configured * Note: Define them all, don't skip one if other is already defined */ define( 'DB_CREDENTIALS_PATH', dirname( ABSPATH ) ); // cache it for multiple use 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' ) ); /** * Load DB credentials */ if ( WP_LOCAL_SERVER ) require DB_CREDENTIALS_PATH . '/local-config.php'; elseif ( WP_DEV_SERVER ) require DB_CREDENTIALS_PATH . '/dev-config.php'; elseif ( WP_STAGING_SERVER ) require DB_CREDENTIALS_PATH . '/staging-config.php'; else require DB_CREDENTIALS_PATH . '/production-config.php'; /** * Authentication Unique Keys and Salts. * * Change these to different unique phrases! * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service} * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again. */ if ( ! defined( 'AUTH_KEY' ) ) define('AUTH_KEY', '9*W=5<Rw-)c].9}g?^[:!j]h+Efr<y$<YmV0XOo|lOIujEE}+[R}iAQZ :Sy3wN}'); if ( ! defined( 'SECURE_AUTH_KEY' ) ) define('SECURE_AUTH_KEY', 'APge3~H;g+b0FyNF&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|;<Iw;%rkB(A}r++HwT|s[LW!.wt.=5J!b%Z{F1/[LxQ*d7J>Cm'); if ( ! defined( 'NONCE_KEY' ) ) define('NONCE_KEY', 'zO2cmQX`Kc~_XltJR&T !Uc72=5Cc6`SxQ3;$f]#J)p</wwX&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>y}Kr7]0]Xb@>2sGc>Mk6,$5FycK;u.KU[Tw$345K9qoF}WV,-'); if ( ! defined( 'LOGGED_IN_SALT' ) ) define('LOGGED_IN_SALT', 'a|+yZsR-k<cSf@PQ~v82a_+{+hRCnL&|aF|Z~yU&V0IZ}Mrz@ND])YD22iUM[%Oc'); if ( ! defined( 'NONCE_SALT' ) ) define('NONCE_SALT', '|1.e9Tx{fPv8D#IXO6[<WY*,)+7+URp0~|:]uqiCOzu93b8,h4;iak+eIN7klkrW'); /** * WordPress Database Table prefix. * * You can have multiple installations in one database if you give each a unique * prefix. Only numbers, letters, and underscores please! */ $table_prefix = 'ft_'; /** * WordPress Localized Language, defaults to English. * * Change this to localize WordPress. A corresponding MO file for the chosen * language must be installed to wp-content/languages. For example, install * de_DE.mo to wp-content/languages and set WPLANG to 'de_DE' to enable German * language support. */ define( 'WPLANG', '' ); /** * For developers: WordPress debugging mode. * * Change this to true to enable the display of notices during development. * It is strongly recommended that plugin and theme developers use WP_DEBUG * in their development environments. */ if ( WP_LOCAL_SERVER || WP_DEV_SERVER ) { define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true ); // Stored in 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 ); // Stored in wp-content/debug.log define( 'WP_DEBUG_DISPLAY', false ); } else { define( 'WP_DEBUG', false ); } /* That's all, stop editing! Happy blogging. */ /** Absolute path to the WordPress directory. */ if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/'); /** Sets up WordPress vars and included files. */ require_once(ABSPATH . 'wp-settings.php');
И вот локальный файл конфигурации, который я держу в одном каталоге выше корня WordPress, и это также делает его вне доступного в Интернете каталога, поэтому, если apache перестает анализировать файлы PHP и начинает их выбрасывать, наши учетные данные в базе данных по-прежнему безопасны ( https: / /gist.github.com/1923848 ):
<?php /** * WordPress config file to use one directory above WordPress root, when awesome version of wp-config.php is in use. * * Awesome wp-config.php file - https://gist.github.com/1923821 */ /* WordPress Local Environment DB credentials */ define('DB_NAME', 'project_21'); define('DB_USER', 'root'); define('DB_PASSWORD', 'root'); define('DB_HOST', 'localhost'); define('DB_CHARSET', 'utf8'); define('DB_COLLATE', ''); /* Keys & Salts */ define('AUTH_KEY', '5H%)s-nQ,+fn0gwg/p1UjBTmCQ?l[8-!>Q{MW&?X3DM,OF;TaI<SOOTrl0+-@) *'); define('SECURE_AUTH_KEY', '+%rr@,XIt-V+[.B9++uH1L,L+r)uq}5(:~=&4~Lk|.LV|y;R}fEo?G}+Sntf_JN}'); define('LOGGED_IN_KEY', 'Szv!gQm9#(L&TUD OnM`>sXGge:m1j`L2 5sO;hRNVhlN>IUED1/`%<[ly-GxVJ '); define('NONCE_KEY', 'o-Jo;>G#-%~,[ki@REqXV%4^I.HDnc.3]P;e8];4pJt% $xe5K<aOb|a2*QKV4c-'); define('AUTH_SALT', '8-tQb3d|W8,;Y_#mfuFB.1&b%U2fnlLD|F&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&f^hSbwBgyan.v9<+ErvAMi2ymLhz`Tl-fF?HXa(j<W`wA*8U3R#-|w');
Таким образом, если указанный выше файл называется local-config.php
, моя система ведет себя как локальная установка. Если его названный staging-config.php
, он ведет себя как промежуточная установка, и если его имя production-config.php
. Это помогает мне иметь разные значения определенных констант, таких как отладка, которые имеют разные значения в разных средах и все еще имеют все под SCM (git). Потенциалы бесконечны и нет необходимости в хакерах, требуемых для разных условий.
Это гарантирует, что вы никогда не раскрываете какую-либо конфиденциальную информацию для публики, и я использую это только для начала любого проекта, над которым я работаю, у меня есть более сильные ключи по умолчанию, и как только я добавлю их во второй конфигурационный файл в один каталог выше, они используются вместо тех, которые определены здесь. Блаженство!
Как я могу это сделать, не подвергая свои пароли git, если этот репозиторий станет публичным?
Если ваш файл wp-config.php
находится в управлении версиями, то любые пароли, которые он содержит, также будут находиться в управлении версиями. Единственный способ избежать этого – не помещать файл в управление версиями.
Это слишком много проблем, и я должен просто оставить wp-config.php неверсированным?
Мое чувство кишки должно было бы полностью исключить wp-config.php
. Но есть некоторые способы обойти это.
Извлеките часть wp-config.php
которая содержит ваши пароли и хэши в отдельный файл, и include()
в обычный файл wp-config.php
. Затем поместите файл wp-config.php
под управлением версии, но сохраните файл include()
отдельно.
wp-config.php
:
<?php /** * The base configurations of the WordPress. * * This file has the following configurations: MySQL settings, Table Prefix, * Secret Keys, WordPress Language, and ABSPATH. You can find more information * by visiting {@link http://codex.wordpress.org/Editing_wp-config.php Editing * wp-config.php} Codex page. You can get the MySQL settings from your web host. * * This file is used by the wp-config.php creation script during the * installation. You don't have to use the web site, you can just copy this file * to "wp-config.php" and fill in the values. * * @package WordPress */ /** Database Charset to use in creating database tables. */ define('DB_CHARSET', 'utf8'); /** The Database Collate type. Don't change this if in doubt. */ define('DB_COLLATE', ''); include( 'conf.php' ); /**#@-*/ /** * WordPress Database Table prefix. * * You can have multiple installations in one database if you give each a unique * prefix. Only numbers, letters, and underscores please! */ $table_prefix = 'wp_'; /** * WordPress Localized Language, defaults to English. * * Change this to localize WordPress. A corresponding MO file for the chosen * language must be installed to wp-content/languages. For example, install * de_DE.mo to wp-content/languages and set WPLANG to 'de_DE' to enable German * language support. */ define('WPLANG', ''); /** * For developers: WordPress debugging mode. * * Change this to true to enable the display of notices during development. * It is strongly recommended that plugin and theme developers use WP_DEBUG * in their development environments. */ define('WP_DEBUG', false); /* That's all, stop editing! Happy blogging. */ /** Absolute path to the WordPress directory. */ if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/'); /** Sets up WordPress vars and included files. */ require_once(ABSPATH . 'wp-settings.php');
Теперь вы можете видеть, что пароли и хэши вообще не включены в wp-config.php
.
conf.php
:
// ** MySQL settings - You can get this info from your web host ** // /** The name of the database for WordPress */ define('DB_NAME', 'database_name_here'); /** MySQL database username */ define('DB_USER', 'username_here'); /** MySQL database password */ define('DB_PASSWORD', 'password_here'); /** MySQL hostname */ define('DB_HOST', 'localhost'); /**#@+ * Authentication Unique Keys and Salts. * * Change these to different unique phrases! * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service} * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again. * * @since 2.6.0 */ define('AUTH_KEY', 'put your unique phrase here'); define('SECURE_AUTH_KEY', 'put your unique phrase here'); define('LOGGED_IN_KEY', 'put your unique phrase here'); define('NONCE_KEY', 'put your unique phrase here'); define('AUTH_SALT', 'put your unique phrase here'); define('SECURE_AUTH_SALT', 'put your unique phrase here'); define('LOGGED_IN_SALT', 'put your unique phrase here'); define('NONCE_SALT', 'put your unique phrase here');
Но, честно говоря, на данный момент вы просто добавляете избыточный уровень абстракции здесь. Вся причина, по которой wp-config.php
является отдельной, в первую очередь потому, что она специфична для среды. Вы не должны копировать его с локального сервера на производство вообще … поэтому он не должен находиться под управлением версиями вообще.
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' );
Вы можете зафиксировать файл wp-config.php
в репозитории без ваших секретных строк, а затем запустить:
git update-index --assume-unchanged wp-config.php
Это позволит git предположить, что файл, ну, не изменился.