Giter Site home page Giter Site logo

dark-age / home-server-backup Goto Github PK

View Code? Open in Web Editor NEW

This project forked from gromoslaw-kroczka/home-server-backup

0.0 0.0 0.0 66 KB

Multi-purpose Backup script dedicated for Home Servers

License: GNU General Public License v3.0

Shell 100.00%

home-server-backup's Introduction

Multi-purpose Backup script dedicated for Home Servers

โ— Work-in-progress ๐Ÿ”จ
Script under developement, designed for homelab application.
Feel free to test, modify, report bugs & propose features.
Have fun ๐Ÿš€

Table of content

Features

  • Separate parameters.sh file for settings & sensitive data
  • Core functionalities:
    • Multiple directory local backup:
      • Docker Volumes | With stopping containers
      • Docker Bind Mounts | With /or without stopping containers
      • Server Home Directory | Separated by sub-directiories
    • Cloud backup using rclone
    • Delete old backup files (both locally & in the Cloud)
    • Archive locally backup every 10 days
  • Additional functionalities:
    • Gotify notifications
    • Netdata notifications silencer during backup
    • Separate 'instant' type to test choosen features

Prequisitions and Dependencies

  • Linux environment (to execute bash script)
  • For required dependencies for each feature see How to use it

Files descriptions

File Description
homeServerBackup.sh core of the application
parameters-sample.sh external file with settings & sensitive data
.gitignore git configuration file
.shellcheckrc [ShellCheck][shellCheck] configuration file
README.md documentation file
LICENSE.md open source license details

How to use it

  1. Clone GitHub repository to you server
  2. Make core script executable
    $ chmod u+x homeServerBackup.sh
  3. Configurate parameters
    (!) Before changing any settings / parameters copy parameters-sample.sh file and remove -sample part of the name.
    $ cp parameters-sample.sh parameters.sh
    Complete configuration of script acc. Configuration
  4. Execute script
    $ sudo ./homeServerBackup.sh -t <TYPE (instant/daily)>
     `instant` => used for executing script from terminal
     `daily` => used in 'sudo crontab' for scheduled backups
    
  5. For scheduled backups add above line as cronjob (preferebly with 'daily' type)
    1. Open crontab
      $ sudo crontab -e
    2. Add scheduled script execution
      For example below code with execute script located in everyday at 2:00 am.
      * 2 * * * cd /<example directory> && ./homeServerBackup.sh -t daily
      To set up cron schedule expressions see crontab gutu

Configuration

00. Functionality

Comment out (with <#>) features to exclude them from executingin 'instant' backups

declare -x -a functionalityInstant=(
    'Local Backup | Home directory'
    'Local Backup | Docker Volumes'
    'Local Backup | Docker Bind Mounts'
    'Cloud Backup'
    # (!) It is advised to use below features only for 'daily' backups
    #'Daily-backup cleaner'
    #'Daily-backup cloud cleaner'
    #'Daily-backup archiver'
)
#
declare -x -a functionalityDaily=(
    'Local Backup | Home directory'
    'Local Backup | Docker Volumes'
    'Local Backup | Docker Bind Mounts'
    'Cloud Backup'
    'Daily-backup cleaner'
    'Daily-backup cloud cleaner'
    'Daily-backup archiver'
)

To run Docker Volumes & Bind Mounts backups you need Docker environment.
To run Cloud Backup you have to have installed rclone and remote configured (named as homeServerBackup) For Daily-backup local and cloud cleaners you can specify how many backups you want to preserve

#   Choose how many daily backups you want to keep (daily-cleaner settings)
declare -x -i dailyLocal=5
declare -x -i dailyCloud=5
#

01. Directories & folders

Set up your:

  • Backup Directory - local destination of backups
  • Home Directory - server Home directory + name of it (of the backup)
#   Local Backup Directory
declare -x backupDir="path/to/location/where/backup/will/be/stored"
#
#   Server Home Directory
declare -x homeDir="/your/home/directory"
#
#   Name for backup of Server Home Directory
declare -x homeName="homeYourNameForExample"

To exclude certain sub-directories of Home directory just add it to the array:

#   Exclude those homeDir sub-directories from backup
declare -x -a excludeDir=(
    'photos'                #exclude homeDir/photos
    'folder/sub-folder'     #exclude homeDir/folder/sub-folder
)

02. Arrays of Docker Containers

Set up details of your Docker Volumes you would like to backup

#   declare -A volumeDocker00=(
#       [container]='Container name'
#       [volumePath]='Path to volume'
#       [name]='Backup .tar file name'
#       [stop]=true #or 'false' if you want to backup without stopping the container
#    )
#
declare -x -A volumeDocker00=(
    [container]='1st-container'
    [volumePath]='/path/to/volume'
    [name]='1st-container-backup'
    [stop]=true
)
#
declare -x -A volumeDocker01=(
    [container]='2nd-container'
    [volumePath]='/path/to/volume'
    [name]='2nd-container-backup'
    [stop]=false
)

03. List od Docker Containers with Bind Mounts

Set up you Docker Containers of which you would like to backup Bind Mounts. Code assume that you have Bind Mounts located in directory homeDir/Docker/<container name>. For each of the Docker Container you can choose whether to stop during backup or not.

declare -x bindDocker=(
    '3rd-container'
    '4th-container'
)
#
#   List of Docker Container with Bind Mounts to stop during backup
declare -x bindDockerStop=(
    #'3rd-container'
    #'4th-container'
)

04. Gotify Configurations

Set up Gotify server to notify you after each backup

#   Gotify website + token, for example: https://push.example.de/message?token=<apptoken>
declare -x GotifyHost="https://push.example.de/message?token=<apptoken>"
#
#   Title of Notification
declare -x GotifyTitle="yourServerName"

05. Netdata silencer

Backup of the server could couse high disk backlog and therefore spam notifications from Netdata about it (if you have that tool installed on the server). You can disable those notifications for the time of the backup script.

#   Replace <apptoken> with Netdata 'api authorization token'
#   that is stored in the file you will see in the following entry of http://NODE:19999/netdata.conf:
#       [registry]
#           # netdata management api key file = /var/lib/netdata/netdata.api.key
declare -x NetdataAuthToken="<apptoken>"
#
#   Change to 'true' to enable Netdata silencer
declare -x NetdataSilencer=false

If you would like to silende Netdata backlog notification not only for the time of the backup but also other scheduled activities (like automatic updates) it is better to disable those directly in the crontab:

# Disable Netdata disk.backlog notifications during scheduled activities
0 0 * * * docker exec netdata curl -s "http://localhost:19999/api/v1/manage/health?cmd=SILENCE&context=disk.backlog" -H "X-Auth-Token: <apptoken>"

# Daily Backups
0 1 * * * cd /<example directory> && ./homeServerBackup.sh -t daily

# Re-enable Netdata silenced notifications
0 3 * * * docker exec netdata curl -s "http://localhost:19999/api/v1/manage/health?cmd=RESET" -H "X-Auth-Token: <apptoken>"

License

home-server-backup is distributed under the GNU General Public License version 3.0 license. See LICENSE for more details.

home-server-backup's People

Contributors

gromoslaw-kroczka avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.