Исходные данные
Windows Server Standart 2019.
Hyper-V.
RedMine установлен из образа Turnkey (https://www.turnkeylinux.org/redmine).
PowerShell-7.1.5-win-x64.msi
Задача
Получить бакап БД и файлов RedMine размером поменьше чем целый образ Hyper-V.
Надо немного уметь в PowerShell и PuTTY (хотя рекомендую WinSCP - визуально править файлы и по каталога ходить).
После отладки и корректировки под свои дополнительные нужды (например исключить большие Git каталоги) засунуть в стандартный планировщик Windows (не забыть про указание рабочего каталога).
Реализация
После номера пункта, Система в которой выполняем действие.
1. Windows. Установить OpenSSH.Client, выполнить PowerShell
Add-WindowsCapability -Online -Name OpenSSH.Client*
2. Windows. Сгенерировать shh ключ, выполнить PowerShell
cd c:\Users\[UserName]\.ssh ssh-keygen -t rsa -b 4096 -C "your_mail@example.com"
[UserName] - имя текущего пользователя.
Каталог c:\Users\[UserName]\.ssh обычно скрытый и\или системный. При отсутствии каталога предварительно его создать.
your_mail@example.com - e-mail текущего пользователя.
3. Redmine. Содержимым из c:\Users\[UserName]\.ssh\id_rsa.pub дополнить файл(добавить новую строку) root/.ssh/authorized_keys
Каталог root/.ssh/authorized_keys обычно скрытый и\или системный.
4. Windows. Установка первого соединения, выполнить PowerShell
ssh root@192.168.1.155
root - пользователь RedMine
192.168.1.155 - IP Hyper-V, где развернут RedMine
PowerShell попросит принять соединение, набрать yes и нажать Enter, если всё сделано верно больше вводить пароль при подключении по ssh больше не придётся.
5. Windows. Создаем файл StartBackUp.ps1 с содержимым в рабочем каталоге пользователя (в данный каталог будет производиться архивация данных RedMine)
cls #Текущая дата $DateStr=(Get-Date).ToString("yyyy_MM_dd_hh_mm_ss") #Создаем (удаляя предыдущий) скрипт арихивации Write-Host "=====================$DateStr======================" $FileName = "BackUpScript.ps1" if (Test-Path $FileName) { Remove-Item $FileName } #Формируем имя временного каталога RedMine $BackUpPath="/var//www//"+$DateStr Write-Host "Create: $FileName" #Создать временный каталог для архива "ssh root@192.168.1.155 'mkdir "+$BackUpPath+"'">>$FileName #Архив файлов "ssh root@192.168.1.155 'tar -cvf "+$BackUpPath+"/files.tar.gz /var/www/redmine/files'">>$FileName #Архив Git "ssh root@192.168.1.155 'tar -cvf "+$BackUpPath+"/git.tar.gz /srv/repos/git'">>$FileName #Архив базы RedMine "ssh root@192.168.1.155 '/usr/bin/mysqldump -u redmine -p9323XXXXXXX13ad redmine_production | gzip > "+$BackUpPath+"/redmineDB.gz'">>$FileName #Запуск скрипта архивации Write-Host "Run: $FileName" .\BackUpScript.ps1 #Копировние временного каталога RedMine в текущий рабочий каталог Windows Write-Host "Copy dir from $BackUpPath to "(Get-Location) scp -r root@192.168.1.155:$BackUpPath (Get-Location) #Создаем (удаляя предыдущий) скрипт удаления временного каталога RedMine $FileName = "DelBackUpScript.ps1" if (Test-Path $FileName) { Remove-Item $FileName } #Запуск скрипта удаления "ssh root@192.168.1.155 'rm -r "+ $BackUpPath+"'">>$FileName Write-Host "Run: $FileName" .\DelBackUpScript.ps1
Данные для строки архива базы RedMine брать из /var/www/redmine/config/database.yml
6. Windows. Запускаем PowerShell, переходим в каталог с StartBackUp.ps1 и запускаем его на исполнение.
