• Post category:Настройки
  • Запись изменена:25.12.2025

Содержание

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

  1. Адрес Корпоративный сервер 2019.
    • IP или имя хоста сервера Корпоративный сервер 2019 — например 192.168.27.10 или cs2019.r7-office.ru.

Адрес Корпоративный сервер 2019IP или имя хоста сервера Корпоративный сервер 2019— например192.168.27.10илиcs2019.r7-office.ru.

  1. SSH-пользователь.
    • По умолчанию root.

SSH-пользовательПо умолчаниюroot.

  1. SSH-порт.
    • По умолчанию 22 (можно любой, который у тебя настроен).

SSH-портПо умолчанию22(можно любой, который у тебя настроен).

  1. Выбор способа авторизации по SSH:Выбор способа авторизации по SSH:Меню:
    • SSH по ключу (вставить закрытый ключ для текущей миграции).
      • Открывается окно с текстом-пояснением, затем editbox, куда нужно целиком вставить приватный ключ:
        • Строки -----BEGIN ... PRIVATE KEY----------END ... PRIVATE KEY-----
          или хотя бы содержимое.

          • Скрипт сохраняет ключ во временный файл в TMP_DIR, выставляет chmod 600 и использует только на время миграции. После завершения скрипта TMP_DIR удаляется (ключ уходит).
    • SSH по ключу (указать путь к ключу).
      • Предлагается ввести путь к существующему ключу, по умолчанию что-то вроде /root/.ssh/id_ed25519.
    • SSH по логину/паролю (через sshpass).
      • Спрашивает пароль SSH-пользователя (логин берется из п.2);
      • Использует sshpass для авторизации (если sshpass нет — попытается установить).

5.3. Настройки MySQL-пользователя для миграции

Скрипт создаёт отдельного read-only пользователя на Корпоративном сервере 2019:

  • Спрашивает:
    • Имя пользователя: по умолчанию cddisk;
    • Пароль для этого пользователя.

Спрашивает:Имя пользователя:по умолчаниюcddisk;Пароль для этого пользователя.

Спрашивает:Имя пользователя:по умолчаниюcddisk;Пароль для этого пользователя.

Этот пользователь используется на Корпоративный сервер 2024 в строке подключения CommunityRepository.

5.4. Пользователь файлов на Корпоративный сервер 2024

  • Локальный пользователь Linux на Корпоративный сервер 2024, от имени которого хранятся файлы Р7-Диска
    — обычно cddisk.

Локальный пользователь Linux на Корпоративный сервер 2024, от имени которого хранятся файлы Р7-Диска— обычноcddisk.

UID/GID этого пользователя будут подставлены в /etc/exports на Корпоративном сервере 2019 (опции anonuid, anongid).

5.5. Каталог с файлами пользователей (на Корпоративный сервер 2019.

Скрипт задаёт вопрос:

Каталог с файлами пользователей находится в
/var/www/r7-office/Data/Products/Files
Оставить этот путь?

  • Если жмёшь Да — используется путь по умолчанию.
  • Если жмёшь Нет — открывается окно ввода, куда можно вписать свой путь (например /data/r7disk/files).

Если жмёшьДа— используется путь по умолчанию.Если жмёшьНет— открывается окно ввода, куда можно вписать свой путь (например/data/r7disk/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.

Доменное имя или IP Р7-Диска на Корпоративный сервер 2024– напримерdisk4.test150.s7-office.site.

Скрипт старается автоматически подставить это из /etc/nginx/sites-available/cddisk (директива server_name), если файл существует.

5.7. Суперпользователь Р7-Диска

  • Имя: по умолчанию superadmin;
  • Пароль: по умолчанию тоже superadmin (если оставить пустым при первом вводе, подставится superadmin).

Имя: по умолчаниюsuperadmin;Пароль: по умолчанию тожеsuperadmin(если оставить пустым при первом вводе, подставитсяsuperadmin).

Имя: по умолчаниюsuperadmin;Пароль: по умолчанию тожеsuperadmin(если оставить пустым при первом вводе, подставитсяsuperadmin).

Эти данные используются для:

  • Проверки авторизации на https://DISK_HOST/;
  • Вызова API /api/v1/ExportFromCs/Start.

5.8. Параметры для RabbitMQ

  • IP-адрес, с которого будешь открывать веб-интерфейс rabbitmq
    – обычно IP рабочего места админа. На его основе создаётся vhost в RabbitMQ.

IP-адрес, с которого будешь открывать веб-интерфейс rabbitmq– обычно IP рабочего места админа. На его основе создаётся vhost в RabbitMQ.

  • Имя пользователя rabbitmq и пароль:
    • Создаётся/настраивается пользователь в RabbitMQ;
    • Ему выдаются права и тег administrator.

Имя пользователя rabbitmqи пароль:Создаётся/настраивается пользователь в RabbitMQ;Ему выдаются права и тегadministrator.

Имя пользователя rabbitmqи пароль:Создаётся/настраивается пользователь в RabbitMQ;Ему выдаются права и тегadministrator.

5.9. Итоговое окно подтверждения

Сводка всех введённых параметров:

  • Адреса, пользователи, порты;
  • Путь с файлами;
  • Домен диска, superadmin;
  • Параметры RabbitMQ (IP, логин).

Вопрос: «Продолжить с этими параметрами?».

Если нажать Нет, скрипт вернётся к вводу и позволит всё поменять.

Если нажатьНет, скрипт вернётся к вводу и позволит всё поменять.

 

6. Что скрипт делает дальше (последовательность шагов)

После подтверждения параметров начинается «автоматическая часть».

В реальном времени всё сопровождается строчками вида:

==> Описание шага

В консоли и всплывающими окнами при ошибках.

6.1. Блок precheck

  1. Установка sshpass (если выбран SSH по паролю).
    • При необходимости пытается установить через пакетный менеджер.
  2. Проверка SSH к Корпоративный сервер 2019.
    • Команда ssh_cs2019 "echo ok";
    • Если не удаётся подключиться — ошибка и выход.
  3. Определение локального firewall (Корпоративный сервер 2024..
    • Смотрит, есть ли firewall-cmd, ufw или iptables, задаёт LOCAL_FW_TYPE.
  4. Определение firewall на Корпоративный сервер 2019.
    • По SSH определяет, что стоит: firewalld, ufw, iptables или ничего.
  5. Проверка наличия mysql на Корпоративный сервер 2019.
    • Если клиенты MySQL/MariaDB не установлены — скрипт завершится с просьбой установить.
  6. Чтение настроек БД с Корпоративный сервер 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 вручную.
  7. Проверка наличия пользователя файлов на Корпоративный сервер 2024.
    • Id CSDISK_USER; если нет — ошибка, нужно создать заранее.
  8. Проверка доступности MySQL на Корпоративный сервер 2019 по сети.
    • Проверяет порт 3306 на CS2019_HOST (через /dev/tcp, nc или telnet).

6.2. Проверка логина/пароля Р7-Диска

Функция check_r7_admin_credentials:

  1. Делает запрос:
    curl -k -u "R7_ADMIN_USER:R7_ADMIN_PASS" https://DISK_HOST/
  2. Если код 2xx или 3xx — всё ок, едем дальше.
  3. Если 401 Unauthorized:
    • Показывает окно с текстом, что логин/пароль неверны;
    • Предлагает ввести новый логин/пароль;
    • Повторы до 3 раз.
  4. Если другой код или после 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:

  1. Берёт uid/gid пользователя CSDISK_USER на Корпоративный сервер 2024.
  2. На Корпоративном сервере 2019 устанавливает NFS-сервер (nfs-kernel-server/nfs-utils и т.п.), включает и запускает службу.
  3. Формирует строку для /etc/exports:
    FILES_PATH CS2024_IP/32(rw,nohide,all_squash,anonuid=UID,anongid=GID,no_subtree_check)
  4. Добавляет её в /etc/exports (если ещё нет), делает exportfs -ra.
  5. Открывает порты 2049/tcp и 2049/udp на firewall Корпоративном сервере 2019.
  6. Проверяет доступность порта 2049 на CS2019_HOST.

6.5. Остановка сессий документов на Корпоративный сервер 2019

Функция prepare_ds_shutdown_cs2019:

  • По SSH запускает /usr/bin/documentserver-prepare4shutdown.sh, если он существует и исполним;
  • Если файла нет — выводит предупреждение, но не падает.

6.6. Настройка NFS-клиента на Корпоративном сервер 2024

Функция configure_nfs_cs2024:

  1. Устанавливает NFS-клиент (nfs-common/nfs-utils), если его ещё нет.
  2. Создаёт каталог /mnt/cs.
  3. Добавляет в /etc/fstab строку:
    CS2019_HOST:FILES_PATH /mnt/cs nfs defaults 0 2

    Только если строки с /mnt/cs ещё нет.

  4. Выполняет 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"

6.8. Настройка RabbitMQ на Корпоративный сервер 2024

Функция configure_rabbitmq_cs2024:

  1. Проверяет наличие rabbitmq-plugins — если нет, пишет предупреждение и пропускает этап.
  2. Включает web-интерфейс:rabbitmq-plugins enable rabbitmq_management systemctl restart rabbitmq-server..
  3. Создаёт/обновляет пользователя:
    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
  4. Открывает порт 15672/tcp на локальном firewall.
  5. Проверяет доступность 15672 на CS2024_IP.

7. Запуск экспорта и отображение прогресса

7.1. Запуск экспорта

Функция start_export:

  1. Вызывает:
    curl -k -u "R7_ADMIN_USER:R7_ADMIN_PASS" \ https://DISK_HOST/api/v1/ExportFromCs/Start
  2. Смотрит HTTP-код и тело:
    • Если код 2xx и в JSON есть "Status":1 — считает, что экспорт успешно стартовал;
    • Показывает окно с HTTP-кодом и ответом;
    • Переходит к прогресс-бару.
  3. Если 401 Unauthorized:
    • Показывает окно с пояснением;
    • Предлагает ввод логина/пароля заново;
    • Повторяет попытку до успешного ответа или отказа.
  4. При других кодах:
    • Показывает окно с 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:

  1. На Корпоративный сервер 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 — если есть).
  2. На Корпоративный сервер 2024:
    • Отключает плагин rabbitmq_management;
    • Закрывает порт 15672/tcp в локальном firewall;
    • Удаляет строку /mnt/cs из /etc/fstab (если она там есть);
    • Выполняет umount -l -f /mnt/cstimeout, чтобы не «висеть»).

В конце пишет.

==> Очистка после миграции завершена.

8.1. Финальное окно

В самом конце — окно:

Основные шаги миграции выполнены.
Проверь работу портала и данных.

После этого скрипт завершает работу.

Была ли полезна статья?
Позвольте нам стать лучше
Дополнительные материалы