I wanted to run WordPress on my Ubuntu webserver such that:
- WordPress gets installed and updated through 
apt - It runs multilpe sites that each have their own configuration, plugins and themes
 
Installing WordPress through apt is the easy part:
sudo apt install wordpress
That creates:
- `/etc/wordpress` which is where it expects `config-<host>.php` files
- `/usr/share/wordpress` where all the files that power WordPress live.
You can create virtual hosts under Apache with DocumentRoot /usr/share/wordpress, but then all of those sites share the same wp-content and .htaccess files.   Each site won't have its own plugins, themes, and custom redirects.   I needed a way to create a separate document root for each site that use most, but not all, of the common files from /usr/share/wordpress.
I ended up created a document root directory for each site like /var/www/blog.example.com where most of the files link to /usr/share/wordpress:
www-data .htaccess
root     index.php -> /usr/share/wordpress/index.php
root     readme.html -> /usr/share/wordpress/readme.html
root     wp-activate.php -> /usr/share/wordpress/wp-activate.php
root     wp-admin -> /usr/share/wordpress/wp-admin
root     wp-blog-header.php -> /usr/share/wordpress/wp-blog-header.php
root     wp-comments-post.php -> /usr/share/wordpress/wp-comments-post.php
root     wp-config.php -> /usr/share/wordpress/wp-config.php
root     wp-config-sample.php -> /usr/share/wordpress/wp-config-sample.php
www-data wp-content
root     wp-cron.php -> /usr/share/wordpress/wp-cron.php
root     wp-includes -> /usr/share/wordpress/wp-includes
root     wp-links-opml.php -> /usr/share/wordpress/wp-links-opml.php
root     wp-load.php -> /usr/share/wordpress/wp-load.php
root     wp-login.php -> /usr/share/wordpress/wp-login.php
root     wp-mail.php -> /usr/share/wordpress/wp-mail.php
root     wp-settings.php -> /usr/share/wordpress/wp-settings.php
root     wp-signup.php -> /usr/share/wordpress/wp-signup.php
root     wp-trackback.php -> /usr/share/wordpress/wp-trackback.php
root     xmlrpc.php -> /usr/share/wordpress/xmlrpc.php
I created a script to do all that symlinking for me
#!/bin/sh
set -e
directory="$1"
if [ "z$directory" == "z" ]
then
    echo "Specify a directory as an argument"
    exit 1
fi
if [ ! -d "$directory" ]
then
    echo "Not a directory $directory"
    exit 1
fi
if [ ! -e "$directory/wp-content" ]
then
    cp -r /usr/share/wordpress/wp-content "$directory"
    chown -R www-data "$directory/wp-content"
fi
for file in /usr/share/wordpress/*
do
    name="${file##*/}"
    if [ ! -e "$directory/$name" ]
    then
        ln -s "$file" "$directory/$name"
    fi
done
if [ ! -e "$directory/.htaccess" ]
then
    touch "$directory/.htaccess"
    chown www-data "$directory/.htaccess"
fi
The config file for each site is a copy of the sample that gets edited with your database info:
sudo cp /etc/wordpress/config-localhost.php /etc/wordpress/config-blog.example.com.php
You need to create a virtual host for the site under Apache.  Like /etc/apache2/sites-available/blog.example.com.conf:
<VirtualHost *:80>
    Servername blog.example.com
    DocumentRoot /var/www/blog.example.com/
    <Directory /var/www/blog.example.com/>
        Options +ExecCGI +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
Then enable the virtual host and reload the server:
sudo a2ensite blog.example.com && sudo service apache2 reload