Add backup service
This commit is contained in:
		
							parent
							
								
									ee59f0258b
								
							
						
					
					
						commit
						b0db33fb09
					
				
					 7 changed files with 114 additions and 0 deletions
				
			
		
							
								
								
									
										7
									
								
								backup/.env
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								backup/.env
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					HC_UID=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RESTIC_REPOSITORY=
 | 
				
			||||||
 | 
					RESTIC_PASSWORD=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					AWS_ACCESS_KEY_ID=
 | 
				
			||||||
 | 
					AWS_SECRET_ACCESS_KEY=
 | 
				
			||||||
							
								
								
									
										2
									
								
								backup/.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								backup/.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					/mailcheck.mail
 | 
				
			||||||
 | 
					/msmtprc
 | 
				
			||||||
							
								
								
									
										6
									
								
								backup/Dockerfile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								backup/Dockerfile
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,6 @@
 | 
				
			||||||
 | 
					FROM ubuntu
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ENV DEBIAN_FRONTEND=noninteractive
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RUN apt update -y \
 | 
				
			||||||
 | 
						&& apt install -y curl restic
 | 
				
			||||||
							
								
								
									
										4
									
								
								backup/backup.service
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								backup/backup.service
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					[Service]
 | 
				
			||||||
 | 
					Type=oneshot
 | 
				
			||||||
 | 
					ExecStart=/opt/services/backup/backup.sh
 | 
				
			||||||
 | 
					WorkingDirectory=/opt/services/backup/
 | 
				
			||||||
							
								
								
									
										60
									
								
								backup/backup.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										60
									
								
								backup/backup.sh
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,60 @@
 | 
				
			||||||
 | 
					#!/usr/bin/env sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set -e
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set -a
 | 
				
			||||||
 | 
					. "/opt/services/backup/.env"
 | 
				
			||||||
 | 
					. "/opt/services/backup/.secret.env"
 | 
				
			||||||
 | 
					set +a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					hc_url="https://hc-ping.com/$HC_UID"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					curl -fsSL --retry 3 "$hc_url/start" >/dev/null
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BACKUP_LOCATION="/tmp/backup-misc"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rm -rf "$BACKUP_LOCATION"
 | 
				
			||||||
 | 
					mkdir -p "$BACKUP_LOCATION"
 | 
				
			||||||
 | 
					cd "$BACKUP_LOCATION" || exit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_hc_fail () {
 | 
				
			||||||
 | 
						curl -fsSL --retry 3 "$hc_url/fail"
 | 
				
			||||||
 | 
						exit 1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_backup_prepare_postgres () {
 | 
				
			||||||
 | 
						mkdir -p "$BACKUP_LOCATION/postgres"
 | 
				
			||||||
 | 
						cd "$BACKUP_LOCATION/postgres" || exit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						postgres_tables=$(sudo -u postgres psql -Atc "SELECT datname FROM pg_database WHERE datistemplate = false;")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for i in $postgres_tables
 | 
				
			||||||
 | 
						do
 | 
				
			||||||
 | 
							echo "dumping $i"
 | 
				
			||||||
 | 
							sudo -u postgres pg_dump "$i" | gzip >"pg_dump_$i.gz"
 | 
				
			||||||
 | 
							echo "done with $i"
 | 
				
			||||||
 | 
							echo ""
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						echo "dumping all"
 | 
				
			||||||
 | 
						sudo -u postgres pg_dumpall | gzip >"pg_dumpall.gz"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_backup_prepare_mailcow () {
 | 
				
			||||||
 | 
						export MAILCOW_BACKUP_LOCATION="$BACKUP_LOCATION/mailcow"
 | 
				
			||||||
 | 
						mkdir -p "$MAILCOW_BACKUP_LOCATION"
 | 
				
			||||||
 | 
						/opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh \
 | 
				
			||||||
 | 
							backup all --delete-days 3
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo ""
 | 
				
			||||||
 | 
					echo "preparing postgres"
 | 
				
			||||||
 | 
					time _backup_prepare_postgres >/tmp/backup-postgres.log || _hc_fail
 | 
				
			||||||
 | 
					echo ""
 | 
				
			||||||
 | 
					echo "preparing mailcow"
 | 
				
			||||||
 | 
					time _backup_prepare_mailcow >/tmp/backup-mailcow.log || _hc_fail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cd /opt/services/backup/
 | 
				
			||||||
 | 
					docker compose run --rm backup || _hc_fail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					curl -fsSL --retry 3 "$hc_url"
 | 
				
			||||||
							
								
								
									
										4
									
								
								backup/backup.timer
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								backup/backup.timer
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					[Timer]
 | 
				
			||||||
 | 
					OnCalendar=*-*-* 04:10:00
 | 
				
			||||||
 | 
					[Install]
 | 
				
			||||||
 | 
					WantedBy=timers.target
 | 
				
			||||||
							
								
								
									
										31
									
								
								backup/docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								backup/docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,31 @@
 | 
				
			||||||
 | 
					version: "3.7"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					services:
 | 
				
			||||||
 | 
					  backup:
 | 
				
			||||||
 | 
					    build:
 | 
				
			||||||
 | 
					      context: .
 | 
				
			||||||
 | 
					    image: backup
 | 
				
			||||||
 | 
					    restart: never
 | 
				
			||||||
 | 
					    env_file:
 | 
				
			||||||
 | 
					      - .env
 | 
				
			||||||
 | 
					      - .secret.env
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - /tmp/backup-misc:/backup/misc
 | 
				
			||||||
 | 
					      - gitea_data:/backup/volumes/gitea_data
 | 
				
			||||||
 | 
					      - influxdb_data:/backup/volumes/influxdb_data
 | 
				
			||||||
 | 
					      - reitanlage_data:/backup/volumes/reitanlage_data
 | 
				
			||||||
 | 
					      - synapse_media_store:/backup/volumes/synapse_media_store
 | 
				
			||||||
 | 
					      - tandoor_mediafiles:/backup/volumes/tandoor_mediafiles
 | 
				
			||||||
 | 
					    command: restic backup /backup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					volumes:
 | 
				
			||||||
 | 
					  gitea_data:
 | 
				
			||||||
 | 
					    external: true
 | 
				
			||||||
 | 
					  influxdb_data:
 | 
				
			||||||
 | 
					    external: true
 | 
				
			||||||
 | 
					  reitanlage_data:
 | 
				
			||||||
 | 
					    external: true
 | 
				
			||||||
 | 
					  synapse_media_store:
 | 
				
			||||||
 | 
					    external: true
 | 
				
			||||||
 | 
					  tandoor_mediafiles:
 | 
				
			||||||
 | 
					    external: true
 | 
				
			||||||
		Reference in a new issue