Как задеплоить приложение на heroku
React это одна из самых популярный JavaScript библиотек для создания интерфейсов. С помощью React можно очень быстро написать несложное веб-приложение или создать рабочий прототип. Но встает вопрос, как показать свое творение миру.
Привычным ответом будет — залить на хостинг. Но для этого приложение нужно сначала собрать, а затем скопировать получившиеся файлы на хостинг. И при каждом изменении приложения всю процедуру надо будет повторять еще раз. И тут на помощь приходит Heroku — облачный инструмент для сборки и развертывания приложения за пару консольных команд.
Наша задача в это й статье создать простейшее приложение на React и получить его рабочую версию в сети. Давайте же посмотрим, как это можно сделать.
Сначала создадим простое React приложение. Предполагаем, что Node у вас уже установлена, тогда легче всего это сделать с помощью утилиты create-react-app. Чтобы ее запустить, воспользуемся менеджером пакетов npx, поставляемом вместе с npm версии >= 5.2.
npx в отличие от npm самостоятельно ищет последнюю версию пакета, устанавливает ее и запускает. Таким образом следующая команда запустит create-react-app. Под капотом create-react-app использует Babel и Webpack для сборки и транспиляции, но для разработчика это остается незаметным.
После того, как create-react-app отработала, заходим в папку только что созданного проекта и стартуем приложение.
Приложение запустится в браузере на localhost:3000.
Деплой на обычный хостинг
Рассмотрим отличия процесса деплоя на обычный хостинг и на Heroku.
В случае с обычным хостингом сначала необходимо собрать приложение. Благодаря react-create-app все инструменты для этого в нашем проекте уже настроены. Запускаем команду:
После завершения работы команды в корне проекта появится папка build со всеми файлами, которые необходимо разместить на хостинге.
Деплой на Heroku
Для деплоя на Heroku необходимо будет внести в проект некоторые изменения.
Во-первых, добавить модуль сервера:
Затем изменить scripts в package.json
После создания вы сразу попадаете на страничку с инструкцией о том, как перенести ваш проект во внутренний репозиторий Heroku. Продублирую ее здесь:
Скачиваем Heroku CLI. Убедитесь, что у вас установлен Git, так как он нам сейчас понадобится. Заходим в папку с приложением на нашем компьютере и выполняем команды:
Далее заливаем последние изменения в удаленный репозиторий:
После выполнения этих команд, Heroku начинает автоматически скачивать зависимости и собирать приложение, затем располагает его на облачных серверах. Далее можно открыть рабочее приложение в браузере набрав команду:
Теперь любые изменения легко добавляются в проект, достаточно лишь запушить изменения в репозиторий, heroku сам пересобирет приложение.
Во время работы над небольшим домашним проектом на Symfony2 у меня возникла потребность задеплоить его на стейджинг для тестирования API извне. Понятно, что для этого нужно иметь хостинг для сайта, т.е. либо уже располагать им, либо купить. Еще есть альтернатива в виде облачных сервисов, на которых можно разместить сайт бесплатно, но с ограниченными ресурсами. Подобных сервисов сейчас есть множество, и они конкурируют между собой. Я почему-то склонился к Heroku Cloud, я о нем слышал уже давно, и тут в нужный момент он всплыл в моей памяти. На другие я пока не смотрел, просто решил в этот раз разобраться именно с Heroku. Благо, здесь таки оказалась опция бесплатного размещения сайта, и я начал искать всю необходимую информацию о том, что из мебч представляет работа Symfony2 на Хероку.
Вот кое что из того, что я нашел и что мне помогло:
Много чего из этих статей будет повторятся и в моей, но некоторые моменты там либо упущены, либо раскрыты не полностью, потому я и решил заполнить этот пробел.
Подготовка
Для начал нужно завести себе аккаунт на Heroku и скачать Heroku Toolbelt под свою платформу. С помощью него можно будет управлять своими удаленным проектами через консоль. Например, чтоб установить Heroku под Debian/Ubuntu, нужно всего лишь выполнить эту команду:
Теперь нужно залогиниться через консоль, выполнив heroku login . Вводим тот e-mail и пароль, с которым регистрировались на сайте.
Запустим из консоли команду heroku help , чтоб посмотреть список доступных команд Heroku для консоли. Список неполный, так как в нем не показываются алиасы. Например, команда heroku create является алиасом для heroku apps:create .
Создание Heroku приложения
Создавать новое приложение на Heroku можно двумя способами:
- из консоли на вашем рабочем компьютере;
- через веб интерфейс Heroku Dashboard.
Создание приложения из консоли
Heroku разворачивает PHP-проекты только с помощью композера, т.е. в вашем проекте должен быть валидный composer.json и к нему же composer.lock. Если просто выполнить heroku create без каких либо параметров, то в вашем облаке создастся первое приложение. Пока что оно ничего не делает, это просто заглушка, которую еще нужно конфигурировать. Название у него будет случайное, например pure-savannah-3520 . После создания имя приложения можно поменять (если новое имя еще никем не занято) вот таким образом: heroku rename your-nice-name --app pure-savannah-3520 . Команда heroku rename — это, опять же, алиас к heroku apps:rename . А вообще правильнее указывать имя при создании приложения heroku create my-blog , но оно должно быть свободно. Команду heroku create можно выполнять в любой директории, она просто создает в вашем аккаунте в облаке новое приложение. Но толку от этого будет мало. Мы ведь хотим задеплоить наш проект, поэтому эту команду стоит выполнять в папке проекта, в которой инициализирован Git. Помимо создания проекта heroku create проверяет, инициализирован ли Git в текущей директории, и, если да, то добавляет к нему еще свой удаленный репозиторий.
Создание приложения через личный кабинет
Проект создался, можно продолжать его конфигурировать через веб-интерфейс.
Конфигурация процессов
В корневой директории проекта нужно создать файл с названием Procfile , а в него записать следующее:
Можно также попробовать развернуть проект на HHVM:
В этот файл также можно будет добавлять другие воркеры, например, воркер для кроновских задач.
Подготовка окружения для Symfony
Важно знать, что Heroku во время деплоя проекта на PHP запускает composer с такими параметрами:
Это означает, что все, что вы подключили в require-dev вашего composer.json файла, не будет установлено.
По умолчанию все консольные команды запускаются в dev окружении. Нам нужно перевести Symfony в prod режим на этапе выполнения скриптов композера, так как там выполняются некоторые необходимые для старта команды (дампятся ассеты, очищается кеш). Это можно сделать с помощью переменной окружения SYMFONY_ENV . Если она установлена, то ее значение будет указывать на окружение, которое необходимо для Symfony. Делается это так:
Команду нужно запустить только один раз перед первым деплоем.
И теперь деплой
Деплой на Heroku осуществляется путем отправки коммитов на удаленный репозиторий.
Просмотр логов
Для того, чтобы смотреть логи через консоль Heroku, нужно немного изменить конфиг продакшен окружения для Symfony. В файле app/config/config_prod.yml нужно заменить path: "%kernel.logs_dir%/%kernel.environment%.log" на path: "php://stderr" .
Теперь логи можно просмотреть так:
Или следить за логами в режиме онлайн:
Запуск консольных команд Symfony
Чтоб получить доступ к bash вашего облака, нужно выполнить команду heroku run bash .
После чего можно запускать доступные команды из вашего Symfony-приложения:
Для команд не нужно указывать окружение через опцию --env=prod , так как продакшен окружение для Symfony мы уже настроили через переменную окружения.
Также можно запустить PHP интерпретатор из консольной команды:
Для выхода не забудьте написать exit .
Управление параметрами конфигурации
Когда мы выполняем composer update на локальной машине и в файле parameters.yml.dist появились новые параметры, которые у нас еще не установлены, то консоль Symfony в интерактивном режиме попросит эти параметры добавить. На Heroku такой возможности нет, так как composer запускается с опцией --no-interaction . Поэтому нам нужно эти параметры как-то передать. Самый удобный способ, который предлагает и Symfony, и Heroku — это записать их в переменные окружения, а в PHP их оттуда считать. Можно записать их с помощью команды:
Проверить, что мы установили, можно так:
Также добавлять, изменять и удалять параметры окружения можно и через веб-интерфейс.
А еще можно это сделать красиво в composer.json с помощью скрипта для композера Incenteev/ParameterHandler. Он прописан в composer.json Symfony из коробки, нам ничего не нужно делать, кроме как использовать его фичу по маппингу переменных окружения в параметры приложения.
Находим секцию extra в файле composer.json и доводим ее до такого вида.
Теперь нам нужно установить параметры окружения. В даном случае нам нужно указать параметры доступа к базе данных.
Подключение базы данных к проекту
MySQL устанавливается через аддон ClearDB MySQL Database:
Во время подключения аддона к нашему проекту его параметры подключения записываются также в переменные среды:
Если распарсить урл, то получим и хост, и название базы, и юзера, и пароль. Чтобы это все автоматически считывалось и записывалось в наши параметры приложения на этапе деплоя нужно написать скрипт для композера и повесить его на событие pre-install-cmd . Для этого где-то в проекте, например в неймспейсе AppBundle\Composer создаем такой вот класс:
Теперь подключаем этот скрипт в composer.json:
Теперь во время нашего первого деплоя composer установит параметры подключения к базе сам.
Бесплатная версия PostgreSQL рассчитана на 10 000 записей в базе данных. Бесплатная ClearDB ограничена 5 мегабайтами.
Дополнительные настройки через composer.json
В файле composer.json в секции extra для Heroku можно передать дополнительные настройки среды. Например:
Скрипт php app/check.php покажет вам, что у вас осталось не настроенного для полноценной работы Symfony. Параметры для PHP указываются в секции php-config . Также для Symfony требуется, чтобы были включены некоторые модули PHP. Для того, чтобы Heroku включил их в момент создания web-воркера, нужно перечислить их в require секции composer.json.
Нотификации об успешном деплое
Есть аддон Deploy Hooks, с помощью которого одной консольной командой можно настроить отсылку уведомлений после успешного деплоя:
Связка с GitHub
Если ваш удаленный репозиторий размещен на GitHub, тогда в личном кабинете можно его подключить к автоматическим деплоям при каждом комите в мастер (либо в другую ветку).
В этом случае вам нужно будет пушить только в GitHub, а Heroku уже сам будет подхватывать и обновлять продакшен.
Файл app.json и деплой на symfony 2 с помощью хероку open source проектов в один клик
Еще одна няшная фича от Heroku. Если вы, например, разрабатываете опенсоурс продукт, который лежит в вашем публичном репозитории на гитхабе, и хотите предоставить пользователям возможность посмотреть приложение в действии без необходимости его скачивать и разворачивать локально, вы можете добавить все необходимые конфиги по деплою в ваш репозиторий, добавить стандартную кнопку от Heroku, и можно деплоить в один клик.
Файл конфигурации для Heroku называется app.json , он должен лежать в корневой папке проекта. Детально о всех конфигах написано тут. Вот пример файла:
Можно устанавливать переменные окружения прямо из конфига. Переводим Symfony в prod режим:
Если нужно выполнить несколько команд после деплоя:
Вас перенаправит в ваш dashboard на страницу создания нового приложения. В URL указан параметр template , в котором указан путь к файлу app.json, с которого стянуты настройки приложения. В дашборде это выглядит так:
Все, что указано в app.json, отобразится на этой странице: имя, описание, лого. Как видим, тут сразу же подключается аддон для PostgreSQL, и это благодаря одной опции:
После клика на «Deploy for Free» начнется процесс деплоя. Пара секунд, и вы открываете рабочий сайт. При условии, что в мастере лежит рабочий код :). Вот еще дополнительная информация по конфигурированию деплоя в один клик.
Аддоны для популярных задач
Если вам нужно добавить задачи для крона, для этого есть аддон Heroku Scheduler. Работа с ним детально описана в документации.
Платформа Heroku сама не предоставляет возможности отсылать имейлы. Для этого нужен внешний SMTP-сервер. Но в списке аддонов в категории Email/SMS можно найти уже интегрированные сервисы.
Заключение
Это тот минимум, который вам необходим для старта работы с Heroku. Инструменты, которые вам могут понадобиться и о которых тут не было сказано, можно попробовать поискать в списке аддонов. Самые популярные тулзы должны там быть. Заслуживает ли Heroku быть полноценным продакшен сервером? Пока сложно сказать, еще мало опыта работы с ним. Но как стейджинг с быстрым процессом развертывания — вполне сойдет. Так же он подойдет для опенсоурс проектов, которые можно развернуть в один клик.
Из этой статьи вы узнаете, как задеплоить проект Laravel на Heroku — облачной платформе для развёртывания, управления и масштабирования проектов.
Что понадобится для работы
- Знания PHP и Laravel
- Аккаунт на Heroku
- Heroku CLI (можно загрузить здесь)
- Git (инструкция по установке здесь)
Предполагается, что у вас есть приложение на Laravel, которое работает на локальном сервере и готово к развёртыванию.
Шаг 1: инициализируйте Git
Инициализируйте git-репозиторий в текущей рабочей директории. Используйте такую команду:
Внимание: если вы не умеете работать с Git, пройдите бесплатный курс по системам контроля версий.
Шаг 2: создайте Procfile
В рабочей директории создайте Procfile без расширения и добавьте в него такую строку:
Также Procfile можно создать и обновлять через терминал. Для этого понадобится следующая команда:
Шаг 3: создайте новое приложение на Heroku
Это можно сделать с помощью команды:
В этом случае для вашего проекта устанавливается рандомное название. Чтобы его изменить, используйте следующую команду:
Вместо newAppName укажите желаемое название проекта.
Шаг 4: подключите Node.js
Node.js понадобится для работы с командами npm install, npm production и так далее. Добавьте в проект пакет heroku/nodejs с помощью команды:
После этого все зависимости, указанные в package.json, будут установлены при развёртывании проекта, а devDependencies будут проигнорированы.
Чтобы устанавливать все зависимости, включая dev, используйте такую команду:
Затем добавьте postinstall в package.json:
Шаг 5: настройте ключ шифрования Laravel
Чтобы настроить ключ шифрования, скопируйте значение APP_KEY из файла .env и выполните указанную ниже команду:
А с помощью предложенной далее команды можно сгенерировать и установить новый ключ шифрования.
Шаг 6: отправьте приложение на Heroku
Запушить приложение на Heroku можно с помощью такой команды:
Шаг 7: убедитесь, что приложение использует правильные пакеты сборки
Для этого используйте предложенную команду:
Если в списке пакетов есть heroku/php и heroku/nodejs, всё в порядке. Если какого-то из пакетов нет, запустите такую команду:
Вместо [‘missing build’] укажите название пакета, который нужно добавить.
Шаг 8: проверьте доступность приложения
Для этого введите в адресную строку браузера соответствующий URL.
Чтобы установить переменные окружения, воспользуйтесь командой:
Также можно использовать панель инструментов. На вкладке Settings выберите Reveal config vars. Здесь можно просмотреть и настроить переменные окружения.
Heroku позволяет бесплатно использовать PostgreSQL. Для этого понадобится такая команда:
На панели инструментов в настройках укажите для DB_CONNECTION значение pgsql. Выберите Reveal config vars, чтобы проверить переменные окружения.
Чтобы получить учётные данные БД приложения, выберите аддон Heroku Postgres Hobby Dev на вкладке Overview панели инструментов. После этого откроется новая вкладка в браузере. Учётные данные БД можно найти на вкладке «Настройки».
Обратите внимание, чтобы использовать команды artisan или npm на Heroku, перед всеми командами запускайте heroku run. Например, heroku run php artisan storage:link или heroku run npm install.
Адаптированный перевод статьи How to deploy a Laravel/Vue App to Heroku by Chinedu Ogama. Мнение администрации Хекслета может не совпадать с мнением автора оригинальной публикации.
Сегодня мы поговорим о том, как выложить Java приложение на бесплатный хостинг и этим самим показать свое творение другим людям.
Я долго искал бесплатных хост-провайдеров с поддержкой Java, но не находил ничего, что могло бы подойти для моих требований: выложить приложение на Java как обычный сайт.
Сейчас в мире есть множество клауд платформ, которые можно использовать в качестве площадки для сайта на Java, но удовольствие это зачастую не из дешевых. Но, все же мне удалось найти клауд провайдера у которого есть бесплатный, естественно ограниченный тарифный план для приложений на джава.
Именно на Heroku мы и попробуем выложить приложение на java. Для этих целей можно использовать приложение, которое мы писали в цикле статей: Простое приложение на java.
Далее нужно в личном кабинете создать новое приложение: New -> Create new app
После этого у Вас должно появиться окно для выбора названия приложения и региональности:
Теперь, если Ваше приложение использует базу данных ее нужно создать в хероку. Бесплатно клауд-провайдер поддерживает Postgres базу данных. Где-то была статья в Интернете, что можно бесплатно использовать любую базу данных, но автор не показал как, а мои попытки использовать другие базы не увенчались успехом. Поэтому, будем использовать Postgres.
Прежде всего, создадим базу на хероку. Для этого нужно нажать на вкладку Resources созданного приложения и нажать на кнопку Find more add ons:
Далее откроется окно где будет множество приложений. Вам нужно будет найти Postgres. При нажатии на Heroku postgres откроется окно где будет кнопка install heroku postgres. Нажимаем ее, выбираем приложение, к которому мы хотим добавить базу данных и жмем ОК. База данных создана. Для того чтобы посмотреть пользователя, пароль и имя базы данных нужно нажать на созданную базу данных, выбрать вкладку Settings и нажать кнопку show database credentials.
Для этого переходим в наше приложение и ищем где мы подключаемся к базе.
Просто замените пользователя, пароль и урл к базе на те, который Вам создал клауд.
Для того, чтобы подключиться к удаленной базе с локальной машины добавьте еще один параметр к урл: sslmode=require как показано на рисунке выше.
<dependency ><groupId > org.postgresql </groupId >
<artifactId > postgresql </artifactId >
<version > 9.4.1208 </version >
</dependency >
Далее нужно добавить плагин для хероку, который позволит без проблем запустить приложение.
<plugin ><groupId > org.apache.maven.plugins </groupId >
<artifactId > maven-dependency-plugin </artifactId >
<version > 2.3 </version >
<executions >
<execution >
<phase > package </phase >
<goals >
<goal > copy </goal >
</goals >
<configuration >
<artifactItems >
<artifactItem >
<groupId > com.github.jsimone </groupId >
<artifactId > webapp-runner </artifactId >
<version > 8.0.30.2 </version >
<destFileName > webapp-runner.jar </destFileName >
</artifactItem >
</artifactItems >
</configuration >
</execution >
</executions >
</plugin >
С pom.xml готово. Осталось добавить еще один файл настроек к нашему приложению: Procfile. Для этого в корне приложения добавьте файл с именем Procfile. В него положите следующее содержимое:
web : java $JAVA_OPTS - jar target / dependency / webapp - runner . jar -- port $PORT target /*.warСейчас я не буду расписывать, как выложить приложение на гитхаб. Вот видео с подробными инструкциями:
Вот и все. На первый взгляд может показаться не очень просто, но это того стоит. Вы сможете показать людям результаты Ваших трудов не в виде кода на гитхаб, а в виде приложения, просмотр которого вызывает больше удовольствия чем читать код.
Это не единственный способ отправки java приложения на бесплатный хостинг. Тем более есть и другие клауд-провайдеры. Amazon например предоставляет пользование своими сервисами бесплатно один год. Можно попробовать использовать Amazon. Я в свое время открыл для себя Heroku и пользуюсь им до сих пор.
Как всегда, перед статьей я записал видео с подробными инструкциями по отправке Java приложения на бесплатный хостинг Heroku.
Если у Вас что-то не работает или не получается, у Heroku есть очень обширная документация. Она поможет при возникновении ошибок.
Читайте также:
- Как увеличить шрифт в сбербанк онлайн на телефоне
- Как вывести деньги с банкира телеграм
- В какое время в приложении клевер можно попробовать выиграть стикеры
- Как подобрать аккорды к песне на гитаре приложение
- Какую сумму можно перевести без комиссии в сбербанке с карты на карту через приложение сбербанк