A scalable WordPress project from scratch. Easy to deploy!
While working with WordPress, i feel unease to config virtual hosts, set up brand new WordPress installations, copy essential plugins... for each new project again and again.
With this, you can proxy static contents, databases, back-end and front-end into smaller servers. All of them use a same WordPress installation, it's really helpful in term of performance and maintainability. Moving your servers around or setting up load balancing becomes easier.
-
Prepare your server block for Nginx or virtual host for Apache. You do not need to create MySQL database, it will be created while installing WordPress.
-
Run these two commands on your command line respectively:
$ composer create-project i30/wp-scratch /path/to/project/directory
$ cd /path/to/project/directory && ./install
- Follow instructions to finish the installation. It's easy!
From now on, to add a new WordPress site, you just need to fire the install
script again.
-
Since
$_SERVER['SERVER_NAME']
is used to determine which site will respond to requests, please make sureSERVER_NAME
is configured properly. For Apache 2, remember to addUseCanonicalName = On
in every virtual host. -
While working with multiple sites (not WordPress multisite), you might need to separate
UPLOADS
directory. Use this script as a must-use plugin:/** * Plugin Name: Dynamic Uploads Directory * Version: 1.0.0 * Description: Create custom uploads directory base on the DB_NAME constant. * Author: sarahcoding * Author URI: https://sarahcoding.com * License: GPL v3+ */ add_filter('upload_dir', function($args) { $base_url = WP_HOME . '/uploads'; $base_dir = APP_ROOT . 'app/uploads'; $custom_url = WP_HOME . '/' . DB_NAME . '-uploads'; $custom_dir = APP_ROOT . 'app/' . DB_NAME . '-uploads'; $args['url'] = str_replace($base_url, $custom_url, $args['url']); $args['path'] = str_replace($base_dir, $custom_dir, $args['path']); $args['baseurl'] = str_replace($base_url, $custom_url, $args['baseurl']); $args['basedir'] = str_replace($base_dir, $custom_dir, $args['basedir']); return $args; }, PHP_INT_MAX);
Contribution is always welcome!