unoffical wafrn mirror wafrn.net
atproto social-network activitypub
at testPDSNotExplode 176 lines 5.3 kB view raw
1#!/usr/bin/env bash 2set -eo pipefail 3 4SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) 5 6source "${SCRIPT_DIR}/../.env" 7 8BACKUP_ROOT_DIR=${BACKUP_ROOT_DIR:-$HOME/backup} 9BACKUP_KEEP_DAYS=${BACKUP_KEEP_DAYS:-10} 10BACKUP_POST_BACKUP_TOOL=${BACKUP_POST_BACKUP_TOOL:-$HOME/post_backup.sh} 11 12declare -a docker_compose_files=("docker-compose.simple.yml" "docker-compose.simple.metrics.yml" "docker-compose.advanced.yml" "docker-compose.advanced.metrics.yml") 13 14COMPOSE_FILENAME= 15 16check_files_for_update () { 17 PARAMS=$1 18 19 COMPOSE_FILENAME="docker-compose." 20 SHOULD_EXIT=0 21 22 # figure out which docker compose file we were using 23 for compose_filename in "${docker_compose_files[@]}" 24 do 25 if diff -q docker-compose.yml $compose_filename &>/dev/null; then 26 COMPOSE_FILENAME=$compose_filename 27 fi 28 done 29 30 # check if that docker compose file will change 31 if git diff --name-only '@' '@{u}' | grep -q $COMPOSE_FILENAME; then 32 echo "-------------------------------------------" 33 echo " WARNING" 34 echo 35 echo " Docker compose files have changed!" 36 echo "-------------------------------------------" 37 echo 38 39 # if we're using a nonstandard compose file we'll just throw an error 40 if [ $COMPOSE_FILENAME == "docker-compose." ]; then 41 echo "Please check the release notes, and review the changes," 42 echo "making sure to update your local config accordingly" 43 echo 44 echo "If you're happy with the changes please re-run the script with" 45 echo " ./install/manage.sh update -f" 46 SHOULD_EXIT=1 47 else 48 echo "The following updates will be applied automatically after pulling:" 49 echo 50 git diff '@' '@{u}' -- $COMPOSE_FILENAME 51 echo 52 fi 53 else 54 COMPOSE_FILENAME= 55 fi 56 57 # check if the environment config will change 58 if git diff --name-only '@' '@{u}' | grep -q '.env.example'; then 59 echo "-------------------------------------------" 60 echo " WARNING" 61 echo 62 echo " Environment example config has changed!" 63 echo "-------------------------------------------" 64 echo 65 echo "Please check the release notes, and review the changes below" 66 echo "making sure to update your local config accordingly:" 67 echo 68 git diff '@' '@{u}' -- .env.example 69 echo 70 echo "If you're happy with the changes please re-run the script with" 71 echo " ./install/manage.sh update -f" 72 SHOULD_EXIT=1 73 fi 74 75 if [ "$PARAMS" != "-f" ]; then 76 if [ "$SHOULD_EXIT" -eq 1 ]; then 77 exit 1 78 fi 79 else 80 echo 81 echo "WARNING: Force flag found, continuing update" 82 echo 83 fi 84} 85 86case $1 in 87 update) 88 pushd "${SCRIPT_DIR}/.." 89 git fetch 90 91 check_files_for_update $2 92 93 git pull 94 95 if [ ! -z "$COMPOSE_FILENAME" ]; then 96 cp $COMPOSE_FILENAME docker-compose.yml 97 fi 98 99 docker compose pull 100 docker compose build 101 102 rm -f packages/backend/cache/ && mkdir packages/backend/cache/ 103 104 docker compose up --build -d 105 docker compose logs -t -n 50 -f 106 popd 107 ;; 108 backup) 109 echo "Cleaning up backup directory" 110 mkdir -p "$BACKUP_ROOT_DIR" 111 find "$BACKUP_ROOT_DIR" -mtime +$BACKUP_KEEP_DAYS -type f -delete 112 BACKUP_DIR=$BACKUP_ROOT_DIR/$(date +"%Y%m%dT%H%M%S") 113 mkdir -p "$BACKUP_DIR" 114 pushd "$BACKUP_DIR" 115 echo "Backing up database" 116 docker start wafrn-db-1 117 docker exec wafrn-db-1 pg_dumpall -c | zstd -9 > db.sql.zst 118 echo "Backing up uploads folder" 119 tar --zstd -cf uploads.tar.zst -C "$SCRIPT_DIR/../packages/backend/uploads" . 120 if [ "$ENABLE_BSKY" == "true" ]; then 121 echo "Backing up bluesky data" 122 docker run --rm -v "wafrn_pds:/pds" -v "$(pwd):/backup" -w /pds node:20-alpine tar c -f - . | zstd > pds.tar.zst 123 fi 124 echo "Done" 125 popd 126 if [ -f "$BACKUP_POST_BACKUP_TOOL" ]; then 127 $BACKUP_POST_BACKUP_TOOL "$BACKUP_DIR" 128 fi 129 ;; 130 restore) 131 RESTORE_DIR=$2 132 if [ -d "${RESTORE_DIR}" ] ; then 133 pushd "$SCRIPT_DIR/.." 134 echo "Stopping instance" 135 docker compose stop 136 popd 137 pushd "$RESTORE_DIR" 138 echo "Restoring database" 139 docker start wafrn-db-1 140 zstdcat db.sql.zst | docker exec -i wafrn-db-1 psql -X -f - -d postgres 141 echo "Restoring uploads directory" 142 rm -rf "$SCRIPT_DIR/../packages/backend/uploads/*" 143 tar --zstd -xf uploads.tar.zst -C "$SCRIPT_DIR/../packages/backend/uploads" 144 if [ "$ENABLE_BSKY" == "true" ]; then 145 echo "Restoring pds data" 146 zstdcat pds.tar.zst | docker run --rm -i -v "wafrn_pds:/pds" -w /pds node:20-alpine sh -c 'rm -rf * && tar x -f -' 147 fi 148 popd 149 pushd "$SCRIPT_DIR/.." 150 echo "Restarting intance" 151 docker compose up --build -d 152 popd 153 else 154 echo "Please provide a backup directory to restore" 155 fi 156 ;; 157 clean) 158 pushd "$SCRIPT_DIR/.." 159 rm -f packages/backend/cache/* 160 popd 161 ;; 162 logs) 163 pushd "${SCRIPT_DIR}/.." 164 docker compose logs -t -n 50 -f 165 popd 166 ;; 167 *) 168 echo "Valid options:" 169 echo " update: Download latest wafrn from repository, update and restart" 170 echo " backup: Create backup of the current wafrn files" 171 echo " restore: Restore a specific backup" 172 echo " clean: Cleans the cache" 173 echo " logs: Starts tailing docker logs" 174 exit 1 175 ;; 176esac