Как многим известно Heroku с 28.11.2022 прекращает поддержку бесплатных аккаунтов. И у меня, как и у других пользователей бесплатного аккаунта, возник вопрос: «Куда же теперь переезжать?» Я нашёл два подходящих сервиса, которые, на мой взгляд, могли бы заменить Heroku. Так как я не увидел статей на Habr на тему, куда можно мигрировать с Heroku, то решил написать небольшую инструкцию по переезду. Надеюсь кому-то она будет полезной.
Поиски сервиса я осуществлял исходя из требований, которые предполагают возможность:
деплоить из ветки на GitHub;
подключить базу данных как сервис;
бесплатного доступа к необходимому мне функционалу.
Я осознавал, что последний пункт будет накладывать ограничения на ресурсы хостинга. Я был готов с этим мириться, так как искал хостинг для своих личных небольших проектов, которые не требовали доступности сервиса 24/7.
Как я написал ранее, я нашёл два варианта для переезда — Railway и Render. Ниже краткая инструкция, как начать с ними работать.
Railway
На бесплатном тарифе хостинг обещает до 500 часов онлайна и возможность подключить дополнительные сервисы в качестве Базы данных.
Шаг первый. Создание аккаунта.
![Рисунок 1. Страница входа Railway Рисунок 1. Страница входа Railway](https://habrastorage.org/getpro/habr/upload_files/27a/d6d/616/27ad6d61689a1e2989770bca6ff9e451.png)
Создать аккаунт довольно легко. Заходим под своей учётной записью GitHub либо указываем свою электронную почту, после чего требуется прочитать письмо и перейти по ссылке из него.
После того как зашли, нам даётся 2$ и 200 часов. Чтобы их увеличить, необходимо пройти процедуру верификации. Заходим в раздел billing details и нажимаем verify my account. Верифицировать можно двумя способами: добавлением карты или подключением аккаунта GitHub. Я выбрал второй вариант, после чего у меня на счету стало 5$ и 500 часов.
Шаг второй. Создания проекта.
На основном дашборде нажимаем New Project.
![Рисунок 2. Создание проекта Railway Рисунок 2. Создание проекта Railway](https://habrastorage.org/getpro/habr/upload_files/d0b/aea/dcb/d0baeadcbd999fc016f0db298f735728.png)
Первым делом я создал базу данных PostgreSQL, чтобы позже во время настройки основного приложения у меня уже были данные для подключения к ней. Информацию по подключению можно найти на вкладках connect (Рисунок 5) или variables (Рисунок 6) только что созданного сервиса.
Процесс запуска PostgreSQL выглядит примерно так:
![Рисунок 3. Выбираем сервис для проекта. Рисунок 3. Выбираем сервис для проекта.](https://habrastorage.org/getpro/habr/upload_files/953/537/40c/95353740cd8c3a3a477fd640444e16e3.png)
![Рисунок 4. Дашборд после создания сервиса Рисунок 4. Дашборд после создания сервиса](https://habrastorage.org/getpro/habr/upload_files/b54/22d/044/b5422d044281e921434d2dab297c6cb9.png)
![Рисунок 5. Вкладка Connect сервиса PostgreSQL Рисунок 5. Вкладка Connect сервиса PostgreSQL](https://habrastorage.org/getpro/habr/upload_files/337/4c0/c4f/3374c0c4fbb26af68b096c76e5f90237.png)
![Рисунок 6. Вкладка Variables сервиса PostgreSQL Рисунок 6. Вкладка Variables сервиса PostgreSQL](https://habrastorage.org/getpro/habr/upload_files/06f/cfa/cfa/06fcfacfa0446f8b56d939b4c135dace.png)
К сожалению, я не нашёл в сервисе возможность импорта данных из дампа. Можно, конечно, заполнить query, но я не уверен, что этот сервис выдержит большие объёмы данных. Я подключился к БД с помощью DBeaver и загрузил данные.
Шаг третий. Соединение с GitHub и деплой.
Чтобы проверить точно ли подходит мне этот сервис, я взял рандомное приложение с GitHub и сделал форк. В настройках github я ограничил видимость только одним репозиторием.
![Рисунок 7. Подключение репозитория GitHub Рисунок 7. Подключение репозитория GitHub](https://habrastorage.org/getpro/habr/upload_files/fcd/bd8/06a/fcdbd806ab5861e28582301a78884073.png)
После добавления репозитория сразу автоматически происходит деплой из мастера.
![Рисунок 8. Результат деплоя. Рисунок 8. Результат деплоя.](https://habrastorage.org/getpro/habr/upload_files/346/006/96e/34600696e4f5d86eb8ef0395f6148ac4.png)
В разделе Variables можно добавить переменные окружения, например, данные для подключения к базе данных. В разделе Settings есть возможность сменить ветку, с которой будет разворачиваться приложение. Но самое главное, можно подключить свой домен или воспользоваться доменом сервиса для того, чтобы наше приложение было доступно из сети интернет.
![Рисунок 9. Вкладка Settings Рисунок 9. Вкладка Settings](https://habrastorage.org/getpro/habr/upload_files/922/ce0/e78/922ce0e78ca62398a555bdbbebbd596e.png)
После нажатия на Generate Domain получаем ссылку, по которой можно проверить доступность приложения. Ссылка выглядит так https://hello-world-docker-flask-production.up.railway.app/. После перехода я убедился, что приложение доступно.
![Рисунок 10. Hello world! Рисунок 10. Hello world!](https://habrastorage.org/getpro/habr/upload_files/d93/72e/f91/d9372ef91d7da75a8dc920c044d644fb.png)
На этом основные настройки завершены. Далее вы уже сами вольны настроить приложение как вам угодно.
Render
У этого сервиса условия кажутся чуть лучше — до 750 часов онлайна в месяц. Дополнительные сервисы в качестве базы данных тоже есть в комплекте. Проверим его работу.
Шаг первый. Создание аккаунта.
Вариантов авторизации у Render больше. Я снова выбрал вход через GitHub.
![Рисунок 11. Вход Render Рисунок 11. Вход Render](https://habrastorage.org/getpro/habr/upload_files/56f/517/37b/56f51737b37f53d263a40a2a52bb9d7f.png)
После входа необходимо подтвердить почту.
Шаг второй. Создания проекта.
На главном экране больше предложений для старта проекта.
![Рисунок 12. Главный экран после первого входа Рисунок 12. Главный экран после первого входа](https://habrastorage.org/getpro/habr/upload_files/0e1/fd6/835/0e1fd68354b3f4d08b0aa67ce98eb857.png)
Так же как и в прошлый раз, сначала создадим базу данных. Выбираем на главной экране PostgreSQL. После создания БД данные для подключения можно найти в двух местах: справа вверху в дропдаун кнопке Connect (Рисунок 13) или на этой же странице Info в разделе Connections (Рисунок 14).
![Рисунок 13. Клик по кнопке Connect показывает данные для подключения Рисунок 13. Клик по кнопке Connect показывает данные для подключения](https://habrastorage.org/getpro/habr/upload_files/092/658/e0b/092658e0b320c007e4182c7a432461aa.png)
![Рисунок 14. Смотрим данные для подключения в разделе Connections Рисунок 14. Смотрим данные для подключения в разделе Connections](https://habrastorage.org/getpro/habr/upload_files/dae/760/58f/dae76058fe7ac580c8c1418d5de57bcb.png)
Как и у Railway я не нашёл возможности импорта данных. Импортируем данные тем же способом, что был описан ранее.
Шаг третий. Соединение с GitHub и деплой.
Осталось дело за малым — развернуть приложение. С помощью кнопки «New +», расположенной в правом верхнем углу экрана, выбираем Web Service.
![Рисунок 15. Запускаем Web Service Рисунок 15. Запускаем Web Service](https://habrastorage.org/getpro/habr/upload_files/b15/6e6/aba/b156e6abad6a790ea6c90fa85c276f1b.png)
Render предлагает больше вариантов для выбора места откуда выполнить установку кода, чем в Railway. Можно использовать не только GitHub, но и GitLab. Плюс можно задеплоить публичный репозиторий. Я не стал тестировать другие варианты, а просто сделал аналогично предыдущему сервису. Подключил GitHub и один репозиторий. На следующем экране сразу доступны все требующиеся настройки.
![Рисунок 16. Настройки перед установкой приложения Рисунок 16. Настройки перед установкой приложения](https://habrastorage.org/getpro/habr/upload_files/a5b/237/2e0/a5b2372e0d5ec3edcc8e61ffc0598917.png)
Более того, если нажать на кнопку Advanced, мы можем добавить переменные окружения.
![Рисунок 17. Расширенные настройки перед установкой Рисунок 17. Расширенные настройки перед установкой](https://habrastorage.org/getpro/habr/upload_files/c59/647/cd4/c59647cd4cd1eaf3347ca5ee81a03c03.png)
После нажатия на Create, происходит деплой нашего сервиса. Слева под названием сервиса у нас появляется ссылка, по которой он будет доступен после окончания деплоя.
![Рисунок 18. Ссылка на приложение. Рисунок 18. Ссылка на приложение.](https://habrastorage.org/getpro/habr/upload_files/382/902/ac9/382902ac98271799dd7bdc76a1c0d5b1.png)
Проверяем:
![Рисунок 19. Проверка приложения. Рисунок 19. Проверка приложения.](https://habrastorage.org/getpro/habr/upload_files/2fb/5d5/e0f/2fb5d5e0fc8ee9c757eeeea149e5b675.png)
Вместо заключения
Я попробовал два хостинга. Render мне показался более удобным и функциональным, чем Railway. Кроме этого он даёт больше бесплатных часов пользования. У Railway более быстрый старт. На мой взгляд, оба хостинга являются достойной заменой Heroku, и любой из них можно смело использовать в своих небольших проектах.
UPD.: В комментариях подсказали, что PostgreSQL у Render бесплатно даётся только на 90 дней. Проверил действительно есть такая информация. Кроме этого за день до выхода моей статьи был пост с перечислением сервисов, которые можно попробовать.