#!/bin/bash export PYTHONPATH=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) source $(dirname "$PYTHONPATH")/venv/bin/activate WORKERS=2 BACKUP_KEY="$HOME/.private/backupkey.pem" BIND_PATH="127.0.0.1:9000" [[ -z "$2" ]] || BIND_PATH="$2" MAX_KEEP=`python -c "import wikiconfig; print wikiconfig.Config.backup_set_keep" 2>/dev/null` S3_BUCKET=`python -c "import wikiconfig; print wikiconfig.Config.backup_s3_bucket" 2>/dev/null` APPLICATION="MoinMoin.wsgiapp:application" [[ -z "$DEBUG" ]] || APPLICATION="wsgi:application" if [[ "$1" == "serve" ]]; then gunicorn --timeout=300 --preload -w $WORKERS -b $BIND_PATH $APPLICATION elif [[ "$1" == "cron" ]]; then moin maint makecache elif [[ "$1" == "reindex" ]]; then moin index build --mode=rebuild elif [[ "$1" == "backup" ]]; then if [[ -z "$S3_BUCKET" || -z "$MAX_KEEP" || ! -r $BACKUP_KEY ]]; then echo "Not properly configured" exit 1 fi FILENAME="$HOME/backup-`date +%Y%m%d%H%M%S`.bak" # Backup first # # Place CACHEDIR.TAG files in cache directories to prevent backup. # This is needed because thumbnail images in caches can cause lots of # wasted backup space. find "$HOME/wiki-data/" -type d -name 'cache' -exec bash -c 'echo "Signature: 8a477f597d28d172789f06886806bc55" > "{}/CACHEDIR.TAG"' \; ( cd $HOME && tar -cj --exclude-caches wiki-data/ | openssl aes-256-cbc -pass "file:$BACKUP_KEY" > $FILENAME ) s3cmd put --no-progress $FILENAME $S3_BUCKET rm $FILENAME # Then prune the backup set to a maximum of N files ALL_FILES=( $(s3cmd ls $S3_BUCKET | awk '{ print $4 }' | sort -nr) ) for (( i=$MAX_KEEP ; i < ${#ALL_FILES[@]}; i++ )); do s3cmd del ${ALL_FILES[i]} done else moin $* fi