Last active
December 27, 2023 07:10
-
-
Save ethicka/c1b71e258a88b8523b7f21f164656b88 to your computer and use it in GitHub Desktop.
WordPress Installation with the Roots/Sage Framework and VirtualHost Creation
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 -e | |
## | |
# WordPress Installation and VirtualHost Creation | |
# | |
# Description: Installs a WordPress website in the ~/Sites folder, creates a homepage, | |
# cleans up the WP install a bit, deletes the akismet and hello dolly plugins, creates the permalinks, | |
# clones the roots/sage theme framework to the theme folder, deletes all the other WP default themes, | |
# installs/runs npm and bower and runs gulp to create the initial assets, adds a custom gitignore file | |
# to /wp-content, installs the roots/soil plugin, creates a git repo in wp-content, saves the WordPress | |
# credentials to a local file and the password to your clipboard. Then it creates a virtualhost for you. Voila! | |
# | |
# Author: William Donahoe - @ethicka | |
# | |
# Based off of http://www.ltconsulting.co.uk/automated-wordpress-installation-with-bash-wp-cli/ | |
# | |
# Dependencies: wp-cli, virtualhost.sh, apg, git, npm, node, gulp, bower | |
# Homebrew installation: brew install virtualhost.sh apg git node gulp bower | |
# | |
# Command: wp-start [site-name-slug] | |
## | |
# set variables | |
slug=$1 | |
WPUSER='' | |
DBUSER='' | |
DBPASSWORD='' | |
ADMIN_EMAIL='' | |
echo "Beginning WordPress Installation..." | |
# Get the name of the folder | |
read -e -p "Folder Name: " slug | |
# Set the site path | |
sitepath=~/Sites/$slug # you could change this to wherever you install your sites | |
if [ ! -d "$sitepath" ]; then | |
mkdir $sitepath | |
fi | |
cd $sitepath | |
echo "The site path is $sitepath" | |
# accept user input for the database name | |
echo -n "Database Name: " | |
read dbname | |
# accept the name of our website | |
echo -n "Site Name: " | |
read sitename | |
# add a simple yes/no confirmation before we proceed | |
echo -n "Run Install? [y/n] " | |
read run | |
# if the user didn't say no, then go ahead an install | |
if [ "$run" == n ] ; then | |
exit | |
else | |
# download the WordPress core files | |
wp core download | |
# create the wp-config file with our standard setup | |
wp core config --dbname=$dbname --dbuser=$DBUSER --dbpass=$DBPASSWORD --extra-php <<PHP | |
define( 'WP_DEBUG', true ); | |
define( 'DISALLOW_FILE_EDIT', true ); | |
PHP | |
# generate password using apg | |
password=$(apg -n 1 -m 12 -M SNC) | |
# copy password to clipboard | |
echo $password | pbcopy | |
# create database, and install WordPress | |
wp db create | |
wp core install --url="http://$slug" --title="$sitename" --admin_user="$WPUSER" --admin_password="$password" --admin_email="$ADMIN_EMAIL" | |
# discourage search engines | |
wp option update blog_public 0 | |
# delete sample page, and create homepage | |
wp post delete $(wp post list --post_type=page --posts_per_page=1 --post_status=publish --pagename="sample-page" --field=ID --format=ids) | |
wp post create --post_type=page --post_title=Home --post_status=publish --post_author=$(wp user get $WPUSER --field=ID --format=ids) | |
# delete readme and license | |
rm license.txt | |
rm readme.html | |
# set homepage as front page | |
wp option update show_on_front 'page' | |
# set homepage to be the new page | |
wp option update page_on_front $(wp post list --post_type=page --post_status=publish --posts_per_page=1 --pagename=home --field=ID --format=ids) | |
# set pretty urls | |
wp rewrite structure '/%postname%/' --hard | |
wp rewrite flush --hard | |
# delete akismet and hello dolly | |
wp plugin delete akismet | |
wp plugin delete hello | |
# you could also *install* some plugins here you use all the time, too. | |
# install roots sage theme and remove .git folder | |
cd $(wp theme path) | |
git clone --depth=1 https://github.com/roots/sage.git $slug | |
rm -rf $slug/.git | |
wp theme activate $slug | |
# delete other themes | |
wp theme delete twentyfourteen | |
wp theme delete twentyfifteen | |
wp theme delete twentysixteen | |
# install npm and bower and run gulp | |
cd $(wp theme path) | |
cd $slug | |
echo "Installing Node Modules..." | |
npm install | |
echo "Installing Bower..." | |
bower install | |
echo "Running Gulp..." | |
gulp | |
# update manifest.json | |
cd $sitepath/wp-content/themes/$slug/assets | |
replace "http://example.dev" "http://$slug" -- manifest.json | |
# Create a .gitignore and start a git in the wp-content folder | |
cd $sitepath/wp-content | |
# .gitignore | |
echo "# Ignore themes except ours | |
themes/* | |
!themes/$slug/ | |
# Ignore all plugins | |
plugins/* | |
!plugins/soil/ | |
!plugins/soil/* | |
# WordPress | |
/index.php | |
advanced-cache.php | |
backup-db/ | |
backups/ | |
blogs.dir/ | |
cache/ | |
upgrade/ | |
uploads/ | |
wp-cache-config.php | |
# Files | |
*.log | |
.DS_Store | |
*.bak | |
*.swp | |
*.sublime* | |
" > .gitignore | |
# readme.md | |
echo "# $sitename" > readme.md | |
# first git commit | |
git init | |
git add . | |
git commit -m "Initial commit" | |
# install roots soil plugin and commit | |
cd $sitepath | |
cd wp-content | |
git submodule add -f https://github.com/roots/soil.git plugins/soil | |
wp plugin activate soil | |
git add . | |
git commit -m "Soil plugin" | |
# site credentials | |
echo "WordPress Username: $WPUSER" > site_credentials | |
echo "WordPress Password: $password" >> site_credentials | |
# finalize | |
echo "" | |
echo "###" | |
echo "Installation is complete." | |
echo "Username: $WPUSER" | |
echo "Password: $password" | |
echo "###" | |
echo "" | |
# set up the virtualhost | |
virtualhost.sh $slug | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks for posting this.
It saved me a lot of time setting up my own mix.