Содержание
1. Подготовка к миграции
1.1. Останавливаем сервер документов и создаем пользователя на сервере с ПО Корпоративный сервер 2024
Смотрим container id контейнера с названием downloads.r7-office.ru:9011/r7office/ds/ds-app:
docker ps
Для остановки сессий с документами выполняем скрипт внутри контейнера:
docker exec container_id_ds-app bash /usr/bin/documentserver-prepare4shutdown.sh
Проверяем, что файлы не открываются на редактирование.
1.2. Создаем пользователя для миграции и добавляем его в группу docker
useradd -u 1999 -G docker cddisk
Посмотреть uid и gid созданного пользователя:
id cddisk
2. Работы для интеграции на Корпоративном сервере 2019
2.1. Создаем пользователя cddisk с правами SELECT
2.1.1. Узнаём пароль от root MySQL командой
grep -oP 'Password=\K[^;]+' /var/www/r7-office/WebStudio/web.connections.config
2.1.2. Подключаемся к MySQL
mysql -u root -p
2.1.3. Создаем пользователя cddisk с правами SELECT
CREATE USER 'cddisk'@'ip_docker_cs24' IDENTIFIED WITH mysql_native_password BY 'StrongSecurityPassword'; GRANT SELECT ON `r7-office`.* TO 'cddisk'@'ip_docker_cs24'; FLUSH PRIVILEGES; \q
Где:
ip_docker_cs24— IP-адрес Корпоративного сервера 2024;StrongSecurityPassword— пароль пользователяcddisk;cddisk— пользователь, с доступом к БД;r7-office— имя базы данных.
2.2. Предоставляем доступ к файлам
2.2.1. Устанавливаем nfs сервер
# .deb apt install nfs-kernel-server -y # .rpm yum install nfs-utils nfs4-acl-tools # ALT Linux apt-get install nfs-server
2.2.2. Запускаем службу nfs
systemctl start nfs-server systemctl enable nfs-server
2.2.3. Открываем файл /etc/exports
nano /etc/exports
2.2.4. Добавляем строку в файл /etc/exports
/var/www/r7-office/Data/Products/Files ip_docker_cs24/32(rw,nohide,all_squash,anonuid=1999,anongid=995,no_subtree_check)
Где:
ip_docker_cs24— IP-адрес сервера с докер версией Корпоративного сервера 2024;anonuid=1999— указываем id, если выполнялось создание нового пользователяcddisk;anongid=995— указываем id группыdocker.
2.2.5. Применяем изменения
exportfs -ra
3. Работы для интеграции на Корпоративном сервере 2024
3.1. Проверьте доступ к БД и NFS Корпоративного сервера 2019
telnet ip_address_cs19 3306 telnet ip_address_cs19 2049
Где:
ip_address_cs19— IP-адрес сервера с ПО Корпоративный сервер 2019;3306— порт для MySQL;2049— порт NFS.
3.2. Настройка доступ к файлам
3.2.1. Установите клиент nfs
# для deb sudo apt-get install nfs-common # для yum sudo yum install nfs-utils # ALT Linux sudo apt-get install nfs-utils
3.2.2. Создайте каталог для монтирования файлов с Корпоративного сервера 2019
mkdir /mnt/cs19
3.2.3. Настройте автоматическое монтирование сетевой папки при загрузке сервера
nano /etc/fstab
Добавьте в файл содержимое:
ip_address_cs19:/var/www/r7-office/Data/Products/Files /mnt/cs19 nfs defaults 0 2
Где:
ip_address_cs19— IP-адрес сервера с ПО Корпоративный сервер 2019;/var/www/r7-office/Data/Products/Files— имя каталога, который сделали сетевым;/mnt/cs19— куда монтируется.
3.2.4. Примонтируйте сетевой каталог
systemctl daemon-reload mount -a
3.3. Проверяем порты RabbitMQ
Перед внесением изменений cкопируйте файл template.yaml в каталоге /opt/r7office/:
cp template.yaml template.yaml.old
3.3.1. Откройте файл template.yaml, расположенный в каталоге /opt/r7office/
Проверяем в конфигурации cs-rabbitmq что порт 5672 публичный:
cs-rabbitmq:
container_name: cs-rabbitmq
environment:
RABBITMQ_DEFAULT_PASS: guest
RABBITMQ_DEFAULT_USER: guest
RABBITMQ_NODE_PORT: '5672'
r7_team_rabbit_pass: team
hostname: cs-rabbit
image: downloads.r7-office.ru:9011/r7office/cs/cddisk-rabbitmq:2025.1.18.15276
networks:
- net-cs
ports:
- mode: host
protocol: tcp
published: '5672'
target: '5672'
restart: unless-stopped3.3.2. Добавляем RabbitMQ management plugin (опционально)
Для мониторинга прогресса миграции добавляем RabbitMQ management plugin публичный порт 15672 и включаем отображение метрик:
cs-rabbitmq:
container_name: cs-rabbitmq
environment:
RABBITMQ_DEFAULT_PASS: guest
RABBITMQ_DEFAULT_USER: guest
RABBITMQ_NODE_PORT: '5672'
r7_team_rabbit_pass: team
RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS: "-rabbitmq_management_agent disable_metrics_collector false"
hostname: cs-rabbit
image: downloads.r7-office.ru:9011/r7office/cs/cddisk-rabbitmq:2025.1.18.15276
networks:
- net-cs
ports:
- mode: host
protocol: tcp
published: '5672'
target: '5672'
- mode: host
protocol: tcp
published: '15672'
target: '15672'
restart: unless-stopped
command: >
sh -c "
rabbitmq-plugins enable rabbitmq_management &&
docker-entrypoint.sh rabbitmq-server
"3.4. Добавляем файл appsettings.json и директорию внутрь контейнера
Смотрим container id контейнера с названием downloads.r7-office.ru:9011/r7office/cs/cddisk-processing:
docker ps
3.4.1. Извлекаем файл из контейнера командой, находясь в директории r7-office
docker cp container_id_cddisk-processing:/opt/r7-office/Processing/appsettings.json ./
Или заменив ./ на путь к директории r7-office.
Откроем файл appsettings.json на редактирование и приводим строку CommunityRepository к виду:
"ConnectionStrings": {
"R7StorageServerUserActions": "Database=postgres;Username=postgres;Password=pg_pass;Host=postgres;Port=5432;",
"R7StorageServer": "Database=postgres;Username=postgres;Password=pg_pass;Host=postgres;Port=5432;",
"CommunityRepository": "Server=ip_address_cs19;UserID=cddisk;Password=StrongSecurityPassword;Database=r7-office"Где:
ip_address_cs19— IP-адрес сервера с ПО Корпоративный сервер 2019;cddisk— пользователь и его пароль, созданный в пункте 2.1.3.
3.4.2. Добавляем volumes в файле template.yaml в блок cs-processing
cs-processing:
container_name: cs-processing
depends_on:
- cs-registry
- cs-searchapi
- cs-filestorage
- cs-rabbitmq
- cs-postgres
environment:
r7_db_host: cs-psql
r7_db_name: postgres
r7_db_pass: pg_pass
r7_db_port: '5432'
r7_db_user: postgres
r7_filestorage_host: cs-filestorage
r7_filestorage_tcp_port: '11581'
r7_rabbitmq_host: cs-rabbit
r7_rabbitmq_pass: guest
r7_rabbitmq_user: guest
r7_registry_addr: http://cs-registry:7777
r7_searchapi_addr: http://cs-search:2664
hostname: cs-processing
image: downloads.r7-office.ru:9011/r7office/cs/cddisk-processing:2025.1.18.15276
networks:
- net-cs
- net-ds
- net-mail
restart: unless-stopped
volumes:
- source: /opt/r7office/configs/processing/filestorage.json
target: /opt/r7-office/Processing/filestorage.json
type: bind
- source: /opt/r7office/configs/processing/filestorage_temp
target: /var/r7-office/filestorage_temp_proc/
type: bind
#- source: /opt/r7office/configs/processing/appsettings.json
# target: /opt/r7-office/Processing/appsettings.json
# type: bind
- source: /opt/r7office/configs/processing/services.json
target: /opt/r7-office/Processing/services.json
type: bind
- source: /opt/r7office/configs/processing/nlog.config
target: /opt/r7-office/Processing/nlog.config
type: bind
- source: ./support_logs/processing
target: /var/log/r7-office/CDDisk/R7.Storage.Server.Processing.Host
type: bind
- source: /mnt/cs19
target: /mnt/cs19
type: bind
read_only: true
- source: /opt/r7office/appsettings.json
target: /opt/r7-office/Processing/appsettings.json
type: bind4. Пересобираем контейнеры после внесения изменений
4.1. Пересобираем контейнеры после сохранения изменений внесенных template.yaml
docker compose -f template.yaml up -d && docker restart container_id_ds-app
4.2. Корректировка template.yaml в случае неудачи (опционально)
В случае появления сообщения:
validating /opt/r7office/template.yaml: services.mail-server Additional property post_start is not allowed.
Создаем файл mail-change-owner.sh в директории /opt/r7office/ с содержимым:
#!/bin/bash chown vmail /mail exec "$@"
И приводим блок mail-server к виду:
mail-server:
container_name: mail-server
environment:
MAIL_DOMAIN: kaluga.s7-office.site
MAIL_MTA_HOST: mx
MAIL_PSQL_HOST: pgsql-server
MY_DOMAIN: kaluga.s7-office.site
MY_HOSTNAME: mx.kaluga.s7-office.site
PGPORT: '5432'
PGSQL_PASSWORD: pg_pass
POSTGRES_DB: postfix
POSTGRES_PASSWORD: pg_pass
POSTGRES_USER: postfix
hostname: mx
image: downloads.r7-office.ru:9011/r7office/mail/mail-server:1.0.35
networks:
- net-mail
ports:
- mode: host
protocol: tcp
published: 25
target: '25'
- mode: host
protocol: tcp
published: 143
target: '143'
- mode: host
protocol: tcp
published: 465
target: '465'
- mode: host
protocol: tcp
published: 587
target: '587'
- mode: host
protocol: tcp
published: 993
target: '993'
- mode: host
protocol: tcp
published: 8084
target: '8084'
#post_start:
#- command: chown vmail /mail
# user: root
restart: always
volumes:
- read_only: true
source: /opt/r7office/mail-change-owner.sh
target: /opt/r7office/mail-change-owner.sh
type: bind
- read_only: true
source: ./configs/ssl/kaluga.s7-office.site.crt
target: /etc/ssl/mail_cert.pem
type: bind
- read_only: true
source: ./configs/ssl/kaluga.s7-office.site.key
target: /etc/ssl/mail_key.pem
type: bind
- read_only: false
source: ./data/mail_storage/maildir
target: /mail
type: bind
volumes:
ds-www: {}Выполняем пункт 4.1 повторно.
5. Запускаем миграцию
5.1. Запускаем миграцию в браузере
Авторизуемся на портале и открываем в браузере адрес:
https://cddisk.domain.ru/api/v1/ExportFromCs/Start
Где:
cddisk.domain.ru— адрес модуля Р7-Диск у Корпоративный сервер 2024.
5.2. Используем мониторинг прогресса миграции с помощью RabbitMQ
Открываем адрес в браузере и авторизуемся с помощью данных из пункта 3.3.2:
http://ip_docker_cs24:15672
Где:
ip_docker_cs24— IP-адрес Корпоративного сервера 2024;Import.User.From.Cs— очередь экспорта пользователей;Количество сообщений— это количество пользователей которые в процессе переноса;Export.Data.From.Cs— очередь экспорта файлов.

