Wp-config.php sürümü için en iyi yöntem?


35

wp-config.phpDosyanızı sürüm kontrol havuzunuza eklemek için en iyi yöntem var mı ?

Bu tür bir yapılandırma ile yeni bir site oluşturmayı düşünüyorum, ( Alex King ve Mark Jaquith’e benzer ):

/index.php
/local-config.php
/wp-config.php
/wp/ (core)
/wp-content/ (plugins, themes, etc.)

Bu havuzun halka açık hale gelmesi durumunda, şifrelerimi git'e göstermeden bunu nasıl yapabilirim?

Özellikle Mark'ın yazısında, local-config.php yerel veritabanı ayrıntılarını ve şifrelerini saklayabiliyor gibi gözüküyor, ancak prodüksiyon olanlar wp-config.php içinde kalıyor. Bu çok mu sorun ve sadece wp-config.php 'yi değiştirmeden bırakmalı mıyım?


Bence Mark Jaquith'in çok fazla sorun olmadığını ve iyi çalıştığını ve aşağıdaki cevaplardan biraz daha iyi olduğunu düşünüyorum.
Wyck

IMO, her şey sürüm kontrol altına alınmalı ve sistem, işlerin güvenli ve basit bir şekilde tutulması boyunca herhangi bir korsanlık olmadan farklı ortamları idare edebilmelidir. Sadece nasıl yaptığımı yazdım, tüm endişelerinizi kapsıyor :) Kurulumumla ilgili herhangi bir sorunuz olursa bana bildirin.
Ashfame

Yanıtlar:


45

İşte böyle yapıyorum ve bundan daha iyisine rastlamadım. Farklı sürümlerde wp-config.php dosyasının sürüm kontrolü altında kalmasını sağladım ve daha sonra tüm veritabanı kimlik bilgilerini ve tuzlarını / anahtarlarını içeren bir dizini yukarıda tuttum. Ayrıca bu şekilde, çalıştırdığım kurulum türünü ayırt edebiliyorum ve buna göre farklı şeyler yapabiliyorum.

İşte wp-config.phpaltında tutmak 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&lt;Rw-)c].9}g?^[:!j]h+Efr&lt;y$&lt;YmV0XOo|lOIujEE}+[R}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|;&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&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&gt;y}Kr7]0]Xb@&gt;2sGc&gt;Mk6,$5FycK;u.KU[Tw$345K9qoF}WV,-');
if ( ! defined( 'LOGGED_IN_SALT' ) )
    define('LOGGED_IN_SALT', 'a|+yZsR-k&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[&lt;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');

Ve burada bir dizini WordPress kökünün üzerinde tuttuğum yerel yapılandırma dosyası ve bu da onu web tarafından erişilebilir dizinin dışına çıkarıyor, böylece apache PHP dosyalarını ayrıştırmayı bırakıp atmaya başlarsa, veritabanı kimlik bilgilerimiz hala güvende ( 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');

Bu şekilde eğer yukarıdaki dosya adlandırılırsa local-config.php, sistemim yerel kurulum gibi davranır. Adlandırılmışsa staging-config.php, aşamalandırma yüklemesi gibi davranır ve adlandıysa production-config.php. Hata ayıklama gibi farklı sabitlerin farklı değerlerinin farklı ortamlarda farklı değerlere sahip olmasına ve SCM (git) altında hala her şeyin olmasına yardımcı olur. Olasılıklar sonsuzdur ve farklı ortamlar için korsanlığa gerek yoktur.

Bu, zaten hiçbir zaman kamuya hiçbir hassas bilgiyi açığa vurmadığınızdan emin olur ve bunu sadece üzerinde çalıştığım herhangi bir projeyi başlatmak için kullanırım, varsayılan olarak daha güçlü anahtarlarım var ve bunları yukarıdaki ikinci yapılandırma dosyasına eklediğimde, burada tanımlananlar yerine bunlar kullanılır. Mutluluk!


Bu yaklaşımı sevdim, muhtemelen böyle bir şey yapmayı bırakacağım.
jjeaton

Ana config dosyasından-local-config-ana-dizininde-config-file dosyasını nasıl referans alırsınız? Sembolik bağlantı yoluyla veya üzeri ../(yani ../filename) bir yere? - ../Ana wp-config.phpdosyada hiç bulamadım .
KajMagnus

1
@KajMagnus Sabit DB_CREDENTIALS_PATHbunu yapar.
Ashfame

9

Bu havuzun halka açık hale gelmesi durumunda, şifrelerimi git'e göstermeden bunu nasıl yapabilirim?

Senin Eğer wp-config.phpdosya sürümü kontrolü, daha sonra içerdiği herhangi şifreleri olacaktır da sürüm kontrol altında. Etmektir kaçınmak için tek yol değildir sürüm kontrolü dosyayı koydu.

Bu çok mu sorun ve sadece wp-config.php 'yi değiştirmeden bırakmalı mıyım?

İçimdeki hislerim wp-config.phptamamen ters tutulmak olacaktı . Ancak bunun çevresinde bazı yollar var.

wp-config.phpParolalarınızı ve karma değerlerinizi içeren kısmını ayrı bir dosyaya ve include()normal wp-config.phpdosyaya çıkarın . Ardından, wp-config.phpsürüm denetimi altına alın, ancak include()dosyanızı ayrı tutun .

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');

Artık parolaların ve karma değerlerin hiç bulunmadığını görebilirsiniz 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');

Ama dürüst olmak gerekirse, bu noktada burada gereksiz bir soyutlama düzeyi ekliyorsunuz. Sebep wp-config.phpher şeyden önce ayrı çünkü çevreye özgü. Yerel bir sunucudan üretime hiç kopyalamamalısınız ... bu yüzden sürüm kontrolü altında olmamalıdır.


Bazı ekstra işler gibi görünüyor, ancak tüm wp-config ayarlarının ortamlar arasında senkronize edilmesinin sağlanmasındaki faydaları görebiliyorum.
jjeaton

Bölmenin wp-config.phpfazladan bir faydası var: conf.phpWordPress'in tamamını yüklemeden WP olmayan bir komut dosyasına dahil edebilirsiniz.
Tamlyn

4

Mark'ın örneği , özel bir repo ile çalıştığınızı varsayar:

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'  );
}

Kimlik bilgilerini tanımlamak yerine kolayca bir production-config.php dosyası oluşturabilir ve bunu koşullu kontrolün içine dahil edebilirsiniz:

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' )
    }

Sonra senin unversion production-config.php içinde:

  define( 'DB_NAME',     'production_db'       );
  define( 'DB_USER',     'production_user'     );
  define( 'DB_PASSWORD', 'production_password' );
  define( 'DB_HOST',     'production_db_host'  );

Özel bir depo olsa bile, şifrelerin içinde saklanmasını istemem ve istenirse depoyu halka açma esnekliği isterdim. Production-config.php, muhtemelen gitmek için iyi bir yoldur.
jjeaton

2

Sen işleyeceğine wp-config.phpgizli dizeleri olmadan deposuna dosyayı, daha sonra çalıştırın:

git update-index --assume-unchanged wp-config.php

Bu, git'e dosyanın değişmediğini varsaydığını söyleyecektir.


4
Bilmeniz güzel, assume-unchangedanahtarın farkında değilsiniz ama işte iki noktam: (1) Dosyayı doğrudan eklerseniz, dizine eklenecektir. Bu yüzden yanlışlıkla bir noktada ekleyebileceğiniz bir risk var. (2) Bu bayrakla bir taahhüdü birleştirmek, birleşmenin zarafetle başarısız olmasına neden olur, böylece zarif bir çözüm değildir. Bir geliştirme oturumu gibi bir şey iken sadece değişiklikleri geçici olarak yoksaymak için kullanılabilir. Buradan daha fazla bilgi edinin - gitready.com/intermediate/2009/02/18/…
Ashfame
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.