Skip to content

Instantly share code, notes, and snippets.

@aslafy-z
Last active November 17, 2020 00:06
Show Gist options
  • Save aslafy-z/d244f87cf5647669d8d191808c7215dc to your computer and use it in GitHub Desktop.
Save aslafy-z/d244f87cf5647669d8d191808c7215dc to your computer and use it in GitHub Desktop.
Generate wp-config.php from env variables
#!/bin/sh
set -e
if [ -z "$1" ]; then
echo "Usage: ./wp-config.sh <wp-config.php-path>"
exit 1
fi
WP_CONFIG_FILE=$1
# Ensure all variables are bound
if \
[ -z "$DB_NAME" ] || [ -z "$DB_HOST" ] || [ -z "$DB_PORT" ] || [ -z "$DB_USER" ] || \
[ -z "$DB_PASS" ] || [ -z "$DB_PREFIX" ] || [ -z "$WP_DEBUG" ] || \
[ -z "$WP_AUTH_KEY" ] || [ -z "$WP_SECURE_AUTH_KEY" ] || [ -z "$WP_LOGGED_IN_KEY" ] || \
[ -z "$WP_NONCE_KEY" ] || [ -z "$WP_AUTH_SALT" ] || [ -z "$WP_SECURE_AUTH_SALT" ] || \
[ -z "$WP_LOGGED_IN_SALT" ] || [ -z "$WP_NONCE_SALT" ]; then
echo "All variables have to be defined."
exit 1
fi
# Original wp-config.php file from Wordpress 4.9.6
cat > $WP_CONFIG_FILE << 'EOM'
<?php
/**
* The base configuration for WordPress
*
* The wp-config.php creation script uses this file during the
* installation. You don't have to use the web site, you can
* copy this file to "wp-config.php" and fill in the values.
*
* This file contains the following configurations:
*
* * MySQL settings
* * Secret keys
* * Database table prefix
* * ABSPATH
*
* @link https://codex.wordpress.org/Editing_wp-config.php
*
* @package WordPress
*/
// ** 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');
/** 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', '');
/**#@+
* 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');
/**#@-*/
/**
* 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_';
/**
* 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.
*
* For information on other constants that can be used for debugging,
* visit the Codex.
*
* @link https://codex.wordpress.org/Debugging_in_WordPress
*/
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');
EOM
# Replace DB config
sed -i $WP_CONFIG_FILE \
-e "s/database_name_here/$DB_NAME/" \
-e "s/username_here/$DB_USER/" \
-e "s/password_here/$DB_PASS/" \
-e "s/localhost/$DB_HOST:$DB_PORT/" \
-e "s/wp_/$DB_PREFIX/"
# Replace constants value
sed -i $WP_CONFIG_FILE \
-e "s/WP_DEBUG', false/WP_DEBUG', ${WP_DEBUG:-false}/"
# Replace salts hashs
sed -i $WP_CONFIG_FILE -e "1,/put your unique phrase here/s/put your unique phrase here/$(echo $WP_AUTH_KEY | sed -e 's/[\/&]/\\&/g')/"
sed -i $WP_CONFIG_FILE -e "1,/put your unique phrase here/s/put your unique phrase here/$(echo $WP_SECURE_AUTH_KEY | sed -e 's/[\/&]/\\&/g')/"
sed -i $WP_CONFIG_FILE -e "1,/put your unique phrase here/s/put your unique phrase here/$(echo $WP_LOGGED_IN_KEY | sed -e 's/[\/&]/\\&/g')/"
sed -i $WP_CONFIG_FILE -e "1,/put your unique phrase here/s/put your unique phrase here/$(echo $WP_NONCE_KEY | sed -e 's/[\/&]/\\&/g')/"
sed -i $WP_CONFIG_FILE -e "1,/put your unique phrase here/s/put your unique phrase here/$(echo $WP_AUTH_SALT | sed -e 's/[\/&]/\\&/g')/"
sed -i $WP_CONFIG_FILE -e "1,/put your unique phrase here/s/put your unique phrase here/$(echo $WP_SECURE_AUTH_SALT | sed -e 's/[\/&]/\\&/g')/"
sed -i $WP_CONFIG_FILE -e "1,/put your unique phrase here/s/put your unique phrase here/$(echo $WP_LOGGED_IN_SALT | sed -e 's/[\/&]/\\&/g')/"
sed -i $WP_CONFIG_FILE -e "1,/put your unique phrase here/s/put your unique phrase here/$(echo $WP_NONCE_SALT | sed -e 's/[\/&]/\\&/g')/"
@aslafy-z
Copy link
Author

Works now with GNU and BSD sed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment