-
-
Save schutzsmith/5b2e9af266078b9865cad17b16ece5ce to your computer and use it in GitHub Desktop.
Custom VVV Variable Provisioning for WordPress sites
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# #!/bin/bash | |
# # | |
# # provision.sh | |
# # | |
# # This file is specified in Vagrantfile and is loaded by Vagrant as the primary | |
# # provisioning script whenever the commands `vagrant up`, `vagrant provision`, | |
# # or `vagrant reload` are used. It provides all of the default packages and | |
# # configurations included with Varying Vagrant Vagrants. | |
# # By storing the date now, we can calculate the duration of provisioning at the | |
# # end of this script. | |
# start_seconds="$(date +%s)" | |
# # Network Detection | |
# # | |
# # Make an HTTP request to google.com to determine if outside access is available | |
# # to us. If 3 attempts with a timeout of 5 seconds are not successful, then we'll | |
# # skip a few things further in provisioning rather than create a bunch of errors. | |
# if [[ "$(wget --tries=3 --timeout=5 --spider http://google.com 2>&1 | grep 'connected')" ]]; then | |
# echo "Network connection detected..." | |
# ping_result="Connected" | |
# else | |
# echo "Network connection not detected. Unable to reach google.com..." | |
# ping_result="Not Connected" | |
# fi | |
# # PACKAGE INSTALLATION | |
# # | |
# # Build a bash array to pass all of the packages we want to install to a single | |
# # apt-get command. This avoids doing all the leg work each time a package is | |
# # set to install. It also allows us to easily comment out or add single | |
# # packages. We set the array as empty to begin with so that we can append | |
# # individual packages to it as required. | |
# apt_package_install_list=() | |
# # Start with a bash array containing all packages we want to install in the | |
# # virtual machine. We'll then loop through each of these and check individual | |
# # status before adding them to the apt_package_install_list array. | |
# apt_package_check_list=( | |
# # PHP5 | |
# # | |
# # Our base packages for php5. As long as php5-fpm and php5-cli are | |
# # installed, there is no need to install the general php5 package, which | |
# # can sometimes install apache as a requirement. | |
# php5-fpm | |
# php5-cli | |
# # Common and dev packages for php | |
# php5-common | |
# php5-dev | |
# # Extra PHP modules that we find useful | |
# php5-memcache | |
# php5-imagick | |
# php5-mcrypt | |
# php5-mysql | |
# php5-imap | |
# php5-curl | |
# php-pear | |
# php5-gd | |
# # nginx is installed as the default web server | |
# nginx | |
# # memcached is made available for object caching | |
# memcached | |
# # mysql is the default database | |
# mysql-server | |
# # other packages that come in handy | |
# imagemagick | |
# subversion | |
# git-core | |
# zip | |
# unzip | |
# ngrep | |
# curl | |
# make | |
# vim | |
# colordiff | |
# postfix | |
# # ntp service to keep clock current | |
# ntp | |
# # Req'd for i18n tools | |
# gettext | |
# # Req'd for Webgrind | |
# graphviz | |
# # dos2unix | |
# # Allows conversion of DOS style line endings to something we'll have less | |
# # trouble with in Linux. | |
# dos2unix | |
# # nodejs for use by grunt | |
# g++ | |
# nodejs | |
# #Mailcatcher requirement | |
# libsqlite3-dev | |
# ) | |
# echo "Check for apt packages to install..." | |
# # Loop through each of our packages that should be installed on the system. If | |
# # not yet installed, it should be added to the array of packages to install. | |
# for pkg in "${apt_package_check_list[@]}"; do | |
# package_version="$(dpkg -s $pkg 2>&1 | grep 'Version:' | cut -d " " -f 2)" | |
# if [[ -n "${package_version}" ]]; then | |
# space_count="$(expr 20 - "${#pkg}")" #11 | |
# pack_space_count="$(expr 30 - "${#package_version}")" | |
# real_space="$(expr ${space_count} + ${pack_space_count} + ${#package_version})" | |
# printf " * $pkg %${real_space}.${#package_version}s ${package_version}\n" | |
# else | |
# echo " *" $pkg [not installed] | |
# apt_package_install_list+=($pkg) | |
# fi | |
# done | |
# # MySQL | |
# # | |
# # Use debconf-set-selections to specify the default password for the root MySQL | |
# # account. This runs on every provision, even if MySQL has been installed. If | |
# # MySQL is already installed, it will not affect anything. | |
# echo mysql-server mysql-server/root_password password root | debconf-set-selections | |
# echo mysql-server mysql-server/root_password_again password root | debconf-set-selections | |
# # Postfix | |
# # | |
# # Use debconf-set-selections to specify the selections in the postfix setup. Set | |
# # up as an 'Internet Site' with the host name 'vvv'. Note that if your current | |
# # Internet connection does not allow communication over port 25, you will not be | |
# # able to send mail, even with postfix installed. | |
# echo postfix postfix/main_mailer_type select Internet Site | debconf-set-selections | |
# echo postfix postfix/mailname string vvv | debconf-set-selections | |
# # Disable ipv6 as some ISPs/mail servers have problems with it | |
# echo "inet_protocols = ipv4" >> /etc/postfix/main.cf | |
# # Provide our custom apt sources before running `apt-get update` | |
# ln -sf /srv/config/apt-source-append.list /etc/apt/sources.list.d/vvv-sources.list | |
# echo "Linked custom apt sources" | |
# if [[ $ping_result == "Connected" ]]; then | |
# # If there are any packages to be installed in the apt_package_list array, | |
# # then we'll run `apt-get update` and then `apt-get install` to proceed. | |
# if [[ ${#apt_package_install_list[@]} = 0 ]]; then | |
# echo -e "No apt packages to install.\n" | |
# else | |
# # Before running `apt-get update`, we should add the public keys for | |
# # the packages that we are installing from non standard sources via | |
# # our appended apt source.list | |
# # Retrieve the Nginx signing key from nginx.org | |
# echo "Applying Nginx signing key..." | |
# wget --quiet http://nginx.org/keys/nginx_signing.key -O- | apt-key add - | |
# # Apply the nodejs assigning key | |
# echo "Applying nodejs signing key..." | |
# apt-key adv --quiet --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C7917B12 2>&1 | grep "gpg:" | |
# apt-key export C7917B12 | apt-key add - | |
# # update all of the package references before installing anything | |
# echo "Running apt-get update..." | |
# apt-get update --assume-yes | |
# # install required packages | |
# echo "Installing apt-get packages..." | |
# apt-get install --assume-yes ${apt_package_install_list[@]} | |
# # Clean up apt caches | |
# apt-get clean | |
# fi | |
# # npm | |
# # | |
# # Make sure we have the latest npm version and the update checker module | |
# npm install -g npm | |
# npm install -g npm-check-updates | |
# # xdebug | |
# # | |
# # XDebug 2.2.3 is provided with the Ubuntu install by default. The PECL | |
# # installation allows us to use a later version. Not specifying a version | |
# # will load the latest stable. | |
# pecl install xdebug | |
# # ack-grep | |
# # | |
# # Install ack-rep directory from the version hosted at beyondgrep.com as the | |
# # PPAs for Ubuntu Precise are not available yet. | |
# if [[ -f /usr/bin/ack ]]; then | |
# echo "ack-grep already installed" | |
# else | |
# echo "Installing ack-grep as ack" | |
# curl -s http://beyondgrep.com/ack-2.04-single-file > /usr/bin/ack && chmod +x /usr/bin/ack | |
# fi | |
# # COMPOSER | |
# # | |
# # Install Composer if it is not yet available. | |
# if [[ ! -n "$(composer --version --no-ansi | grep 'Composer version')" ]]; then | |
# echo "Installing Composer..." | |
# curl -sS https://getcomposer.org/installer | php | |
# chmod +x composer.phar | |
# mv composer.phar /usr/local/bin/composer | |
# fi | |
# # Update both Composer and any global packages. Updates to Composer are direct from | |
# # the master branch on its GitHub repository. | |
# if [[ -n "$(composer --version --no-ansi | grep 'Composer version')" ]]; then | |
# echo "Updating Composer..." | |
# COMPOSER_HOME=/usr/local/src/composer composer self-update | |
# COMPOSER_HOME=/usr/local/src/composer composer -q global require --no-update phpunit/phpunit:4.3.* | |
# COMPOSER_HOME=/usr/local/src/composer composer -q global require --no-update phpunit/php-invoker:1.1.* | |
# COMPOSER_HOME=/usr/local/src/composer composer -q global require --no-update mockery/mockery:0.9.* | |
# COMPOSER_HOME=/usr/local/src/composer composer -q global require --no-update d11wtq/boris:v1.0.8 | |
# COMPOSER_HOME=/usr/local/src/composer composer -q global config bin-dir /usr/local/bin | |
# COMPOSER_HOME=/usr/local/src/composer composer global update | |
# fi | |
# # Grunt | |
# # | |
# # Install or Update Grunt based on current state. Updates are direct | |
# # from NPM | |
# if [[ "$(grunt --version)" ]]; then | |
# echo "Updating Grunt CLI" | |
# npm update -g grunt-cli &>/dev/null | |
# npm update -g grunt-sass &>/dev/null | |
# npm update -g grunt-cssjanus &>/dev/null | |
# npm update -g grunt-rtlcss &>/dev/null | |
# else | |
# echo "Installing Grunt CLI" | |
# npm install -g grunt-cli &>/dev/null | |
# npm install -g grunt-sass &>/dev/null | |
# npm install -g grunt-cssjanus &>/dev/null | |
# npm install -g grunt-rtlcss &>/dev/null | |
# fi | |
# # Graphviz | |
# # | |
# # Set up a symlink between the Graphviz path defined in the default Webgrind | |
# # config and actual path. | |
# echo "Adding graphviz symlink for Webgrind..." | |
# ln -sf /usr/bin/dot /usr/local/bin/dot | |
# else | |
# echo -e "\nNo network connection available, skipping package installation" | |
# fi | |
# # Configuration for nginx | |
# if [[ ! -e /etc/nginx/server.key ]]; then | |
# echo "Generate Nginx server private key..." | |
# vvvgenrsa="$(openssl genrsa -out /etc/nginx/server.key 2048 2>&1)" | |
# echo "$vvvgenrsa" | |
# fi | |
# if [[ ! -e /etc/nginx/server.csr ]]; then | |
# echo "Generate Certificate Signing Request (CSR)..." | |
# openssl req -new -batch -key /etc/nginx/server.key -out /etc/nginx/server.csr | |
# fi | |
# if [[ ! -e /etc/nginx/server.crt ]]; then | |
# echo "Sign the certificate using the above private key and CSR..." | |
# vvvsigncert="$(openssl x509 -req -days 365 -in /etc/nginx/server.csr -signkey /etc/nginx/server.key -out /etc/nginx/server.crt 2>&1)" | |
# echo "$vvvsigncert" | |
# fi | |
# echo -e "\nSetup configuration files..." | |
# Used to to ensure proper services are started on `vagrant up` | |
cp /srv/config/init/vvv-start.conf /etc/init/vvv-start.conf | |
echo " * Copied /srv/config/init/vvv-start.conf to /etc/init/vvv-start.conf" | |
# Copy nginx configuration from local | |
cp /srv/config/nginx-config/nginx.conf /etc/nginx/nginx.conf | |
cp /srv/config/nginx-config/nginx-wp-common.conf /etc/nginx/nginx-wp-common.conf | |
if [[ ! -d /etc/nginx/custom-sites ]]; then | |
mkdir /etc/nginx/custom-sites/ | |
fi | |
rsync -rvzh --delete /srv/config/nginx-config/sites/ /etc/nginx/custom-sites/ | |
echo " * Copied /srv/config/nginx-config/nginx.conf to /etc/nginx/nginx.conf" | |
echo " * Copied /srv/config/nginx-config/nginx-wp-common.conf to /etc/nginx/nginx-wp-common.conf" | |
echo " * Rsync'd /srv/config/nginx-config/sites/ to /etc/nginx/custom-sites" | |
# Copy php-fpm configuration from local | |
cp /srv/config/php5-fpm-config/php5-fpm.conf /etc/php5/fpm/php5-fpm.conf | |
cp /srv/config/php5-fpm-config/www.conf /etc/php5/fpm/pool.d/www.conf | |
cp /srv/config/php5-fpm-config/php-custom.ini /etc/php5/fpm/conf.d/php-custom.ini | |
cp /srv/config/php5-fpm-config/opcache.ini /etc/php5/fpm/conf.d/opcache.ini | |
cp /srv/config/php5-fpm-config/xdebug.ini /etc/php5/mods-available/xdebug.ini | |
# Find the path to Xdebug and prepend it to xdebug.ini | |
XDEBUG_PATH=$( find /usr -name 'xdebug.so' | head -1 ) | |
sed -i "1izend_extension=\"$XDEBUG_PATH\"" /etc/php5/mods-available/xdebug.ini | |
echo " * Copied /srv/config/php5-fpm-config/php5-fpm.conf to /etc/php5/fpm/php5-fpm.conf" | |
echo " * Copied /srv/config/php5-fpm-config/www.conf to /etc/php5/fpm/pool.d/www.conf" | |
echo " * Copied /srv/config/php5-fpm-config/php-custom.ini to /etc/php5/fpm/conf.d/php-custom.ini" | |
echo " * Copied /srv/config/php5-fpm-config/opcache.ini to /etc/php5/fpm/conf.d/opcache.ini" | |
echo " * Copied /srv/config/php5-fpm-config/xdebug.ini to /etc/php5/mods-available/xdebug.ini" | |
# Copy memcached configuration from local | |
cp /srv/config/memcached-config/memcached.conf /etc/memcached.conf | |
echo " * Copied /srv/config/memcached-config/memcached.conf to /etc/memcached.conf" | |
# Copy custom dotfiles and bin file for the vagrant user from local | |
cp /srv/config/bash_profile /home/vagrant/.bash_profile | |
cp /srv/config/bash_aliases /home/vagrant/.bash_aliases | |
cp /srv/config/vimrc /home/vagrant/.vimrc | |
if [[ ! -d /home/vagrant/.subversion ]]; then | |
mkdir /home/vagrant/.subversion | |
fi | |
cp /srv/config/subversion-servers /home/vagrant/.subversion/servers | |
if [[ ! -d /home/vagrant/bin ]]; then | |
mkdir /home/vagrant/bin | |
fi | |
rsync -rvzh --delete /srv/config/homebin/ /home/vagrant/bin/ | |
echo " * Copied /srv/config/bash_profile to /home/vagrant/.bash_profile" | |
echo " * Copied /srv/config/bash_aliases to /home/vagrant/.bash_aliases" | |
echo " * Copied /srv/config/vimrc to /home/vagrant/.vimrc" | |
echo " * Copied /srv/config/subversion-servers to /home/vagrant/.subversion/servers" | |
echo " * rsync'd /srv/config/homebin to /home/vagrant/bin" | |
# If a bash_prompt file exists in the VVV config/ directory, copy to the VM. | |
if [[ -f /srv/config/bash_prompt ]]; then | |
cp /srv/config/bash_prompt /home/vagrant/.bash_prompt | |
echo " * Copied /srv/config/bash_prompt to /home/vagrant/.bash_prompt" | |
fi | |
# Mailcatcher | |
# | |
# Installs mailcatcher using RVM. RVM allows us to install the | |
# current version of ruby and all mailcatcher dependencies reliably. | |
# rvm_version="$(/usr/bin/env rvm --silent --version 2>&1 | grep 'rvm ' | cut -d " " -f 2)" | |
# if [[ -n "${rvm_version}" ]]; then | |
# pkg="RVM" | |
# space_count="$(expr 20 - "${#pkg}")" #11 | |
# pack_space_count="$(expr 30 - "${#rvm_version}")" | |
# real_space="$(expr ${space_count} + ${pack_space_count} + ${#rvm_version})" | |
# printf " * $pkg %${real_space}.${#rvm_version}s ${rvm_version}\n" | |
# else | |
# # RVM key D39DC0E3 | |
# # Signatures introduced in 1.26.0 | |
# gpg -q --no-tty --batch --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys D39DC0E3 | |
# gpg -q --no-tty --batch --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys BF04FF17 | |
# printf " * RVM [not installed]\n Installing from source" | |
# curl --silent -L https://get.rvm.io | sudo bash -s stable --ruby | |
# source /usr/local/rvm/scripts/rvm | |
# fi | |
# mailcatcher_version="$(/usr/bin/env mailcatcher --version 2>&1 | grep 'mailcatcher ' | cut -d " " -f 2)" | |
# if [[ -n "${mailcatcher_version}" ]]; then | |
# pkg="Mailcatcher" | |
# space_count="$(expr 20 - "${#pkg}")" #11 | |
# pack_space_count="$(expr 30 - "${#mailcatcher_version}")" | |
# real_space="$(expr ${space_count} + ${pack_space_count} + ${#mailcatcher_version})" | |
# printf " * $pkg %${real_space}.${#mailcatcher_version}s ${mailcatcher_version}\n" | |
# else | |
# echo " * Mailcatcher [not installed]" | |
# /usr/bin/env rvm default@mailcatcher --create do gem install mailcatcher --no-rdoc --no-ri | |
# /usr/bin/env rvm default@mailcatcher --create do gem install mailcatcher --no-rdoc --no-ri | |
# /usr/bin/env rvm wrapper default@mailcatcher --no-prefix mailcatcher catchmail | |
# # /usr/bin/env rvm default@mailcatcher do gem install i18n -v 0.6.11 | |
# # /usr/bin/env rvm default@mailcatcher do gem uninstall i18n -Ix --version '>0.6.11' | |
# fi | |
# if [[ -f /etc/init/mailcatcher.conf ]]; then | |
# echo " *" Mailcatcher upstart already configured. | |
# else | |
# cp /srv/config/init/mailcatcher.conf /etc/init/mailcatcher.conf | |
# echo " * Copied /srv/config/init/mailcatcher.conf to /etc/init/mailcatcher.conf" | |
# fi | |
# if [[ -f /etc/php5/mods-available/mailcatcher.ini ]]; then | |
# echo " *" Mailcatcher php5 fpm already configured. | |
# else | |
# # cp /srv/config/php5-fpm-config/mailcatcher.ini /etc/php5/fpm/conf.d/mailcatcher.ini | |
# cp /srv/config/php5-fpm-config/mailcatcher.ini /etc/php5/mods-available/mailcatcher.ini | |
# echo " * Copied /srv/config/php5-fpm-config/mailcatcher.ini to /etc/php5/mods-available/mailcatcher.ini" | |
# fi | |
# RESTART SERVICES | |
# | |
# Make sure the services we expect to be running are running. | |
echo -e "\nRestart services..." | |
service nginx restart | |
service memcached restart | |
service mailcatcher restart | |
# Disable PHP Xdebug module by default | |
php5dismod xdebug | |
# Enable PHP mcrypt module by default | |
php5enmod mcrypt | |
# Enable PHP mailcatcher sendmail settings by default | |
php5enmod mailcatcher | |
service php5-fpm restart | |
# If MySQL is installed, go through the various imports and service tasks. | |
exists_mysql="$(service mysql status)" | |
if [[ "mysql: unrecognized service" != "${exists_mysql}" ]]; then | |
echo -e "\nSetup MySQL configuration file links..." | |
# Copy mysql configuration from local | |
cp /srv/config/mysql-config/my.cnf /etc/mysql/my.cnf | |
cp /srv/config/mysql-config/root-my.cnf /home/vagrant/.my.cnf | |
echo " * Copied /srv/config/mysql-config/my.cnf to /etc/mysql/my.cnf" | |
echo " * Copied /srv/config/mysql-config/root-my.cnf to /home/vagrant/.my.cnf" | |
# MySQL gives us an error if we restart a non running service, which | |
# happens after a `vagrant halt`. Check to see if it's running before | |
# deciding whether to start or restart. | |
if [[ "mysql stop/waiting" == "${exists_mysql}" ]]; then | |
echo "service mysql start" | |
service mysql start | |
else | |
echo "service mysql restart" | |
service mysql restart | |
fi | |
# IMPORT SQL | |
# | |
# Create the databases (unique to system) that will be imported with | |
# the mysqldump files located in database/backups/ | |
if [[ -f /srv/database/init-custom.sql ]]; then | |
mysql -u root -proot < /srv/database/init-custom.sql | |
echo -e "\nInitial custom MySQL scripting..." | |
else | |
echo -e "\nNo custom MySQL scripting found in database/init-custom.sql, skipping..." | |
fi | |
# Setup MySQL by importing an init file that creates necessary | |
# users and databases that our vagrant setup relies on. | |
mysql -u root -proot < /srv/database/init.sql | |
echo "Initial MySQL prep..." | |
# Process each mysqldump SQL file in database/backups to import | |
# an initial data set for MySQL. | |
/srv/database/import-sql.sh | |
else | |
echo -e "\nMySQL is not installed. No databases imported." | |
fi | |
# Run wp-cli, tar, and npm as `vagrant` user instead of `root` | |
if (( $EUID == 0 )); then | |
wp() { sudo -EH -u vagrant -- wp "$@"; } | |
tar() { sudo -EH -u vagrant -- tar "$@"; } | |
npm() { sudo -EH -u vagrant -- npm "$@"; } | |
fi | |
if [[ $ping_result == "Connected" ]]; then | |
# # WP-CLI Install | |
# if [[ ! -d /srv/www/wp-cli ]]; then | |
# echo -e "\nDownloading wp-cli, see http://wp-cli.org" | |
# git clone https://github.com/wp-cli/wp-cli.git /srv/www/wp-cli | |
# cd /srv/www/wp-cli | |
# composer install | |
# else | |
# echo -e "\nUpdating wp-cli..." | |
# cd /srv/www/wp-cli | |
# git pull --rebase origin master | |
# composer update | |
# fi | |
# # Link `wp` to the `/usr/local/bin` directory | |
# ln -sf /srv/www/wp-cli/bin/wp /usr/local/bin/wp | |
# # Download and extract phpMemcachedAdmin to provide a dashboard view and | |
# # admin interface to the goings on of memcached when running | |
# if [[ ! -d /srv/www/default/memcached-admin ]]; then | |
# echo -e "\nDownloading phpMemcachedAdmin, see https://code.google.com/p/phpmemcacheadmin/" | |
# cd /srv/www/default | |
# wget -q -O phpmemcachedadmin.tar.gz 'https://phpmemcacheadmin.googlecode.com/files/phpMemcachedAdmin-1.2.2-r262.tar.gz' | |
# mkdir memcached-admin | |
# tar -xf phpmemcachedadmin.tar.gz --directory memcached-admin | |
# rm phpmemcachedadmin.tar.gz | |
# else | |
# echo "phpMemcachedAdmin already installed." | |
# fi | |
# # Checkout Opcache Status to provide a dashboard for viewing statistics | |
# # about PHP's built in opcache. | |
# if [[ ! -d /srv/www/default/opcache-status ]]; then | |
# echo -e "\nDownloading Opcache Status, see https://github.com/rlerdorf/opcache-status/" | |
# cd /srv/www/default | |
# git clone https://github.com/rlerdorf/opcache-status.git opcache-status | |
# else | |
# echo -e "\nUpdating Opcache Status" | |
# cd /srv/www/default/opcache-status | |
# git pull --rebase origin master | |
# fi | |
# # Webgrind install (for viewing callgrind/cachegrind files produced by | |
# # xdebug profiler) | |
# if [[ ! -d /srv/www/default/webgrind ]]; then | |
# echo -e "\nDownloading webgrind, see https://github.com/jokkedk/webgrind" | |
# git clone https://github.com/jokkedk/webgrind.git /srv/www/default/webgrind | |
# else | |
# echo -e "\nUpdating webgrind..." | |
# cd /srv/www/default/webgrind | |
# git pull --rebase origin master | |
# fi | |
# # PHP_CodeSniffer (for running WordPress-Coding-Standards) | |
# if [[ ! -d /srv/www/phpcs ]]; then | |
# echo -e "\nDownloading PHP_CodeSniffer (phpcs), see https://github.com/squizlabs/PHP_CodeSniffer" | |
# git clone -b master https://github.com/squizlabs/PHP_CodeSniffer.git /srv/www/phpcs | |
# else | |
# cd /srv/www/phpcs | |
# if [[ $(git rev-parse --abbrev-ref HEAD) == 'master' ]]; then | |
# echo -e "\nUpdating PHP_CodeSniffer (phpcs)..." | |
# git pull --no-edit origin master | |
# else | |
# echo -e "\nSkipped updating PHP_CodeSniffer since not on master branch" | |
# fi | |
# fi | |
# # Sniffs WordPress Coding Standards | |
# if [[ ! -d /srv/www/phpcs/CodeSniffer/Standards/WordPress ]]; then | |
# echo -e "\nDownloading WordPress-Coding-Standards, sniffs for PHP_CodeSniffer, see https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards" | |
# git clone -b master https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards.git /srv/www/phpcs/CodeSniffer/Standards/WordPress | |
# else | |
# cd /srv/www/phpcs/CodeSniffer/Standards/WordPress | |
# if [[ $(git rev-parse --abbrev-ref HEAD) == 'master' ]]; then | |
# echo -e "\nUpdating PHP_CodeSniffer WordPress Coding Standards..." | |
# git pull --no-edit origin master | |
# else | |
# echo -e "\nSkipped updating PHPCS WordPress Coding Standards since not on master branch" | |
# fi | |
# fi | |
# Install the standards in PHPCS | |
/srv/www/phpcs/scripts/phpcs --config-set installed_paths ./CodeSniffer/Standards/WordPress/ | |
/srv/www/phpcs/scripts/phpcs --config-set default_standard WordPress-Core | |
/srv/www/phpcs/scripts/phpcs -i | |
# Install and configure the latest stable version of WordPress | |
if [[ ! -d /srv/www/wordpress-default ]]; then | |
echo "Downloading WordPress Stable, see http://wordpress.org/" | |
cd /srv/www/ | |
curl -L -O https://wordpress.org/latest.tar.gz | |
tar -xvf latest.tar.gz | |
mv wordpress wordpress-default | |
rm latest.tar.gz | |
cd /srv/www/wordpress-default | |
echo "Configuring WordPress Stable..." | |
wp core config --dbname=wordpress_default --dbuser=wp --dbpass=wp --quiet --extra-php <<PHP | |
// Match any requests made via xip.io. | |
if ( isset( \$_SERVER['HTTP_HOST'] ) && preg_match('/^(local.wordpress.)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(.xip.io)\z/', \$_SERVER['HTTP_HOST'] ) ) { | |
define( 'WP_HOME', 'http://' . \$_SERVER['HTTP_HOST'] ); | |
define( 'WP_SITEURL', 'http://' . \$_SERVER['HTTP_HOST'] ); | |
} | |
define( 'WP_DEBUG', true ); | |
PHP | |
echo "Installing WordPress Stable..." | |
wp core install --url=local.wordpress.dev --quiet --title="Local WordPress Dev" --admin_name=admin --admin_email="[email protected]" --admin_password="password" | |
else | |
echo "Updating WordPress Stable..." | |
cd /srv/www/wordpress-default | |
wp core upgrade | |
fi | |
# Test to see if an svn upgrade is needed | |
# svn_test=$( svn status -u /srv/www/wordpress-develop/ 2>&1 ); | |
# if [[ $svn_test == *"svn upgrade"* ]]; then | |
# # If the wordpress-develop svn repo needed an upgrade, they probably all need it | |
# for repo in $(find /srv/www -maxdepth 5 -type d -name '.svn'); do | |
# svn upgrade "${repo/%\.svn/}" | |
# done | |
# fi; | |
# Checkout, install and configure WordPress trunk via core.svn | |
# if [[ ! -d /srv/www/wordpress-trunk ]]; then | |
# echo "Checking out WordPress trunk from core.svn, see https://core.svn.wordpress.org/trunk" | |
# svn checkout https://core.svn.wordpress.org/trunk/ /srv/www/wordpress-trunk | |
# cd /srv/www/wordpress-trunk | |
# echo "Configuring WordPress trunk..." | |
# wp core config --dbname=wordpress_trunk --dbuser=wp --dbpass=wp --quiet --extra-php <<PHP | |
# // Match any requests made via xip.io. | |
# if ( isset( \$_SERVER['HTTP_HOST'] ) && preg_match('/^(local.wordpress-trunk.)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(.xip.io)\z/', \$_SERVER['HTTP_HOST'] ) ) { | |
# define( 'WP_HOME', 'http://' . \$_SERVER['HTTP_HOST'] ); | |
# define( 'WP_SITEURL', 'http://' . \$_SERVER['HTTP_HOST'] ); | |
# } | |
# define( 'WP_DEBUG', true ); | |
# PHP | |
# echo "Installing WordPress trunk..." | |
# wp core install --url=local.wordpress-trunk.dev --quiet --title="Local WordPress Trunk Dev" --admin_name=admin --admin_email="[email protected]" --admin_password="password" | |
# else | |
# echo "Updating WordPress trunk..." | |
# cd /srv/www/wordpress-trunk | |
# svn up | |
# fi | |
# # Checkout, install and configure WordPress trunk via develop.svn | |
# if [[ ! -d /srv/www/wordpress-develop ]]; then | |
# echo "Checking out WordPress trunk from develop.svn, see https://develop.svn.wordpress.org/trunk" | |
# svn checkout https://develop.svn.wordpress.org/trunk/ /srv/www/wordpress-develop | |
# cd /srv/www/wordpress-develop/src/ | |
# echo "Configuring WordPress develop..." | |
# wp core config --dbname=wordpress_develop --dbuser=wp --dbpass=wp --quiet --extra-php <<PHP | |
# // Match any requests made via xip.io. | |
# if ( isset( \$_SERVER['HTTP_HOST'] ) && preg_match('/^(src|build)(.wordpress-develop.)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(.xip.io)\z/', \$_SERVER['HTTP_HOST'] ) ) { | |
# define( 'WP_HOME', 'http://' . \$_SERVER['HTTP_HOST'] ); | |
# define( 'WP_SITEURL', 'http://' . \$_SERVER['HTTP_HOST'] ); | |
# } else if ( 'build' === basename( dirname( __FILE__ ) ) ) { | |
# // Allow (src|build).wordpress-develop.dev to share the same Database | |
# define( 'WP_HOME', 'http://build.wordpress-develop.dev' ); | |
# define( 'WP_SITEURL', 'http://build.wordpress-develop.dev' ); | |
# } | |
# define( 'WP_DEBUG', true ); | |
# PHP | |
# echo "Installing WordPress develop..." | |
# wp core install --url=src.wordpress-develop.dev --quiet --title="WordPress Develop" --admin_name=admin --admin_email="[email protected]" --admin_password="password" | |
# cp /srv/config/wordpress-config/wp-tests-config.php /srv/www/wordpress-develop/ | |
# cd /srv/www/wordpress-develop/ | |
# echo "Running npm install for the first time, this may take several minutes..." | |
# npm install &>/dev/null | |
# else | |
# echo "Updating WordPress develop..." | |
# cd /srv/www/wordpress-develop/ | |
# if [[ -e .svn ]]; then | |
# svn up | |
# else | |
# if [[ $(git rev-parse --abbrev-ref HEAD) == 'master' ]]; then | |
# git pull --no-edit git://develop.git.wordpress.org/ master | |
# else | |
# echo "Skip auto git pull on develop.git.wordpress.org since not on master branch" | |
# fi | |
# fi | |
# echo "Updating npm packages..." | |
# npm install &>/dev/null | |
# fi | |
# if [[ ! -d /srv/www/wordpress-develop/build ]]; then | |
# echo "Initializing grunt in WordPress develop... This may take a few moments." | |
# cd /srv/www/wordpress-develop/ | |
# grunt | |
# fi | |
# # Download phpMyAdmin | |
# if [[ ! -d /srv/www/default/database-admin ]]; then | |
# echo "Downloading phpMyAdmin 4.2.13.1..." | |
# cd /srv/www/default | |
# wget -q -O phpmyadmin.tar.gz 'http://sourceforge.net/projects/phpmyadmin/files/phpMyAdmin/4.2.13.1/phpMyAdmin-4.2.13.1-all-languages.tar.gz/download' | |
# tar -xf phpmyadmin.tar.gz | |
# mv phpMyAdmin-4.2.13.1-all-languages database-admin | |
# rm phpmyadmin.tar.gz | |
# else | |
# echo "PHPMyAdmin already installed." | |
# fi | |
# cp /srv/config/phpmyadmin-config/config.inc.php /srv/www/default/database-admin/ | |
else | |
echo -e "\nNo network available, skipping network installations" | |
fi | |
# Find new sites to setup. | |
# Kill previously symlinked Nginx configs | |
# We can't know what sites have been removed, so we have to remove all | |
# the configs and add them back in again. | |
find /etc/nginx/custom-sites -name 'vvv-auto-*.conf' -exec rm {} \; | |
# Look for site setup scripts | |
for SITE_CONFIG_FILE in $(find /srv/www -maxdepth 5 -name 'vvv-init.sh'); do | |
DIR="$(dirname $SITE_CONFIG_FILE)" | |
( | |
cd "$DIR" | |
source vvv-init.sh | |
) | |
done | |
# Look for Nginx vhost files, symlink them into the custom sites dir | |
for SITE_CONFIG_FILE in $(find /srv/www -maxdepth 5 -name 'vvv-nginx.conf'); do | |
DEST_CONFIG_FILE=${SITE_CONFIG_FILE//\/srv\/www\//} | |
DEST_CONFIG_FILE=${DEST_CONFIG_FILE//\//\-} | |
DEST_CONFIG_FILE=${DEST_CONFIG_FILE/%-vvv-nginx.conf/} | |
DEST_CONFIG_FILE="vvv-auto-$DEST_CONFIG_FILE-$(md5sum <<< "$SITE_CONFIG_FILE" | cut -c1-32).conf" | |
# We allow the replacement of the {vvv_path_to_folder} token with | |
# whatever you want, allowing flexible placement of the site folder | |
# while still having an Nginx config which works. | |
DIR="$(dirname $SITE_CONFIG_FILE)" | |
sed "s#{vvv_path_to_folder}#$DIR#" "$SITE_CONFIG_FILE" > /etc/nginx/custom-sites/"$DEST_CONFIG_FILE" | |
done | |
# Parse any vvv-hosts file located in www/ or subdirectories of www/ | |
# for domains to be added to the virtual machine's host file so that it is | |
# self aware. | |
# | |
# Domains should be entered on new lines. | |
echo "Cleaning the virtual machine's /etc/hosts file..." | |
sed -n '/# vvv-auto$/!p' /etc/hosts > /tmp/hosts | |
mv /tmp/hosts /etc/hosts | |
echo "Adding domains to the virtual machine's /etc/hosts file..." | |
find /srv/www/ -maxdepth 5 -name 'vvv-hosts' | \ | |
while read hostfile; do | |
while IFS='' read -r line || [ -n "$line" ]; do | |
if [[ "#" != ${line:0:1} ]]; then | |
if [[ -z "$(grep -q "^127.0.0.1 $line$" /etc/hosts)" ]]; then | |
echo "127.0.0.1 $line # vvv-auto" >> /etc/hosts | |
echo " * Added $line from $hostfile" | |
fi | |
fi | |
done < "$hostfile" | |
done | |
end_seconds="$(date +%s)" | |
echo "-----------------------------" | |
echo "Provisioning complete in "$(expr $end_seconds - $start_seconds)" seconds" | |
if [[ $ping_result == "Connected" ]]; then | |
echo "External network connection established, packages up to date." | |
else | |
echo "No external network available. Package installation and maintenance skipped." | |
fi | |
echo "For further setup instructions, visit http://vvv.dev" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment