- Add headscale binary and configuration files - Include management scripts for API keys, nodes, and authentication - Add Docker setup with docker-compose - Include backup and restore functionality - Add example scripts for creating API keys and pre-auth keys Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
60 lines
1.6 KiB
Bash
Executable File
60 lines
1.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e # Stop script if any command fails
|
|
|
|
# Parameters
|
|
BACKUP_SERVER="192.168.42.126"
|
|
BACKUP_SERVER_USER="root"
|
|
REMOTE_TMP_DIR="/tmp"
|
|
REMOTE_TARGET_DIR="/opt/headscale"
|
|
|
|
cd /opt/headscale
|
|
|
|
NOW=$(date +"%Y%m%d_%H%M%S")
|
|
TARFILE="headscale_backup_$NOW.tar.gz"
|
|
|
|
echo "1. Stop Headscale Docker service..."
|
|
docker compose down
|
|
|
|
echo "2. Create tar.gz backup..."
|
|
tar czvf "/tmp/$TARFILE" .
|
|
|
|
echo "3. Calculate local checksum (db.sqlite)..."
|
|
LOCAL_SUM=$(md5sum /opt/headscale/data/db.sqlite | awk '{print $1}')
|
|
|
|
echo "4. Start Headscale Docker service again..."
|
|
docker compose up -d
|
|
|
|
echo "5. Copy backup to backup server..."
|
|
scp "/tmp/$TARFILE" "$BACKUP_SERVER_USER@$BACKUP_SERVER:$REMOTE_TMP_DIR/"
|
|
rm -f "/tmp/$TARFILE"
|
|
|
|
echo "6. Restore backup and verify checksum on backup server..."
|
|
ssh "$BACKUP_SERVER_USER@$BACKUP_SERVER" "bash -s" <<EOF
|
|
set -e
|
|
START_TIME=\$(date '+%Y%m%d_%H%M%S')
|
|
LOGFILE="$REMOTE_TARGET_DIR/backup_restore_check_\$START_TIME.txt"
|
|
rm -rf $REMOTE_TARGET_DIR
|
|
mkdir -p $REMOTE_TARGET_DIR
|
|
cd $REMOTE_TARGET_DIR
|
|
tar xzvf $REMOTE_TMP_DIR/$TARFILE
|
|
rm -f $REMOTE_TMP_DIR/$TARFILE
|
|
REMOTE_SUM=\$(md5sum $REMOTE_TARGET_DIR/data/db.sqlite | awk '{print \$1}')
|
|
COMPARE_RESULT="NOT MATCH"
|
|
if [ "$LOCAL_SUM" = "\$REMOTE_SUM" ]; then
|
|
COMPARE_RESULT="MATCH"
|
|
fi
|
|
{
|
|
echo "=== BACKUP & RESTORE CHECK ==="
|
|
echo "Time: \$START_TIME"
|
|
echo "Local db.sqlite md5sum: $LOCAL_SUM"
|
|
echo "Remote db.sqlite md5sum: \$REMOTE_SUM"
|
|
echo "Compare result: \$COMPARE_RESULT"
|
|
echo "Status: Finished restore and checksum"
|
|
echo "=============================="
|
|
} > "\$LOGFILE"
|
|
EOF
|
|
|
|
echo "=== DONE ==="
|
|
|