Перейти к содержимому

Миграция из SharePoint

Эта инструкция для администратора, которому нужно перенести списки, библиотеки, файлы и права из SharePoint в Portal.

В дистрибутиве Portal есть программа portal-sp-migrate: у неё два режима — веб-мастер (рекомендуется) и команды в терминале. Собирать программу из исходников не нужно — берите готовый файл из поставки.

Читайте сверху вниз. На каждом шаге — что сделать и что должно появиться на экране.


После успешной миграции:

  1. Подсайты SharePoint станут узлами Portal.
  2. Списки и библиотеки появятся с полями и данными.
  3. Файлы и вложения будут в библиотеках / у элементов.
  4. При включённом переносе прав — сотрудники получат доступ по сопоставлению групп/пользователей.

Таблица «какой тип поля куда попадает»: Маппинг полей.


Программа — отдельный клиент на вашем компьютере (или jump-хосте). Это не служба SharePoint и не модуль внутри Portal.

ВопросОтвет
Ставить на сервер SharePoint?Нет
Обязательно на сервер Portal?Нет (иногда даже хуже: с сервера Portal может не быть сети до старого SharePoint)
Где правильно?Любая машина, которая видит и SharePoint, и Portal (ноутбук админа, VPN, jump-host)
  • SharePoint Online — нужен доступ в интернет к Microsoft 365 и до вашего Portal.
  • SharePoint на своих серверах (On-Premises) — нужна сеть/VPN до фермы SharePoint и до Portal.

ЧтоЗачем
Установленный PortalКуда переносим данные
Учётка администратора порталаПрограмма входит в Portal от её имени
Доступ к сайту SharePointЧтение списков и файлов
Синхронизация пользователей из AD (служба ad-sync), если пользуетесь доменомЧтобы люди и группы нашлись в Portal при переносе прав и полей «сотрудник»
Бинарник portal-sp-migrate из дистрибутиваСам инструмент
Как установлен PortalПуть
Native Linuxopt/portal/bin/portal-sp-migrate
Native Windowsopt/portal/bin/portal-sp-migrate.exe
Docker-бандлtools/portal-sp-migrate (+ примеры в sharepoint-migrate-config/)

Рядом с программой должен быть каталог wwwroot/ — без него веб-мастер откроется «без стилей» или с ошибкой.

Обычно заводят приложение в каталоге Microsoft (App Registration) с правами на чтение сайтов и файлов. Это делает администратор Microsoft 365 / Entra ID.
В мастере понадобятся: адрес сайта, идентификаторы приложения и секрет.

Учётная запись Windows (NTLM) с доступом к нужной коллекции сайтов. Формат логина часто ДОМЕН\пользователь.


На машине с доступом к SharePoint и Portal откройте терминал в каталоге с программой:

Окно терминала
./portal-sp-migrate ui

На Windows — portal-sp-migrate.exe ui.

Адрес по умолчанию: http://127.0.0.1:5088.

Браузер может открыться сам. Если нет — вставьте адрес вручную.

По умолчанию мастер слушает только этот компьютер. Если открываете с другой машины:

Окно терминала
./portal-sp-migrate ui --host 0.0.0.0 --token СЕКРЕТНАЯ_СТРОКА

Токен нужно будет ввести при входе в мастер.

На экране порядок примерно такой:

  1. ИсточникSharePoint Online или On-Premises, адрес сайта, учётные данные.
  2. Portal — адрес вашего Portal, логин и пароль администратора.
  3. Область — какие сайты/списки включать (инвентаризация).
  4. План — сколько объектов будет перенесено (без записи или с подтверждением — по экрану мастера).
  5. Запуск — сам перенос; можно смотреть прогресс.
  6. Итог — отчёт: что перенесено, где ошибки.

Файлы заданий мастер кладёт в каталог ./migration-jobs/ рядом с программой.

Шаг «Источник»: SharePoint Online

Шаг «Portal»: URL и учётная запись

Источник On-Premises


Если мастер неудобен (автоматизация, сервер без GUI):

  1. Скопируйте пример конфига:
Окно терминала
cp sharepoint-migrate-config/migration.example.yaml migration.yaml
  1. Откройте migration.yaml в редакторе: адрес SharePoint, Portal, логины, что включать.
  2. Выполните по порядку:
Окно терминала
./portal-sp-migrate discover -c migration.yaml # что есть в источнике
./portal-sp-migrate plan -c migration.yaml # подсчёт без записи
./portal-sp-migrate run -c migration.yaml # перенос

Если перенос прервался:

Окно терминала
./portal-sp-migrate resume -c migration.yaml
./portal-sp-migrate status -c migration.yaml
КомандаЗачем
uiВеб-мастер
discoverИнвентаризация источника
planПлан без записи в Portal
runПолный перенос
run --phase …Только один этап (см. ниже)
resumeПродолжить с места остановки
statusПрогресс и ошибки

Программа идёт по этапам. Повторный запуск не дублирует уже перенесённое (состояние хранится в файле задания).

ЭтапПростыми словами
nodesПодсайты → узлы Portal
schemasСписки, библиотеки, поля
itemsСтроки списков
attachmentsФайлы, прикреплённые к строкам
foldersПапки в библиотеках
filesФайлы библиотек
lookupsПоля «подстановка» и «сотрудник» (вторым проходом)
permissionsПрава (если включили перенос прав)
verifyСверка количества объектов

  1. В мастере или в YAML включите перенос прав (migratePermissions), если права нужны.
  2. Заранее настройте соответствие «учётка/группа в SharePoint → пользователь/группа в Portal» (principalMap в конфиге или экран мастера).
  3. Поля «сотрудник» и «подстановка» заполняются на этапе lookups — после того, как основные данные уже на месте. Без AD-sync и карты соответствий поля могут остаться пустыми.

Не переноситсяКомментарий
Версии файлов (история)Только актуальный файл
Workflows, типы содержимого, управляемые метаданныеВне текущей версии
Современные страницы сайта и веб-части SharePointВне объёма миграции
Права на уровне списка в SharePoint OnlineЧерез Graph обычно только права сайта/веба

Подробный маппинг типов полей: sharepoint-field-mapping.md.


Что видитеЧто сделать
Ошибка входа в Portal (401)Проверьте логин/пароль; нужна учётка администратора портала
Облако «тормозит» / отказы MicrosoftУменьшите размер пакета и число параллельных загрузок в настройках, затем resume
On-Prem: ошибка входаПроверьте домен и формат ДОМЕН\пользователь
Пустые поля «сотрудник» / подстановкаСначала AD-sync, заполните карту соответствий, перезапустите этап lookups
Вложения Online: отказ доступаУ приложения в Microsoft должны быть права на чтение SharePoint
Мастер без оформления / 404Рядом с программой должен быть каталог wwwroot/
Повторный запуск «ещё раз всё копирует»Обычно нет: уже перенесённое пропускается по файлу состояния

source:
type: graph
siteUrl: https://contoso.sharepoint.com/sites/hr
tenantId: "..."
clientId: "..."
clientSecret: "..."
target:
portalUrl: https://portal.example.com
username: admin
password: "..."
authType: local
parentNodeId: null # null = корень Portal
scope:
includeSubsites: true
includeLists: [] # пусто = все списки
excludeLibraries:
- Form Templates
migratePermissions: true
principalMap:
"CONTOSO\\hr-managers": "portal-group-uuid"
"ivanov@company.local": "portal-user-uuid"
options:
batchSize: 100
uploadConcurrency: 4
stateFile: ./migration-state.db
logFile: ./migration.log
source:
type: onprem
siteUrl: https://sp.contoso.local/sites/hr
auth: ntlm
username: CONTOSO\\sp_admin
password: "..."
domain: CONTOSO

Полные примеры лежат в sharepoint-migrate-config/ дистрибутива.