Thực hành tốt nhất để tạo phiên bản wp-config.php?


35

Có cách thực hành tốt nhất để đưa wp-config.phptệp của bạn vào kho lưu trữ kiểm soát phiên bản của bạn không?

Tôi đang xem xét việc tạo một trang web mới với loại cấu hình này, (tương tự như Alex KingMark Jaquith ):

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

Làm thế nào tôi có thể làm điều này mà không để lộ mật khẩu của mình với git, trong trường hợp kho lưu trữ này trở nên công khai?

Đặc biệt trong bài đăng của Mark, có vẻ như local-config.php có thể lưu trữ các chi tiết và mật khẩu cơ sở dữ liệu cục bộ, nhưng các mật khẩu sản xuất vẫn nằm trong wp-config.php. Đây có phải là quá nhiều rắc rối và tôi có nên bỏ wp-config.php không?


Tôi nghĩ rằng cách Mark Jaquith thực hiện nó không có nhiều rắc rối và hoạt động tốt và tốt hơn một chút so với câu trả lời dưới đây.
Wyck

IMO, mọi thứ nên được đặt dưới sự kiểm soát theo phiên bản và hệ thống sẽ có thể xử lý các môi trường khác nhau mà không có bất kỳ nội dung hack nào cùng với việc giữ mọi thứ an toàn và đơn giản để làm việc. Tôi chỉ đăng về cách tôi làm điều đó, nó bao gồm tất cả các mối quan tâm của bạn :) Hãy cho tôi biết nếu bạn có bất kỳ câu hỏi nào về thiết lập của tôi.
Ashfame

Câu trả lời:


45

Đây là cách tôi làm và tôi không gặp phải điều gì tốt hơn thế này. Tôi giữ một phiên bản khác của tệp wp-config.php dưới sự kiểm soát phiên bản và sau đó giữ một thư mục một tệp ở trên chứa tất cả thông tin cơ sở dữ liệu và muối / khóa. Cũng theo cách này, tôi có thể phân biệt giữa loại thiết lập tôi đang chạy và thực hiện mọi thứ khác nhau trên cơ sở đó.

Đây là phần wp-config.phptôi giữ 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');

Và đây là tệp cấu hình cục bộ mà tôi giữ một thư mục phía trên WordPress root và điều này cũng làm cho nó nằm ngoài thư mục có thể truy cập web, vì vậy trong trường hợp apache dừng phân tích tệp PHP và bắt đầu ném chúng ra, thông tin cơ sở dữ liệu của chúng tôi vẫn an toàn ( 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');

Bằng cách này nếu tệp trên được đặt tên local-config.php, hệ thống của tôi hoạt động giống như cài đặt cục bộ. Nếu được đặt tên staging-config.php, nó hoạt động giống như cài đặt dàn và nếu được đặt tên production-config.php. Nó giúp tôi có các giá trị khác nhau của các hằng số nhất định như gỡ lỗi có các giá trị khác nhau trong các môi trường khác nhau và vẫn có mọi thứ trong SCM (git). Khả năng là vô tận và không có tin tặc cần thiết cho các môi trường khác nhau.

Điều này đảm bảo rằng bạn không bao giờ tiết lộ bất kỳ thông tin nhạy cảm nào cho công chúng và tôi sử dụng nó để bắt đầu bất kỳ dự án nào tôi làm, tôi có các khóa mạnh hơn theo mặc định và ngay khi tôi thêm chúng vào thư mục cấu hình thứ hai ở trên, những người được sử dụng thay vì những người được xác định ở đây. Phúc lạc!


Tôi thích cách tiếp cận này, có lẽ tôi sẽ làm một cái gì đó như thế này.
jjeaton

Làm thế nào để bạn tham chiếu thư mục-local-config-file-in-the-Parent-từ tệp cấu hình chính? Thông qua một liên kết tượng trưng, ​​hoặc thông qua ../(tức là ../filename) ở đâu đó? - Tôi không tìm thấy bất kỳ ../trong wp-config.phptập tin chính .
KajMagnus

1
@KajMagnus Hằng số DB_CREDENTIALS_PATHlàm điều đó.
Ashfame

9

Làm thế nào tôi có thể làm điều này mà không để lộ mật khẩu của mình với git, trong trường hợp kho lưu trữ này trở nên công khai?

Nếu wp-config.phptệp của bạn nằm trong kiểm soát phiên bản, thì mọi mật khẩu mà nó chứa cũng sẽ nằm trong kiểm soát phiên bản. Cách duy nhất để tránh điều đó là không đặt tệp trong kiểm soát phiên bản.

Đây có phải là quá nhiều rắc rối và tôi có nên bỏ wp-config.php không?

Cảm giác ruột của tôi sẽ là wp-config.phphoàn toàn không đảo ngược. Nhưng có một số cách xung quanh nó.

Trích xuất một phần trong wp-config.phpđó chứa mật khẩu và băm của bạn vào một tệp riêng biệt và include()nó trong wp-config.phptệp thông thường . Sau đó, đặt wp-config.phpdưới sự kiểm soát phiên bản, nhưng giữ include()riêng biệt tệp của bạn .

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

Bây giờ bạn có thể thấy rằng mật khẩu và băm không được bao gồm trong wp-config.phptất cả.

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

Nhưng thành thật mà nói, tại thời điểm này bạn chỉ cần thêm một mức độ trừu tượng dư thừa ở đây. Toàn bộ lý do wp-config.phplà riêng biệt ở nơi đầu tiên là vì nó đặc trưng cho môi trường. Bạn hoàn toàn không nên sao chép nó từ một máy chủ cục bộ sang sản xuất ... vì vậy nó hoàn toàn không thuộc quyền kiểm soát phiên bản.


Nó có vẻ như là một số công việc bổ sung, nhưng tôi có thể thấy những lợi ích trong việc đảm bảo rằng tất cả các cài đặt wp-config được đồng bộ giữa các môi trường.
jjeaton

Chia tách wp-config.phpcó một lợi ích bổ sung: bạn có thể đưa conf.phpvào một tập lệnh không phải WP mà không cần tải toàn bộ WordPress.
Tamlyn

4

Ví dụ của Mark giả định rằng bạn đang làm việc với một repo riêng:

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

Thay vì xác định thông tin đăng nhập, bạn có thể dễ dàng tạo tệp sản xuất-config.php và đưa nó vào kiểm tra có điều kiện:

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

Sau đó, trong sản xuất không cấu hình của bạn-config.php:

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

Ngay cả khi đó là repo riêng, tôi sẽ không muốn mật khẩu được lưu trong đó và muốn linh hoạt để công khai repo nếu tôi muốn. Sản xuất-config.php có lẽ là một cách tốt để đi.
jjeaton

2

Bạn có thể cam kết wp-config.phptệp vào kho lưu trữ mà không cần chuỗi bí mật, sau đó chạy:

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

Điều này sẽ cho git giả định rằng tập tin là tốt, không thay đổi.


4
Điều tốt để biết, không biết về assume-unchangedchuyển đổi nhưng đây là hai điểm của tôi: (1) Nếu bạn git thêm tệp trực tiếp, nó sẽ được thêm vào chỉ mục. Vì vậy, có một rủi ro bạn có thể vô tình thêm nó vào một lúc nào đó. (2) Hợp nhất một cam kết với cờ này sẽ khiến việc hợp nhất không thành công một cách duyên dáng, do đó bạn có thể xử lý thủ công khiến điều này không phải là một giải pháp tao nhã. Nó chỉ có thể được sử dụng để tạm thời bỏ qua các thay đổi trong khi một cái gì đó giống như một phiên phát triển. Tại đây đọc thêm - git yet.com/inter Ngay 2009/02/18 / Mạnh
Ashfame
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.