Руководство по миграции: Heroku на Render

Это руководство поможет вам перенести приложение Heroku, базу данных Heroku Postgres и экземпляр Heroku Redis на Render. Использование Render для запуска веб-сервисов и баз данных очень похоже на их запуск на Heroku. Кроме того, многие пользователи обнаружили, что Render экономит их деньги и предоставляет дополнительную функциональность, недоступную на Heroku. Подробнее о различиях между Render и Heroku.

Это руководство и соответствующий плагин Heroku CLI охватывают большинство случаев использования миграции. Оно поддерживает миграцию приложения Heroku и его дополнений Heroku Postgres и Heroku Redis. Вы можете продолжать использовать другие дополнения Heroku, пока ваше приложение работает на Render, скопировав соответствующие переменные окружения — например, если вы используете дополнение Sengrid от Heroku, установите SENDGRID_USERNAME и SENDGRID_PASSWORD в Render Dashboard. Пожалуйста, свяжитесь с нами по адресу support@render.com, если у вас возникнут какие-либо проблемы при миграции с Heroku на Render.

Требования

  • Приложение Heroku использует один из официальных билдпаков Heroku1
  • Приложение Heroku не использует несколько билдпаков2

Шаги миграции

  1. Сгенерируйте Dockerfile.render и render.yaml с помощью Render’s Heroku CLI Plugin
  2. Создайте ресурсы на Render
  3. Настройка переменных окружения
  4. Копирование данных из PostgreSQL
  5. Обновление конфигурации DNS

Сопоставление концепций

Перед началом миграции просмотрите следующую таблицу, чтобы понять, как некоторые концепции Heroku соотносятся с концепциями Render.

Heroku Render
Веб-процесс (внутри приложения Heroku) Веб-сервис
Рабочий процесс (в приложении Heroku) Фоновый рабочий процесс
Dyno Экземпляр вашего сервиса на Render
Heroku Postgres Render PostgreSQL
Heroku Redis Render Redis
Планировщик Heroku Cron Job
Конфигурационные переменные Переменные окружения

Шаг 1: Создайте Dockerfile.render и render.yaml.

Установите плагин Render’s Heroku CLI Plugin

Render создал плагин для Heroku CLI, чтобы сократить некоторые шаги ручной миграции. Установите плагин с помощью следующей команды.

Плагин CLI не будет модифицировать ваше приложение Heroku. Он выполняет только операции чтения.

heroku plugins:install @renderinc/heroku-import
Вход в полноэкранный режим Выйти из полноэкранного режима

Запуск плагина CLI

Плагин CLI прочитает информацию о вашем приложении и его дополнениях и создаст два файла: Dockerfile.render и render.yaml. Вот как выглядит этот процесс. Запустите его из корня репозитория, содержащего код вашего приложения.

Затем вам будет предложено выбрать дополнения Heroku Postgres и Heroku Redis, которые вы хотите перенести в Render. После выбора для вас будут созданы Dockerfile.render и render.yaml, и будут показаны инструкции.

Исключенные переменные окружения

  • DATABASE_URL
  • HEROKU_
  • KEY
  • PASSWORD
  • REDIS_URL
  • REDIS_TLS_URL
  • SECRET
  • TOKEN

Добавьте Dockerfile.render и render.yaml в Source Control

Теперь плагин CLI создал два файла: Dockerfile.render и render.yaml. Dockerfile.render определяет, как собрать ваше приложение на Render, используя билдпак Heroku. render.yaml — это файл Render’s Infrastructure-as-Code. Он может использоваться для определения нескольких сервисов и баз данных, работающих на Render, и их взаимосвязи друг с другом.

Теперь добавьте эти два файла в систему управления исходными текстами с помощью следующих команд.

git add Dockerfile.render render.yaml
git commit -m 'Prepare app for deploy to Render'
git push origin
Войти в полноэкранный режим Выйти из полноэкранного режима

Шаг 2: Создание ресурсов на Render

На панели инструментов Render выберите New + и затем Blueprint. Если вы еще не подключили свой аккаунт GitHub или GitLab к Render, найдите и выберите свой репозиторий.

Render создаст план создания и развертывания вашей службы вместе с базой данных Render PostgreSQL и службой Render Redis, если ваше приложение Heroku использовало их и вы выбрали их для импорта в шаге Run CLI Plugin выше.

Просмотрите план и нажмите Применить, после чего Render создаст ваши ресурсы.

Если все ресурсы были созданы успешно, перейдите к следующему шагу. Если возникла ошибка, которую вы не можете устранить, пожалуйста, свяжитесь с нами по адресу support@render.com. Мы всегда готовы помочь!

Шаг 3: Настройка переменных окружения

Вам может понадобиться вручную создать переменные окружения, содержащие секреты, такие как пароли или API-токены, с помощью Render Dashboard. Плагин CLI исключил переменные окружения с именами, содержащими значения, указывающие на то, что они могут содержать секреты.

Чтобы создать или обновить переменные окружения с помощью Render Dashboard,

  1. Выберите Dashboard слева
  2. Выберите только что созданную службу из списка
  3. Выберите вкладку Environment и создайте или обновите переменные окружения (проверьте вывод плагина CLI, если вы хотите скопировать из ваших конфигурационных переменных Heroku).

Шаг 4: Копирование данных из PostgreSQL

PostgreSQL

Если вы создали базу данных Render PostgreSQL, вам может понадобиться скопировать данные из вашей базы данных Heroku Postgres в Render.

Переведите ваше приложение Heroku в режим обслуживания, чтобы во время копирования в базу данных не записывались новые данные. <HEROKU APP NAME> — это приложение Heroku, которому принадлежит дополнение Heroku Postgres.

Этот процесс миграции данных требует некоторого простоя.

heroku maintenance:on --app <HEROKU APP NAME>
Вход в полноэкранный режим Выйдите из полноэкранного режима

Создайте резервную копию данных в базе данных Heroku Postgres.

heroku pg:backups:capture --app <HEROKU APP NAME>
Вход в полноэкранный режим Выйдите из полноэкранного режима

Загрузите резервную копию. Будет загружен файл с именем latest.dump на ваш локальный компьютер.

heroku pg:backups:download --app <HEROKU APP NAME>
Войти в полноэкранный режим Выйти из полноэкранного режима

Импортируйте latest.dump в базу данных Render PostgreSQL. Значение для <EXTERNAL CONNECTION STRING> можно найти на странице Render Dashboard для вашей базы данных.

pg_restore --verbose  --no-acl --no-owner -d <EXTERNAL CONNECTION STRING> latest.dump
Вход в полноэкранный режим Выход из полноэкранного режима

Если размер вашей базы данных превышает 20 ГБ или она сильно загружена, воспользуйтесь инструкциями Heroku для создания резервной копии данных. После этого вы можете использовать ту же команду pg_restore, что и выше, для импорта данных в базу данных Render PostgreSQL.

Рассмотрите возможность использования флага --jobs, доступного для команд pg_dump и pg_restore, чтобы сократить время, необходимое для резервного копирования и восстановления.

Шаг 5: Обновление конфигурации DNS

Если ваше приложение Heroku использует пользовательский домен, следуйте инструкциям, чтобы обновить конфигурацию DNS и указать на Render вместо Heroku. Обратите внимание, что может потребоваться некоторое время простоя между моментом распространения изменений DNS и моментом, когда Render предоставит сертификат TLS для вашего домена.


  1. Если вы хотите перенести приложение Heroku на Render, которое не использует официальный билдпак Heroku, пожалуйста, свяжитесь с нами по адресу support@render.com для получения помощи. 

  2. Мы работаем над поддержкой миграции приложений Heroku, использующих несколько билдпаков.

Оцените статью
devanswers.ru
Добавить комментарий