the (very)
Large Side
of WordPress
Arūnas Liuiza
WordPress Core Contributor, WordPress Kaunas Meetup co-organizer, WordCamp (Lithuania, Riga, Stockholm, Jyväskylä, Oslo, Norrköping) speaker and one of the editors of the Lithuanian WordPress translation team and co-host of Kodo Poetai podcast.
Free & premium WordPress plugin developer
Software Engineer at
For Developers
deployer.seravo.com - a service that syncs WordPress plugins from GitHub to WordPress.org automatically.
TryoutWP.com - a service to spin up live temporary demo sites for WordPress plugins and themes.
Maintaining a WP site
- Keeping up to date
- Core
- Vendor plugins and themes (on average ~13)
- Custom plugins and themes (on average ~3)
- Users (~5)
- Content (~200)
- Uploads (~300)
- ...
Maintaining 10 WP sites
- Keeping up to date
- Core x 10
- Vendor plugins and themes (on average ~13 x 10)
- Custom plugins and themes (on average ~3 x 10)
- Users (~5 x 10)
- Content (~200 x 10)
- Uploads (~300 x 10)
- ...
Maintaining 100 WP sites
- Keeping up to date
- Core x 100
- Vendor plugins and themes (on average ~13 x 100)
- Custom plugins and themes (on average ~3 x 100)
- Users (~5 x 100)
- Content (~200 x 100)
- Uploads (~300 x 100)
Plus
- Server software
- Backups
- ...
Maintaining 30k WP sites
- WP Core - from 1.5.1 to 5.2.3 (18.2%)
- 12.9867 plugins per install
- 22k unique plugin names
- 58k plugin name+version combinations
Data courtesy Peeter Marvet from zone.ee
Optimize!
Stage 1. Management SaaS
WordPress Management Software/SaaS
Stage 1. Management SaaS
- Great for general housekeeping tasks
- Very useful when sites are distributed on different platforms
- Can get clunky as the number of sites grows
- Requires a 'client' plugin on all the sites you manage
Stage 2. Multisite
- Multisite mode in WordPress Core
- Merged in 3.0 (used to be a separate WPMU project)
- Allows to run a lot of WP sites from single codebase
Stage 2. Multisite
- For best results, use a fresh WP install
- Add one line to wp-config.php:
define( 'WP_ALLOW_MULTISITE', true ); - Go to WP Admin > Tools > Network Setup and follow instructions
Stage 2. Multisite
- A good solution when all sites are hosted in single server
- Data is stored in single database
- All sites share plugins, themes and users table
- Quite hard to move one site out
Stage 3. Multi Network
- One step up from Multisite - a network of Multisites
- Can be enabled via a plugin - WP Multi Network
- Different networks have different set of network-enabled plugins and themes
Stage 3. Multi Network
- Start with a Multisite WP install
- Install and enable a plugin - WP Multi Network
- WP Admin > Networks > Add New
Stage 3. Multi Network
- Gives you more flexibility
- Still a single database and a single users' table
- The very edges of WP codebase - you can run into bugs with cobwebs on them
Stage 4. Docker
- The opposite of Multisite/Multi-network
- Putting every site in a different container
- Starting point for setting things up
version: '3.3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
cd my_wordpress/
touch docker-compose.yml
# content here -->
docker-compose up -d
Stage 4. Docker
- Better isolation between different sites
- Can be easily split, moved to different servers, etc
- Some resource overhead
Stage 5.
- Shared WP Core
- Separate wp-config.php ( databases, prefixes, salts, etc.)
- Separate assets
- Just uploads
- Whole wp-content
$domain = $_SERVER['HTTP_HOST'];
// sanitize and validate here !!!
require_once( "wp-configs/{$domain}" );
define ('WP_CONTENT_DIR', __DIR__. '/assets/' . $domain );
define ('WP_CONTENT_URL','https://'.$domain.'/assets/' . $domain );
Stage 5.
Stage 5.
- Single codebase - easy to maintain and update
- Separated sites - no shared data, easy to move to different system/service
- Plugins/themes sometimes have problems with this setup
No magic bullet
Different projects require different solutions
- Management SaaS - great for client sites, distributed among different environments.
- Multisite/multi-network work well when single user base is a feature, or at least not an issue.
- Docker and other setups are mostly for projects on your own servers.
Bonus. WP-CLI
The official command line tool for interacting with and managing your WordPress sites.
Yup, the Terminal.
Bonus. WP-CLI
# Download
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
# Try running it
php wp-cli.phar --info
# Make it executable and put into your PATH
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
# Try running again
wp --info
wp ... anything
wp config
wp core
wp cache
wp comment
wp cron
wp db
wp export
wp import
wp media
wp menu
wp network
wp option
wp package
wp post
wp post-type
wp profile
wp rewrite
wp role
wp server
wp sidebar
wp search-replace
wp site
wp super-admin
wp taxonomy
wp term
wp transient
wp widget
...
Update WordPress
wp core update
wp core update-db
wp core update-db --network
Install WordPress
wp core download --locale=lt_LT
wp config create --dbname=testing --dbuser=wp
--dbpass=securepswd
wp core install --url=example.com --title=Example
--admin_user=supervisor --admin_password=strongpassword --admin_email=info@example.com
Search & Replace
wp search-replace olddomain.com newdomain.com 'wp_post*'
- works with serialised data
- can do regular expressions
- might be a little... slow :)
wp db search - another option
Remote commands
wp --ssh=[<scheme>][<user>@]<host>[:<port>][<path>] ...
- You need a copy of WP CLI on the remote server
- You need an SSH access to the server
- You can also use vagrant, docker or docker-compose for schema
Questions?
the (very) Large Side of WordPress
By Arūnas Liuiza
the (very) Large Side of WordPress
WordPress Meetup Kaunas #42
- 2,758