Setting up a server farm

See these resources for more information:

The idea is to really setup a tiered-authentication system. Key ideas:

In the meantime, we can have two separate wikis, with less sensitive data pushed from the internal wiki. Changelog can be retroactively generated by running the following, as per Dokuwiki recommendation. Script to perform as follows:

find data/pages -type d -not -path "*course*" | xargs -i bash -c "cp -d --preserve=all --parents {}/* /srv/dokuwiki"
find data/meta -type d -not -path "*photos*" | xargs -i bash -c "cp -d --preserve=all --parents {}/* /srv/dokuwiki"
...
cd /srv/dokuwiki && find data/meta -name '*.changes' ! -name '_media.changes' -exec cat {} + | sort -u > data/meta/_dokuwiki.changes
cd /srv/dokuwiki && find data/media_meta -name '*.changes' -exec cat {} + | sort -u > data/meta/_media.changes

# Optional cleanup of changelog
cd /srv/dokuwiki/data/meta && awk -F '\t' -v ts=$(date +%s) '$1 > ts-2678400' _dokuwiki.changes > ...

# Consider cleaning the destination directories first to purge deleted directories
# To avoid conflicts with open file handles at point of purging, either stop the
# webserver, or use an atomic instruction, i.e. "renameat2", to perform path renames.

Link to C wrapper for the Linux syscall: renameat2 gist

data/
+-- pages/
|   +-- namespace/path/to/file.txt
+-- attic/
|   +-- namespace/path/to/file.txt.gz
+-- media/
|   +-- namespace/path/to/file.png
+-- media_attic/
    +-- namespace/path/to/file.png

Lockdown wiki

Copy wiki into the DMZ host with sensitive files removed (either using sample rsync command below, or using plain scp as above):

rsync -av --chown=...:www-data --exclude-from dokuwiki.exclude --delete dokuwiki/* USER@HOST:/dokuwiki/

Exclude the following files from subsequent copies:

conf/local.php       # Wiki configuration
conf/users.auth.php  # User accounts
conf/acl.auth.php    # ACL pages, optional

Make the following edits:

conf/local.php
$conf['title'] = '...';
$conf['useacl'] = 1;       /* needed, otherwise any user-retrieval functions will break */
$conf['disableactions'] = 'edit,login,media,...';  /* disable login feature */
$conf['updatecheck'] = 0;  /* to be pushed from development server */

and delete all non-admin users from conf/users.auth.php.