
К хостинг-провайдеру, где я работаю, обратился клиент. Он просил перенести документы компании из Google Drive на облачный диск с развёрнутым и настроенным Nextcloud.
Бизнес клиента вырос и владелец задумался о безопасности, захотел навести порядок в документах компании, а заодно и не зависеть от иностранных сервисов, которые отключаются в любой момент по политическим мотивам.
Команда привыкла к Google Drive. Они вместе редактировали документы онлайн, делились ссылками с уровнями доступа, некоторые пользовались мобильным приложением, работали из дома — в общем, максимально привыкли к преимуществам облака.
Мы решили переносить с помощью официального приложения Google Integration. В результате миграция 200 Гб заняла 6 часов чистого времени, плюс 40 минут на настройку OAuth (это самая нудная часть), а клиент получил независимость от внешних сервисов.
Похожих кейсов не нагуглилось, поэтому вот статья — может, кому-то тоже пригодится.
Почему выбрали именно этот способ
Нужно было сохранить не только файлы, но и контакты, и календари, и фото и все их метаданные. Плюсом хотели найти такой способ, чтобы в будущем сделать простую инструкцию и клиенты облачного хранилища могли сами переносить данные без специальных знаний. Поэтому Rclone сразу отклонили — не каждый знает, как работать с командной строкой. Если же использовать WebDAV, который может быть очень удобен для локальной работы с документами, то для переноса не очень подходит. С ним пришлось бы перетаскивать вручную, что не оправдано при таком количестве информации.
И, хотя мы переносили на облачное хранилище с панелью Plesk, кейс пригодится и тем, у кого cPanel, ISPmanager или другая панель управления хостингом.
Всё, что потребовалось для переноса данных — подключённое облачное хранилище с Nextcloud на хостинге и аккаунт Google.
1. Установка приложения Google integration в Nextcloud
На этом этапе включаем в Nextcloud «переходник» для работы с Google. «Переходник» — Google integration — понимает оба сервиса: переводит просьбы Nextcloud на понятный официальный язык безопасности Google (OAuth 2.0). Он позволяет передать данные безопасно и контролируемо.
Для установки приложения Google integration необходимо войти в Nextcloud и перейти в [Приложения].

Далее выбираем пункт [Интеграция] и находим приложение [Google Integration].


Этим простым действием мы добавляем в Nextcloud способность «понимать» и взаимодействовать с API Google.
Ссылка Authorized redirect URIs для Google
Далее нужно взять ссылку для Authorized redirect URIs, она пригодится нам в пункте 2.2.4 для создания [Credentials] в Google. Переходим на страницу [Параметры сервера].

На данной странице открываем пункт [Подключённые учетные записи] и копируем ссылку. Она выглядит так: https://ВАШ_ДОМЕН/nextcloud/index.php/apps/integration_google/oauth-redirect.

2. Настройка Google Account
Настраиваем Google Account так, чтобы он доверял нашему Nextcloud и разрешил ему доступ к данным. Для этого создаём специальные ключи доступа (Credentials), но сначала нужно включить двухфакторную аутентификацию (2FA) в настройках безопасности. Без включённой 2FA система не позволит создать Credentials. Так Google защищает данные на случай утечки пароля.
Создание Credentials в аккаунте Google
Теперь создаём в Google Credentials для Nextcloud. Credentials состоят из двух частей: Client ID (открытый ключ) и Client Secret (секретный ключ). Делаем это поэтапно.
2.1. Создаём проект
Для создания [Credentials], переходим в Google Cloud Console. При первом входе выбираем любую страну (Беларуси и России в списке нет), ставим чекбокс и нажимаем [Agree and continue].

Далее выбираем наш проект (если его нет, то создаём): [Select a Project] → [New Project] → [Create].



Имя проекта — любое, можно оставить по умолчанию или изменить на своё (например, Nextcloud Migration).


2.2. Настраиваем экран согласия OAuth
После создания проекта переходим в раздел [APIs & Services] → [OAuth consent screen] → [OAuth Overview] и нажимаем [Get started].

Далее откроется страница создания приложения. Заполняем необходимые поля.





Далее публикуем наше приложение.


Нажмите [Confirm].
2.3. Включаем необходимые API
Теперь нужно «включить» те сервисы Google, к которым Nextcloud будет обращаться. Для этого перейдите в [APIs & Services] → [Library]. Выбираем наш проект и включаем необходимые API сервисы.


Мы добавляли 4 API сервиса: [Google Drive API] (для файлов), [Google Calendar API] (календари и события), [Google People API] (контакты), [Google Photos Library API] (для фото).
Можно искать в поиске, либо перейти по ссылкам выше и нажать [Enable]. Теперь всё готово для создания собственно Credentials.

2.4. Создание OAuth-клиента (финал)
После включения API, переходим в [APIs & Services] → [Credentials]. Нажимаем кнопку [Create Credentials] вверху страницы и выбираем [OAuth client ID]. Если система запросит настройку экрана согласия, выберите [Web application]. Далее нажимаем [Create client].

Заполняем необходимые поля для создания Create OAuth client ID.

Authorized redirect URIs — это тот самый URI, который скопировали из вашего Nextcloud в первом шаге:
https://ВАШ_ДОМЕН/nextcloud/index.php/apps/integration_google/oauth-redirect

После создания появится окно с [Client ID] и [Client secret]. Скопируйте и сохраните их — они понадобятся в следующем шаге для настройки Nextcloud.

3. Подключаем аккаунт Google в Nextcloud
3.1. Вводим ключи доступа
В аккаунте Nextcloud переходим в [Параметры сервера] → [Подключенные учетные записи].


Далее копируем значения [Client ID] и [Client secret] в поля [ID Клиента] и [Клиентский ключ] и сохраняем настройки.

3.2. Авторизация в Google
После переходим в пункт [Перенос данных]. На данной странице нажимаем [Войти через Google].

Выбираем наш аккаунт → [Дополнительные настройки] → [Перейти на страницу «ваш_домен» (небезопасно)] → [Повторный вход] → [Продолжить] → [Продолжить]. Система будет предупреждать, что это небезопасно, но мы пропускаем эти предупреждения.


После входа в аккаунт переходим в пункт [Перенос данных]. На этой странице выберите, что переносить — файлы, контакты, фото, календарь и запустите процесс.
Готово! Аккаунт Google подключён, и должно начаться копирование данных. Перенос осуществляется во вкладке [Параметры сервера] → [Перенос данных].

4. Два нюанса, без которых ничего не заработает
Но копирование не началось, хоть и всё было подключено правильно. Процессор зависал на 0%, а в логах сервера обнаружились записи от ModSecurity с кодом ответа 403.
Оказалось, что надо ещё немного «довести» окружение. Вот два момента, которые обязательно нужно проверить.
№1. Проблема с ModSecurity
ModSecurity — это межсетевой экран для веб-приложений (WAF). Он и блокирует длинные запросы от API Google.
Поэтому временно отключим ModSecurity для нашего домена с Nextcloud.
Это делается в панели управления хостингом (в нашем случае — Plesk). Заходим в [Брендмауэр для веб-приложений] → [Выкл.] → [Ок].


Мы отключаем ModSecurity именно для конкретного домена, а не для всего сервера. После завершения переноса данных обязательно надо включить его обратно, чтобы не остаться без защиты.
№2. Проблема с Cron
Nextcloud для выполнения фоновых задач (а перенос именно такая) полагается на планировщик задач (Cron). Если его не настроить, перенос не начнется.
Чтобы настроить Cron, находим [Планировщик задач] в Plesk, нажимаем [Добавить задачу] и заполняем поля, как на скриншоте и в таблице.




Теперь задача каждые 5 минут вызывает штатный скрипт Nextcloud, который проверяет очередь фоновых задач и выполняет их. После её активации перенос данных наконец-то запустился.
Итоги
По факту сложного ничего не было. Просто надо было разобраться, что где добавляется. Основная работа заключалась в том, что в приложении подробной инструкции нет и пришлось собирать разрозненную информацию в интернете.
Этот кейс может показаться сырым и не очень оптимальным. Если есть мнения, как можно доработать процесс — пишите в комментариях.
EV1212
В результате переноса, что произошло с файлами . gdoc, .gsheet и прочими файлами google?