Skip to content

Instantly share code, notes, and snippets.

@leogdion
Last active December 16, 2015 07:09
Show Gist options
  • Save leogdion/5396458 to your computer and use it in GitHub Desktop.
Save leogdion/5396458 to your computer and use it in GitHub Desktop.
#!/bin/bash
# Generate a random password
# $1 = number of characters; defaults to 32
# $2 = include special characters; 1 = yes, 0 = no; defaults to 1
function randpass() {
[ "$2" == "0" ] && CHAR="[:alnum:]" || CHAR="[:graph:]"
cat /dev/urandom | tr -cd "$CHAR" | head -c ${1:-32}
echo
}
domain=$1
database=${domain//\./_}
if [ ${#domain} -gt 15 ]
then
username=${database//[aeiou]}
username=${username:0:15}
else
username=$database
fi
password=`randpass 31 0`
nginx_conf_directory=/etc/nginx/conf.d
output_directory=/usr/share/nginx
sql_grant="CREATE DATABASE ${database};GRANT ALL ON $database.* TO '$username'@'localhost' IDENTIFIED BY '$password';FLUSH PRIVILEGES;"
EXPECTED_ARGS=1
E_BADARGS=65
if [ $# -ne $EXPECTED_ARGS ]
then
echo "Usage: `basename $0` {hostname}"
exit $E_BADARGS
fi
mkdir /tmp/$domain
wget http://wordpress.org/latest.tar.gz -O /tmp/$domain/latest.tar.gz
cd /tmp/$domain
tar -xvf latest.tar.gz >/dev/null
mv /tmp/$domain/wordpress $output_directory/$domain
echo $password
mysql -uroot -p -e "${sql_grant}"
rm -r /tmp/$domain
echo "
#
# A virtual host using mix of IP-, name-, and port-based configuration
#
server {
listen 80;
server_name $domain;
root $output_directory/$domain;
location / {
index index.html index.php index.htm;
if (-f \$request_filename) {
expires 30d;
break;
}
if (!-e \$request_filename) {
rewrite ^(.+)$ /index.php?q=\$1 last;
}
}
location ~ \.php$ {
# Filter out arbitrary code execution
location ~ \..*/.*\.php$ {return 404;}
include fastcgi_params;
fastcgi_pass unix:/tmp/php.socket;
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
fastcgi_param PHP_VALUE "error_log=/var/log/nginx/$domain.php.error.log";
}
}
" >$nginx_conf_directory/$domain.conf
echo "<?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
*/
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', '$database');
/** MySQL database username */
define('DB_USER', '$username');
/** MySQL database password */
define('DB_PASSWORD', '$password');
/** 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
*/
" >$output_directory/$domain/wp-config.php
wget -qO- https://api.wordpress.org/secret-key/1.1/salt >>$output_directory/$domain/wp-config.php
echo "/**#@-*/
/**
* 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');" >>$output_directory/$domain/wp-config.php
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment