Hello there! I'm a web developer in Louisville, Kentucky. I started on this career path by purchasing an O’Reilly PHP book from Barnes & Noble in 1999. Since then, my desire to learn as much as I can about web site building and server maintenance has grown. I love technology and what it can do to simplify our lives and make it more interesting all at the same time. Seeing a creative design come to life and bringing it into the web world is my favorite puzzle to solve. My server experience is based around launching WordPress-friendly servers — Linux (Ubuntu and Centos flavors), Apache, MySQL, and PHP. I have worked with various modules, extensions, installs such as ImageMagick, LetsEncrypt, Sass, LESS, and the Homebrew family of extension. My main love has been with PHP, and my CMS of choice has been WordPress since its inception in 2003. I find it flexible, secure, easy to design around, and so customizable. My strengths are in developing from-scratch plugins and themes for the WordPress CMS with a strong background in PHP and MySQL development.

Universal wp-content Directory

Add this code to your wp-config.php file when installing a self-contained WordPress install on this site. This will ensure that the themes and plugins directories pull from the main wp-content directory on this server. The additional code will ensure that the uploads are left within the individual site install.


Add these lines to your wp-config.php file to turn on debugging. Information will be saved in wp-content/debug.log file.

Keeping Servers Up-to-Date

Centos As new file patches come out, Centos will need to be updated. Run the following commands to bring the server and its extensions up-to-date: Occasionally you may get this message: There are unfinished transactions remaining. You might consider running yum-complete-transaction, or “yum-complete-transaction –cleanup-only” and “yum history redo last”, first to finish them. If those…

Backup with CRON

Below is the code added to to back up all the files in the /var/www/marketing/ directory,. It is set to run every day at 1am and saves a zip file with the current date into the /backup directory: This command has been added using crontab -e (vim commands needed here). After making changes, be…

SELinux (Security-Enhanced Linux)

After a bit of trouble-shooting, I discovered that, while Apache may have permission to read/write according to the file permissions above, an additional set of commands need to be run to have Linux verify that Apache really does have those permissions: if the above doesn’t work, you may need to specify certain files/dirs. Health Check…


Since SHA-256 password hashing is used by default since version 8 of MySQL, we run into a problem if users created with this encryption are attempted with a WordPress install. Below are the commands for creating a user with the native password setup (1 create user, 2 create database, 3 give user access to database,…

SSL using LetsEncrypt

Letsencrypt is what we use to generate our SSL certificates (allows for HTTPS usage). Below are instructions using certbot to generate your certificates. Generating Certificates Each domain has a line as -d within the command. You can add more domains by simply adding a listing in that format and executing the command all at…

File Permissions

Occasionally, WP will have a conniption over file permissions and user/group assignments. The commands below will fix those permissions. For Centos: For Ubuntu: For Mac: or: