Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Исходные данные
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 и запускаем его на исполнение.