• Post category:Docker
  • Запись изменена:25.11.2025

Содержание

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-stopped

3.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: bind

4. Пересобираем контейнеры после внесения изменений

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

 

Мониторинг прогресса миграции с помощью RabbitMQ

Где:

  • ip_docker_cs24 — IP-адрес Корпоративного сервера 2024;
  • Import.User.From.Cs — очередь экспорта пользователей;
  • Количество сообщений — это количество пользователей которые в процессе переноса;
  • Export.Data.From.Cs — очередь экспорта файлов.
Была ли полезна статья?
Позвольте нам стать лучше
Дополнительные материалы