ConceptPortal-public/scripts/prod/CreateBackup.ps1
2023-09-01 22:13:45 +03:00

70 lines
2.2 KiB
PowerShell

# ====== Create database backup ==========
# WARNING! DO NOT RUN THIS FILE AUTOMATICALLY FROM REPOSITORY LOCATION!
# Create a copy in secure location @production host. Update backup scripts from repository manually
# ========================================
# Input params
$backupLocation = "D:\DEV\backup\portal"
$containerDB = "dev-portal-db"
$containerBackend = "dev-portal-backend"
$pgUser = "portal-admin"
$pgDB = "portal-db"
# Internal params
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
$_date = Get-Date
$_formatDate = $_date.ToString("yyyy-MM-dd")
$destination = "{0}\{1}" -f $backupLocation, $_formatDate
function CreateBackup() {
EnsureLocationIsReady
PostgreDump
DjangoDump
Write-Host "Backup saved to $destination" -ForegroundColor DarkGreen
}
function EnsureLocationIsReady() {
if (Test-Path -Path $destination) {
Write-Host "Removing previous unfinished backup: $destination`n" -ForegroundColor DarkRed
Remove-Item $destination -Recurse -Force
}
New-Item -ItemType Directory -Path $destination | Out-Null
if (Test-Path -Path $archive -PathType Leaf) {
Write-Host "Removing previous backup: $archive`n" -ForegroundColor DarkRed
}
}
function PostgreDump() {
$host_dbDump = "$destination\$_formatDate-db.dump"
$local_dbDump = "/home/$_formatDate-db.dump"
& docker exec $containerDB `
pg_dump `
--username=$pgUser `
--exclude-table=django_migrations `
--format=custom `
--dbname=$pgDB `
--file=$local_dbDump
& docker cp ${containerDB}:${local_dbDump} $host_dbDump
& docker exec $containerDB rm $local_dbDump
}
function DjangoDump() {
$host_dataDump = "$destination\$_formatDate-data.json.gz"
$local_dataDump = "/home/app/web/backup/$_formatDate-data.json"
$local_archiveDump = "/home/app/web/backup/$_formatDate-data.json.gz"
& docker exec $containerBackend `
python manage.py dumpdata `
--indent=2 `
--exclude=admin.LogEntry `
--exclude=sessions `
--exclude=contenttypes `
--exclude=auth.permission `
--output=$local_dataDump
& docker exec $containerBackend gzip --force $local_dataDump
& docker cp ${containerBackend}:${local_archiveDump} $host_dataDump
& docker exec $containerBackend rm $local_archiveDump
}
CreateBackup