commit 86a7940e75b31977cb741aa5066a6db1f427adaa Author: M.Goldshteyn Date: Wed Sep 4 14:45:48 2024 +0300 migr diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..d843f34 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/config.txt b/config.txt new file mode 100644 index 0000000..c85a55a --- /dev/null +++ b/config.txt @@ -0,0 +1,57 @@ +#Укажи 1, чтобы снять дамп с event_store, 0 если без event_store +EVENT_STORE=1 + +#Укажи 1, чтобы скачать папку evt целиком, 0 чтобы скачать только файлы из evt/common +EVT_COMMON=1 + + +# Пароль БД исходного сервера +SOURCE_DB_PASSWORD=anna5kanna + +#Имя БД на исходном сервере +SOURCE_DB_NAME=mynewdb + +#Имя БД на локальном сервере +DESTINATION_DB_NAME=locality409 + +#Номер evt на исходном сервере +SOURCE_EVT=evt4 + + + +#IP локалки с платформой +DESTINATION_IP=217.107.34.92 + +#Пользователь локалки с платформой +DESTINATION_USER=root + +#Пароль локалки с платформой +DESTINATION_PASSWORD=123saveme + +#SSH порт локалки с платформой +DESTINATION_PORT=22 + + + +#IP локалки с базой +DESTINATION_DATABASE_IP=217.107.34.92 + +#Пользователь локалки с базой +DESTINATION_DATABASE_USER=root + +#SSH Пароль локалки с базой +DESTINATION_DATABASE_PASSWORD=123saveme + +#SSH порт локалки с базой +DESTINATION_DATABASE_PORT=22 + +#Postgres пароль локалки с базой +DESTINATION_POSTGRES_PASSWORD=anna5kanna + + + +#Где платформа на исходном серевере (не надо добавлять слэш в конце;) +SOURCE_PLATFORM_PATH=/home/platform5-server + +#Где платформа на локалке +DESTINATION_PLATFORM_PATH=/home/platform5-server diff --git a/create_db.sh b/create_db.sh new file mode 100644 index 0000000..7403739 --- /dev/null +++ b/create_db.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +su - postgres -c "PGPASSWORD=\"anna5kanna\" psql -U postgres -c \"create database locality409 + WITH OWNER = postgres + ENCODING = 'UTF8' + TABLESPACE = pg_default + LC_COLLATE = 'ru_RU.UTF-8' + LC_CTYPE = 'ru_RU.UTF-8' + TEMPLATE = template0 + CONNECTION LIMIT = -1;\"" \ No newline at end of file diff --git a/create_db.sh.template b/create_db.sh.template new file mode 100644 index 0000000..5e099ff --- /dev/null +++ b/create_db.sh.template @@ -0,0 +1,11 @@ +#!/bin/bash + +su - postgres -c "PGPASSWORD=\"DESTINATION_POSTGRES_PASSWORD\" psql -U postgres -c \"create database DESTINATION_DB_NAME + WITH OWNER = postgres + ENCODING = 'UTF8' + TABLESPACE = pg_default + LC_COLLATE = 'ru_RU.UTF-8' + LC_CTYPE = 'ru_RU.UTF-8' + TEMPLATE = template0 + CONNECTION LIMIT = -1;\"" + diff --git a/migration.sh b/migration.sh new file mode 100644 index 0000000..0f3fc30 --- /dev/null +++ b/migration.sh @@ -0,0 +1,67 @@ +#!/bin/bash +#apt update && apt install sshpass -y +set -a # export variables from config.txt test +source config.txt +set +a # stop exporting + +DATE="$(date +%Y-%m-%d_%H-%M-%S)" +echo $DATE + +#1. We are on the source (e.g. main) +systemctl is-active --quiet platform5.service && systemctl stop platform5 +systemctl is-active --quiet platform6.service && systemctl stop platform6 + +db_backup() { + echo EVENT_STORE=$EVENT_STORE + if [[ "$EVENT_STORE" == 0 ]]; then + echo Making backup without event_store + PGPASSWORD="$SOURCE_DB_PASSWORD" pg_dump -Fc -T event_store -U postgres $SOURCE_DB_NAME > /var/backups/$SOURCE_DB_NAME.migration.$DATE.sql + elif [[ "$EVENT_STORE" == 1 ]]; then + echo Making backup with event_store + PGPASSWORD="$SOURCE_DB_PASSWORD" pg_dump -Fc -U postgres $SOURCE_DB_NAME > /var/backups/$SOURCE_DB_NAME.migration.$DATE.sql + else echo "EVENT_STORE value must be 0 or 1" && exit + fi + + echo "send dump to the destination" + echo Sending db backup to destination server + cd /var/backups/ && yes | sshpass -p "$DESTINATION_DATABASE_PASSWORD" scp -P $DESTINATION_DATABASE_PORT -o StrictHostKeyChecking=no $SOURCE_DB_NAME.migration.$DATE.sql $DESTINATION_DATABASE_USER@$DESTINATION_DATABASE_IP:~/ + cd - +} + +evt_full_rsync(){ + echo "send $SOURCE_EVT to the destination" + sshpass -p "$DESTINATION_PASSWORD" rsync -e "ssh -p $DESTINATION_PORT" -avz --ignore-existing $SOURCE_PLATFORM_PATH/bin/storage/1/$SOURCE_EVT/ $DESTINATION_USER@$DESTINATION_IP:$DESTINATION_PLATFORM_PATH/bin/storage/1/$SOURCE_EVT/ +} + +evt_common_files_rsync(){ + echo "send files from $SOURCE_EVT/common to the destination" + sshpass -p "$DESTINATION_PASSWORD" ssh $DESTINATION_USER@$DESTINATION_IP -p $DESTINATION_PORT "mkdir -p $DESTINATION_PLATFORM_PATH/bin/storage/1/$SOURCE_EVT/common/" + sshpass -p "$DESTINATION_PASSWORD" rsync -e "ssh -p $DESTINATION_PORT" -avz --ignore-existing -f"- */" -f"+ *" $SOURCE_PLATFORM_PATH/bin/storage/1/$SOURCE_EVT/common/ $DESTINATION_USER@$DESTINATION_IP:$DESTINATION_PLATFORM_PATH/bin/storage/1/$SOURCE_EVT/common/ +} + +fonts_rsync(){ + echo "send fonts to the destination" + sshpass -p "$DESTINATION_PASSWORD" ssh $DESTINATION_USER@$DESTINATION_IP -p $DESTINATION_PORT "mkdir -p $DESTINATION_PLATFORM_PATH/bin/storage/1/fonts/" + sshpass -p "$DESTINATION_PASSWORD" rsync -e "ssh -p $DESTINATION_PORT" -avz --ignore-existing $SOURCE_PLATFORM_PATH/bin/storage/1/fonts/ $DESTINATION_USER@$DESTINATION_IP:$DESTINATION_PLATFORM_PATH/bin/storage/1/fonts/ +} + + if [[ "$EVT_COMMON" == 0 ]]; then + echo "Качаю файлы из evt/common" + # evt_common_files_rsync + elif [[ "$EVT_COMMON" == 1 ]]; then + echo "Качаю evt целиком" + # evt_full_rsync + else echo "EVENT_COMMON value must be 0 or 1" && exit + fi + +#db_backup + +sed -e "s/DESTINATION_DB_NAME/${DESTINATION_DB_NAME}/" \ + -e "s/DESTINATION_POSTGRES_PASSWORD/${DESTINATION_POSTGRES_PASSWORD}/"\ + create_db.sh.template > create_db.sh + +sshpass -p "$DESTINATION_DATABASE_PASSWORD" ssh -p $DESTINATION_DATABASE_PORT $DESTINATION_DATABASE_USER@$DESTINATION_DATABASE_IP 'bash -s' < create_db.sh +#evt_full_rsync +#evt_common_files_rsync +#fonts_rsync +#ssh $DESTINATION_USER@$DESTINATION_IP -p $DESTINATION_PORT "create_db.sh." \ No newline at end of file diff --git a/task.txt b/task.txt new file mode 100644 index 0000000..4a0da13 --- /dev/null +++ b/task.txt @@ -0,0 +1,30 @@ + + + +1. Стоп сервера +2. Снятие дампа (с евент стором/без евент стора) + +5. Отправка его на удаленный сервер/стянуть с удаленного сервера +6. Создание базы +7. Вотсановление дампа + + +8. скачиванние платформы, ветку берем из конфига. фронт и бэк. + +9. рсикаем нужный евт в сторадж. +фонт + +из evt/common качаем все файлы , не папки, + +скрипт 2 - докачка файлов. + потом отдельно докачиваем папки +если звездочка то все. если не звезочка то перечислкенные через запятую имена папок. + + +10. Исправление конфига дб конф + +в конфиг ставим пароль бд на удаленной. потм прописываем его в дб.конф + +11. Докачка нужных файлов. - скрипт2 + +старт сервиса \ No newline at end of file