Продукты Р7
Корпоративный сервер 2024
Корпоративный сервер 2024
Сервер документов
Сервер документов
Редакторы
Редакторы
Корпоративный сервер 2019
Корпоративный сервер 2019
Графика
Графика
Команда
Команда
Мобильные редакторы
Мобильные редакторы
Облачный офис
Облачный офис
Почта
Почта
Органайзер
Органайзер
Дополнительно
Часто задаваемые вопросы
Разработчикам
Интеграции
Новые возможности

Миграция Корпоративный сервер 2019 (Linux) на Корпоративный сервер 2024 (Linux) с помощью скрипта

Обновлено: 13.01.26


Обратите внимание

Дисклеймер о текущих ограничениях и известных ошибках

Настоящий документ содержит информацию о текущих ограничениях и известных ошибках, обнаруженных при использовании инструмента миграции данных из Корпоративного сервера 2019 (далее - КС2019) в Корпоративный сервер 2024 (далее – КС2024). Мы стремимся обеспечить высокий уровень качества нашего продукта, однако на данный момент выявлены следующие проблемы, которые могут повлиять на функционирование и предупреждаем о возможных рисках его использования:

1. Интерфейс и настройки доступа:
  • В интерфейсе настроек доступа в КС2024 не отображаются права пользователей на документы, наследуемые от прав папок: Некоторые права пользователей могут не отображаться в интерфейсе КС2024, что может вводить в заблуждение при работе с делегированием прав на документы. При просмотре прав на документ отображаются только права выданные непосредственно на документ, права наследованные от папок не отображаются.
2. Права администратора:
  • Не мигрирует встроенная УЗ Администратора КС2019: Возможно отсутствие доступа к важному функционалу для отдельных групп пользователей.
  • Не мигрируют права администратора, выданные пользователю портала: Права администратора, выданные пользователям для работы с модулями портала, не переносятся в КС2024. Возможно отсутствие доступа к важному функционалу для отдельных групп пользователей.
3. Документы и папки:
  • Не мигрируют права на документы, добавленные в папку Общие с правами на Чтение: Возможна потеря доступа к отдельным документам.
4. Атрибуты пользователей:
  • Некорректно мигрируют даты создания пользователей: Даты создания учетных записей могут быть неправильно перенесены, что может искажать некоторую личную информацию пользователей.
  • Не мигрируют руководители пользователей: Информация о руководителях пользователей может быть потеряна. Необходимо ручное восстановление атрибутов пользователей.
  • Не мигрируют должности пользователей: Информация о должностях пользователей может быть потеряна. Необходимо ручное восстановление атрибутов пользователей.
  • Некорректно мигрирует телефонный код: Телефонные коды могут быть неправильно перенесены. Необходимо ручное восстановление атрибутов пользователей.
5. Проблемы доступа к информации:
  • При миграции УЗ с правами Гость получает права на редактирование к некоторым документам: Учетные записи с правами только на чтение могут получать непредусмотренные права на редактирование к некоторым документам, что может нарушать политику прав доступа к корпоративной информации. Под «некоторыми документами» понимаются документы КС2019 из папки «Общие», полный доступ к которым был выдан группе «Все». Для обхода данной ошибки перед выполнением миграции требуется исключить все УЗ с правами Гость из группы «Все».
  • Не мигрируют внешние ссылки на документы и папки: Возможно отсутствие доступа к определенным документам для отдельных групп пользователей.

Примечание: Обращаем внимание, что инструмент миграции находится в стадии активной разработки. В связи с этим просим не проводить миграцию без предварительного тестирования на непродуктивном контуре. Мы активно работаем над исправлением указанных ошибок и улучшаем функциональность инструмента миграции. Рекомендуем вам следить за обновлениями и устанавливать последние версии для получения исправлений и улучшений.

Приносим извинения за возможные неудобства и благодарим за ваше понимание и терпение. Для получения дополнительной информации или помощи, пожалуйста, обращайтесь в нашу службу поддержки.

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.

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

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

  1. Выбор способа авторизации по 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;
    • Пароль для этого пользователя.

Этот пользователь используется на Корпоративный сервер 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

  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. Финальное окно

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

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

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