Complete Restructure and gitea

* Moved common functions
+ Started work on gitea
This commit is contained in:
Daniel Legt 2024-01-18 19:08:49 +02:00
parent 5c1a416b60
commit b61e4066cb
10 changed files with 181 additions and 39 deletions

View File

@ -4,47 +4,17 @@
# Determine the directory of the script # Determine the directory of the script
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
### [ Variables ] ### PROGRAM_NAME="Gitea Backup Script"
### [ Imports ] ###
# Import Colors
source "$SCRIPT_DIR/../lib/colors.sh"
# Import configuration # Import configuration
source "$SCRIPT_DIR/config.sh" source "$SCRIPT_DIR/config.sh"
# Import Functions
# Colors source "$SCRIPT_DIR/../lib/functions.sh"
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color
### [ Functions ] ### ### [ Functions ] ###
check_required_programs() {
local missing=0
for program in gdrive 7zz sqlite3 curl; do
if ! command -v $program &> /dev/null; then
echo -e "${RED}Error: Required program '$program' is not installed.${NC}" >&2
missing=1
fi
done
if [ $missing -ne 0 ]; then
local ERR_MSG="One or more required programs are missing."
send_discord_notification "$ERR_MSG" "16711680"
echo -e "${RED}$ERR_MSG${NC}" >&2
exit 1
fi
}
send_discord_notification() {
local message=$1
local color=$2
# Check if we should send discord notifications
if [ -n "$DISCORD_WEB_HOOK" ]; then
curl \
-H "Content-Type: application/json" \
-d "{ \"content\":\"\", \"embeds\":[{ \"title\":\"Vaultwarden Backup\", \"description\":\"${message}\", \"color\":${color}} ]}" \
$DISCORD_WEB_HOOK
fi
}
get_7zip_password() { get_7zip_password() {
$SCRIPT_DIR/bitwarden_backup_password_decrypt.sh $SCRIPT_DIR/bitwarden_backup_password_decrypt.sh
} }
@ -132,10 +102,10 @@ delete_old_gdrive_backups() {
} }
### [ Main ] ### ### [ Main ] ###
echo -e "${YELLOW}Starting Vaultwarden backup...${NC}" echo -e "${YELLOW}Starting ${PROGRAM_NAME}...${NC}"
send_discord_notification "Starting Vaultwarden backup..." "16776960" # Yellow color send_discord_notification "Starting Vaultwarden backup..." "16776960" # Yellow color
check_required_programs check_required_programs "$SCRIPT_DIR/required_programs.txt"
backup_sqlite_database backup_sqlite_database
compress_and_encrypt_backup compress_and_encrypt_backup

View File

@ -0,0 +1,8 @@
#!/bin/bash
# Here you can/should run a short script of getting your
# password as plain text, I personally recommend
# gpg key encryption of your key and decrypting it
# at runtime, it really depends on what kind of setup you have
echo -e "example_password";

View File

@ -0,0 +1,4 @@
*gdrive
7zz
sqlite3
*curl

0
gitea/README.md Normal file
View File

18
gitea/config.example.sh Normal file
View File

@ -0,0 +1,18 @@
# The name of the gitea container, this is required.
GITEA_CONTAINER_NAME="gitea_app"
# An absolute path to the gitea app.ini from within the docker container
GITEA_CONF_PATH=/data/gitea/conf/app.ini
# The path where WITHING THE CONTAINER the dump will be placed
GITEA_BACKUP_CONTAINER_LOCATION=/backups
# The path that was mounted for gitea to push backups to
BACKUP_SOURCE_PATH=/home/x/services/gitea/backups
# Define the number of backups to keep (e.g., keep the latest 7 backups)
KEEP_BACKUP_COUNT=3
# Discord Settings
DISCORD_WEBHOOK=
# Google Drive Settings
GOOGLE_DRIVE_FOLDER_ID=

56
gitea/gitea_backup.sh Normal file
View File

@ -0,0 +1,56 @@
#!/bin/bash
# Preloader
# Determine the directory of the script
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
PROGRAM_NAME="Gitea Backup Script"
### [ Imports ] ###
# Import Colors
source "$SCRIPT_DIR/../lib/colors.sh"
# Import configuration
source "$SCRIPT_DIR/config.sh"
# Import Functions
source "$SCRIPT_DIR/../lib/functions.sh"
### [ Functions ] ###
backup_from_docker() {
# Reference to the gitea container id
GITEA_DOCKER_CONTAINER=$(docker ps -qf name="${GITEA_CONTAINER_NAME}")
# Run the backup process
if docker exec -w $GITEA_BACKUP_CONTAINER_LOCATION -u git $GITEA_DOCKER_CONTAINER bash -c "/usr/local/bin/gitea dump -c $GITEA_CONF_PATH"; then
log "Gitea backup created successfully."
else
error "Failed to create Gitea backup."
send_discord_notification "Failed to create Gitea backup."
exit 1
fi
# Determine the path to the output file
BACKUP_FILE=$(ls -Art $BACKUP_SOURCE_PATH/gitea-dump-*.zip | tail -n 1)
if [ -z "$BACKUP_FILE" ]; then
error "Backup file not found."
send_discord_notification "Backup file not found."
exit 1
fi
log "Backup file $BACKUP_FILE created."
}
### [ Main ] ###
echo -e "${YELLOW}Starting ${PROGRAM_NAME}...${NC}"
send_discord_notification "Starting Vaultwarden backup..." "16776960" # Yellow color
check_required_programs "$SCRIPT_DIR/required_programs.txt"
backup_from_docker
# Run google drive backup
# Final message
log "Backup process completed."
send_discord_notification "Backup process completed."

8
gitea/gitea_password.sh Normal file
View File

@ -0,0 +1,8 @@
#!/bin/bash
# Here you can/should run a short script of getting your
# password as plain text, I personally recommend
# gpg key encryption of your key and decrypting it
# at runtime, it really depends on what kind of setup you have
echo -e "example_password";

View File

@ -0,0 +1,3 @@
docker
*gdrive
*curl

7
lib/colors.sh Executable file
View File

@ -0,0 +1,7 @@
#!/bin/bash
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color

68
lib/functions.sh Executable file
View File

@ -0,0 +1,68 @@
#!/bin/bash
send_discord_notification() {
local message=$1
local color=$2
# Check if we should send discord notifications
if [ -n "$DISCORD_WEB_HOOK" ]; then
curl \
-H "Content-Type: application/json" \
-d "{ \"content\":\"\", \"embeds\":[{ \"title\":\"Vaultwarden Backup\", \"description\":\"${message}\", \"color\":${color}} ]}" \
$DISCORD_WEB_HOOK
fi
}
check_required_programs() {
local requirements_file=$1
local missing=0
local optional_missing=0
while IFS= read -r line || [[ -n "$line" ]]; do
program=${line#\*}
is_optional=false
if [[ "$line" == \** ]]; then
is_optional=true
fi
if ! command -v "$program" &> /dev/null; then
if [ "$is_optional" = true ]; then
echo -e "${YELLOW}Warning: Optional program '$program' is not installed.${NC}" >&2
optional_missing=1
else
echo -e "${RED}Error: Required program '$program' is not installed.${NC}" >&2
missing=1
fi
fi
done < "$requirements_file"
if [ $missing -ne 0 ]; then
local ERR_MSG="One or more required programs are missing."
send_discord_notification "$ERR_MSG" "16711680"
echo -e "${RED}$ERR_MSG${NC}" >&2
exit 1
elif [ $optional_missing -ne 0 ]; then
local WARN_MSG="One or more optional programs are missing."
send_discord_notification "$WARN_MSG" "16776960" # Yellow color code
echo -e "${YELLOW}$WARN_MSG${NC}" >&2
fi
}
# Logging
success() {
echo -e "${GREEN}Success: $1${NC}"
}
log() {
echo -e "${NC}$1${NC}"
}
warn() {
echo -e "${YELLOW}WARN: $1${NC}"
}
error() {
echo -e "${RED}ERROR: $1${NC}" >&2
}