summaryrefslogtreecommitdiff
path: root/run.sh
blob: 32ad77f89ae53b94a1821226f25ea1ad69286de6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/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