Содержание
1. Список необходимых пакетов и открытых портов
1.1. На Корпоративный сервер 2024 должны быть:
1. dialog;
2. curl;
3. openssh-client / openssh-clients;
4. perl;
5. nfs-common или nfs-utils (NFS-клиент);
6. RabbitMQ-server (как часть установки Р7 Диска / Корпоративного сервера 2024).
Опционально:
1. sshpass (если использовать SSH по паролю);
2. firewalld или другие firewall-утилиты (ufw / iptables);
3. netcat и/или telnet для диагностики портов.
1.2. На Корпоративный сервер 2019 должны быть:
1. nfs-kernel-server или nfs-utils (NFS-сервер);
2. openssh-server;
3. firewall-утилиты (firewalld / iptables / ufw) — желательно.
1.3. Между Корпоративный сервер 2019 и Корпоративный сервер 2024 должны быть открыты порты:
1. SSH;
2. 3306 — порт для MySQL;
3. 2049 — порт nfs.
2. Назначение скрипта
Скрипт cs_migrate_interactive.sh автоматизирует миграцию Р7-Диска:
- С Корпоративного сервера 2019 (старый сервер).
- На Корпоративный сервер 2024 (новый сервер, где уже развернут Р7-Диск / Корпоративный сервер 2024).
Он:
- Настраивает доступ к БД на Корпоративном сервере 2019;
- Поднимает NFS между серверами;
- Правит настройки Processing на Корпоративном сервере 2024;
- Настраивает RabbitMQ для экспорта;
- Запускает экспорт через API Р7-Диска и показывает прогресс по очередям;
- По желанию отключает возможность повторной миграции (раздел 5 инструкции).
Запускается только на Корпоративном сервере 2024 и только от root.
3. Подготовка перед запуском
3.1. На Корпоративном сервере 2024 (где будет запуск скрипта)
Должны быть установлены (кратко):
Dialog— интерфейс скрипта;Curl— HTTP(S) запросы к Р7-Диску;Openssh-client/openssh-clients— SSH на Корпоративном сервере 2019;Perl— правкаappsettings.json;Nfs-commonилиnfs-utils— NFS-клиент;Rabbitmq-server+rabbitmq-plugins,rabbitmqctl— уже ставятся с Р7 Диском/Корпоративном сервере 2024 ;- Firewall-утилиты (
firewalld/ufw/iptables) — для открытия/закрытия порта15672; - При использовании SSH по паролю —
sshpass.
Плюс:
- На Корпоративном сервере 2024 уже должен быть установлен Р7-Диск/Корпоративном сервере 2024 ;
- Системный пользователь, от которого хранятся файлы (обычно
cddisk), должен существовать.
3.2. На Корпоративном сервере 2019 (старый сервер)
Нужно:
- NFS-сервер (
nfs-kernel-serverилиnfs-utils); - SSH-сервер (
sshd); - Желательно firewall-утилиты (
firewalld/iptables/ufw).
4. Запуск скрипта
MD5: 5B6B16DB15C850F9B8107A7B04E05F45.
На Корпоративном сервере 2024 :
chmod +x cs_migrate_interactive.sh sudo ./cs_migrate_interactive.sh
Если dialog не установлен, скрипт попробует поставить его сам (при наличии доступа в интернет). Без dialog скрипт работать не будет.
5. Интерактивная часть: какие окна и в каком порядке
После запуска скрипт:
5.1. Приветственное окно
Кратко описывает, что он делает:
5.2. Параметры Корпоративный сервер 2019 и SSH
- Адрес Корпоративный сервер 2019.
- IP или имя хоста сервера Корпоративный сервер 2019 — например
192.168.27.10илиcs2019.r7-office.ru.
- IP или имя хоста сервера Корпоративный сервер 2019 — например
- SSH-пользователь.
- По умолчанию
root.
- По умолчанию
- SSH-порт.
- По умолчанию
22(можно любой, который у тебя настроен).
- По умолчанию
- Выбор способа авторизации по SSH:
Меню:- SSH по ключу (вставить закрытый ключ для текущей миграции).
- Открывается окно с текстом-пояснением, затем editbox, куда нужно целиком вставить приватный ключ:
- Строки
-----BEGIN ... PRIVATE KEY-----…-----END ... PRIVATE KEY-----
или хотя бы содержимое.- Скрипт сохраняет ключ во временный файл в
TMP_DIR, выставляетchmod 600и использует только на время миграции. После завершения скриптаTMP_DIRудаляется (ключ уходит).
- Скрипт сохраняет ключ во временный файл в
- Строки
- Открывается окно с текстом-пояснением, затем editbox, куда нужно целиком вставить приватный ключ:
- SSH по ключу (указать путь к ключу).
- Предлагается ввести путь к существующему ключу, по умолчанию что-то вроде
/root/.ssh/id_ed25519.
- Предлагается ввести путь к существующему ключу, по умолчанию что-то вроде
- SSH по логину/паролю (через sshpass).
- Спрашивает пароль SSH-пользователя (логин берется из п.2);
- Использует
sshpassдля авторизации (еслиsshpassнет — попытается установить).
- SSH по ключу (вставить закрытый ключ для текущей миграции).
5.3. Настройки MySQL-пользователя для миграции
Скрипт создаёт отдельного read-only пользователя на Корпоративном сервере 2019:
- Спрашивает:
- Имя пользователя: по умолчанию
cddisk; - Пароль для этого пользователя.
- Имя пользователя: по умолчанию
Этот пользователь используется на Корпоративный сервер 2024 в строке подключения CommunityRepository.
5.4. Пользователь файлов на Корпоративный сервер 2024
- Локальный пользователь Linux на Корпоративный сервер 2024, от имени которого хранятся файлы Р7-Диска
— обычноcddisk.
UID/GID этого пользователя будут подставлены в /etc/exports на Корпоративном сервере 2019 (опции anonuid, anongid).
5.5. Каталог с файлами пользователей (на Корпоративный сервер 2019.
Скрипт задаёт вопрос:
Каталог с файлами пользователей находится в
/var/www/r7-office/Data/Products/Files
Оставить этот путь?
- Если жмёшь Да — используется путь по умолчанию.
- Если жмёшь Нет — открывается окно ввода, куда можно вписать свой путь (например
/data/r7disk/files).
Этот путь дальше используется:
- В
/etc/exportsна Корпоративном сервере 2019; - В
/etc/fstabна Корпоративном сервер 2024 (строка видаCS2019_HOST:FILES_PATH /mnt/cs nfs ...); - В cleanup — при чистке
/etc/exports.
5.6. Домен/URL Р7-Диска на Корпоративный сервер 2024
- Доменное имя или IP Р7-Диска на Корпоративный сервер 2024
– напримерdisk4.test150.s7-office.site.
Скрипт старается автоматически подставить это из /etc/nginx/sites-available/cddisk (директива server_name), если файл существует.
5.7. Суперпользователь Р7-Диска
- Имя: по умолчанию
superadmin; - Пароль: по умолчанию тоже
superadmin(если оставить пустым при первом вводе, подставитсяsuperadmin).
Эти данные используются для:
- Проверки авторизации на
https://DISK_HOST/; - Вызова API
/api/v1/ExportFromCs/Start.
5.8. Параметры для RabbitMQ
- IP-адрес, с которого будешь открывать веб-интерфейс rabbitmq
– обычно IP рабочего места админа. На его основе создаётся vhost в RabbitMQ.
- Имя пользователя rabbitmq и пароль:
- Создаётся/настраивается пользователь в RabbitMQ;
- Ему выдаются права и тег
administrator.
5.9. Итоговое окно подтверждения
Сводка всех введённых параметров:
- Адреса, пользователи, порты;
- Путь с файлами;
- Домен диска, superadmin;
- Параметры RabbitMQ (IP, логин).
Вопрос: «Продолжить с этими параметрами?».
Если нажать Нет, скрипт вернётся к вводу и позволит всё поменять.
6. Что скрипт делает дальше (последовательность шагов)
После подтверждения параметров начинается «автоматическая часть».
В реальном времени всё сопровождается строчками вида:
==> Описание шага
В консоли и всплывающими окнами при ошибках.
6.1. Блок precheck
- Установка sshpass (если выбран SSH по паролю).
- При необходимости пытается установить через пакетный менеджер.
- Проверка SSH к Корпоративный сервер 2019.
- Команда
ssh_cs2019 "echo ok"; - Если не удаётся подключиться — ошибка и выход.
- Команда
- Определение локального firewall (Корпоративный сервер 2024..
- Смотрит, есть ли
firewall-cmd,ufwилиiptables, задаётLOCAL_FW_TYPE.
- Смотрит, есть ли
- Определение firewall на Корпоративный сервер 2019.
- По SSH определяет, что стоит:
firewalld,ufw,iptablesили ничего.
- По SSH определяет, что стоит:
- Проверка наличия mysql на Корпоративный сервер 2019.
- Если клиенты MySQL/MariaDB не установлены — скрипт завершится с просьбой установить.
- Чтение настроек БД с Корпоративный сервер 2019.
- По SSH читает
/var/www/r7-office/WebStudio/web.connections.config; - Из connectionString вытаскивает:
Database=...→MYSQL_DB;User ID=...→MYSQL_ROOT_USER;Password=...→MYSQL_ROOT_PASS.
- Если не получилось — спрашивает БД/логин/пароль MySQL
rootвручную.
- По SSH читает
- Проверка наличия пользователя файлов на Корпоративный сервер 2024.
Id CSDISK_USER; если нет — ошибка, нужно создать заранее.
- Проверка доступности MySQL на Корпоративный сервер 2019 по сети.
- Проверяет порт
3306наCS2019_HOST(через/dev/tcp,ncилиtelnet).
- Проверяет порт
6.2. Проверка логина/пароля Р7-Диска
Функция check_r7_admin_credentials:
- Делает запрос:
curl -k -u "R7_ADMIN_USER:R7_ADMIN_PASS" https://DISK_HOST/
- Если код
2xxили3xx— всё ок, едем дальше. - Если
401 Unauthorized:- Показывает окно с текстом, что логин/пароль неверны;
- Предлагает ввести новый логин/пароль;
- Повторы до 3 раз.
- Если другой код или после 3 попыток всё плохо — скрипт завершает работу с описанием ошибки.
6.3. Создание MySQL-пользователя для миграции Корпоративный сервер 2019
Функция create_mysql_user:
- По SSH на Корпоративном сервере 2019 выполняется:
CREATE USER IF NOT EXISTS 'MYSQL_USER'@'CS2024_IP' IDENTIFIED WITH mysql_native_password BY 'MYSQL_PASS'; GRANT SELECT ON `MYSQL_DB`.* TO 'MYSQL_USER'@'CS2024_IP'; FLUSH PRIVILEGES;
Права только на чтение всей БД MYSQL_DB.
6.4. Настройка NFS на Корпоративный сервер 2019
Функция configure_nfs_cs2019:
- Берёт
uid/gidпользователяCSDISK_USERна Корпоративный сервер 2024. - На Корпоративном сервере 2019 устанавливает NFS-сервер (
nfs-kernel-server/nfs-utilsи т.п.), включает и запускает службу. - Формирует строку для
/etc/exports:FILES_PATH CS2024_IP/32(rw,nohide,all_squash,anonuid=UID,anongid=GID,no_subtree_check)
- Добавляет её в
/etc/exports(если ещё нет), делаетexportfs -ra. - Открывает порты
2049/tcpи2049/udpна firewall Корпоративном сервере 2019. - Проверяет доступность порта
2049наCS2019_HOST.
6.5. Остановка сессий документов на Корпоративный сервер 2019
Функция prepare_ds_shutdown_cs2019:
- По SSH запускает
/usr/bin/documentserver-prepare4shutdown.sh, если он существует и исполним; - Если файла нет — выводит предупреждение, но не падает.
6.6. Настройка NFS-клиента на Корпоративном сервер 2024
Функция configure_nfs_cs2024:
- Устанавливает NFS-клиент (
nfs-common/nfs-utils), если его ещё нет. - Создаёт каталог
/mnt/cs. - Добавляет в
/etc/fstabстроку:CS2019_HOST:FILES_PATH /mnt/cs nfs defaults 0 2
Только если строки с
/mnt/csещё нет. - Выполняет
mount -a— монтирует/mnt/cs.
6.7. Настройка Processing на Корпоративный сервер 2024
Функция configure_processing_cs2024:
1. Проверяет /opt/r7-office/Processing/services.json на наличие ExportDataFromCsMessageHandler:
- Если есть — ок;
- Если нет — пишет предупреждение, что блок нужно добавить вручную по инструкции.
2. Настраивает ConnectionStrings.CommunityRepository в /opt/r7-office/Processing/appsettings.json:
- Делает backup
appsettings.json.bak.<дата>; - Через
perl -0pi -eзаменяет строку:"CommunityRepository": "..."
На:
"CommunityRepository": "Server=CS2019_HOST;UserID=MYSQL_USER;Password=MYSQL_PASS;Database=MYSQL_DB;SslMode=none"
- Делает backup
6.8. Настройка RabbitMQ на Корпоративный сервер 2024
Функция configure_rabbitmq_cs2024:
- Проверяет наличие
rabbitmq-plugins— если нет, пишет предупреждение и пропускает этап. - Включает web-интерфейс:
rabbitmq-plugins enable rabbitmq_management systemctl restart rabbitmq-server.. - Создаёт/обновляет пользователя:
rabbitmqctl add_user RABBIT_USER RABBIT_PASS rabbitmqctl set_permissions -p / RABBIT_USER ".*" ".*" ".*" rabbitmqctl add_vhost ADMIN_IP rabbitmqctl set_permissions -p ADMIN_IP RABBIT_USER ".*" ".*" ".*" rabbitmqctl set_user_tags RABBIT_USER administrator
- Открывает порт
15672/tcpна локальном firewall. - Проверяет доступность
15672наCS2024_IP.
7. Запуск экспорта и отображение прогресса
7.1. Запуск экспорта
Функция start_export:
- Вызывает:
curl -k -u "R7_ADMIN_USER:R7_ADMIN_PASS" \ https://DISK_HOST/api/v1/ExportFromCs/Start
- Смотрит HTTP-код и тело:
- Если код 2xx и в JSON есть
"Status":1— считает, что экспорт успешно стартовал; - Показывает окно с
HTTP-кодом и ответом; - Переходит к прогресс-бару.
- Если код 2xx и в JSON есть
- Если
401 Unauthorized:- Показывает окно с пояснением;
- Предлагает ввод логина/пароля заново;
- Повторяет попытку до успешного ответа или отказа.
- При других кодах:
- Показывает окно с
HTTP-кодом и текстом ответа/ошибок; - Завершает выполнение с ошибкой.
- Показывает окно с
7.2. Отображение прогресса по очередям RabbitMQ
Функция show_migration_progress:
- Каждые 5 секунд выполняет:
rabbitmqctl list_queues name messages -p /
- Считывает количество сообщений в:
Import.User.From.Cs— пользователи в процессе;Export.Data.From.Cs— файлы в процессе.
- На основе этих чисел оценивает процент (от 5% до 95%) и кормит их
dialog --gauge:- Когда обе очереди обнулятся, отдаёт 100% и выходим из цикла.
Это даёт живой прогресс-бар по ходу миграции.
8. Отключение миграции
После завершения экспорта и закрытия прогресс-бара появляется вопрос:
Хотите сейчас ОТКЛЮЧИТЬ возможность повторной миграции?
Если выбрать Да, вызывается cleanup_after_export:
- На Корпоративный сервер 2019:
- Удаляет MySQL-пользователя
MYSQL_USER@CS2024_IP; - Чистит
/etc/exportsот строки сFILES_PATH CS2024_IP/32; Exportfs -ra;- Останавливает и отключает
nfs-server; - Закрывает порты
2049/tcpи2049/udpна firewall; - Перезапускает службы DocumentServer (
ds-docservice.service,ds-converter.service,ds-metrics.service— если есть).
- Удаляет MySQL-пользователя
- На Корпоративный сервер 2024:
- Отключает плагин
rabbitmq_management; - Закрывает порт
15672/tcpв локальном firewall; - Удаляет строку
/mnt/csиз/etc/fstab(если она там есть); - Выполняет
umount -l -f /mnt/cs(сtimeout, чтобы не «висеть»).
- Отключает плагин
В конце пишет.
==> Очистка после миграции завершена.
8.1. Финальное окно
В самом конце — окно:
Основные шаги миграции выполнены.
Проверь работу портала и данных.
После этого скрипт завершает работу.
















