Все мы хоть когда-нибудь писали приложения, облегчающие жизнь. Не на заказ, а просто для себя. Записные книжки, программки учета финансов, набор карточек для изучения иностранного языка — да мало ли в жизни хороших идей? И вот было бы здорово, иметь доступ к этой программке не только со своего компьютера, но и с рабочего! А то и поделиться с друзьями своей замечательной программкой!
Все отлично, если вы, скажем, PHP программист — дешевых и даже бесплатных хостингов море.
А что если вы программист Java? Готовые Tomcat хостинги недешевы, а если у вас еще и несколько таких программок, то желание поделиться ими с друзьями выльется в копеечку.
Что же делать?
Google нам поможет...
Для следующего рецепта нам понадобится:
- IntelliJ Idea — 1 шт (можно использовать и Eclipse, но на работе наша команда работает с Idea, и мне Idea как-то уже привычнее)
- Аккаунт в Google — скажем, ваша gmail почта
- Доступ к интернету — для скачивания Cloud Code плагина и загрузки вашего приложения на облако
- Имя, адрес, телефон, номер кредитной или дебетовой карточки. Но не волнуйтесь, ни копейки с этой карточки списано не будет
- Примерно 15 минут времени
Итак, поехали!
Запускаем Idea, выбираем Ctrl-Alt-S > Plugins. Ищем Cloud Code by Google Cloud
Устанавливаем, переоткрываем Idea
Если проект у вас новый, то просто при создании проекта выбираем поддержку Google App Engine Standard (почему стандард? Потому что есть еще flexible, но его бесплатного не бывает, и в целом он дороже).
Если же программка у вас уже написана, то идем в Tools > Cloud Code > App Engine > Add App Engine support > Google App Engine Standard.
Далее мы хотели бы протестировать приложение на нашем компьютере.
Для этого нужно скачать и установить Google Cloud SDK. Вообще-то Idea может сама управлять Google Cloud SDK — скачивать и устанавливать последнюю версию, прописывать все системные переменные, и т.д. Для этого в Settings > Other Settings > Cloud Code > Cloud SDK нужно выбрать «Allow the plugin to manage and install the Cloud SDK». Но мой выбор был скачать и установить вручную.
Затем нам нужно выбрать, что именно будет заливаться на облако (или отлаживаться локально). То есть создать артифакт. Идем Ctrl-Alt-Shift-S > Artifacts > + > Web Application Exploded и выбираем какие именно модули пойдут в наше приложение
Продолжаем с настройкой отладки на localhost.
Добавляем новую Run-Debug Configuration. Шаблон выбираем Google App Engine Standard Local Server. И единственную настройку, которую нужно поменять, это Artifact to deploy — выбрать артифакт, созданный на предыдущем шаге. Если выпадающий список пустой, то либо вы забыли создать артифакт для вашего приложения, либо его тип не Web Application Exploded, а какой-то другой. Еще можно поменять порт. Если у вас другие приложения крутятся на 8080, то cloud приложения можно отлаживать, скажем, на 8888.
Сохраняем, запускаем. Приложение появится в вашем браузере по ссылке localhost:8080 (или 8888). Если программа наткнется на breakpoint, то Idea сама активизируется и вылезет поверх всех остальных окон.
Кстати, breakpoint-ы можно ставить не только на ваших Java классах (сервлетах и прочей серверной части), но и на jsp страницах. Тогда отладка остановится каждый раз, когда браузер запрашивает эту страницу
Отлично! Локально все работает, пора заливать на сервер!
Заходим в наш Google аккаунт, и переходим на Google Cloud Console. Сверху окна появится предложение активировать триал и получить $300 для использования различных облачных сервисов. Эти $300 действительны ровно год, если за год вы их не израсходовали (а скорее всего, не израсходуете. Для примера, приложение с 60 постоянными активными пользователями, каждый из которых имеет отдельный namespace в DataStore с десятком таблиц в каждом — все это тратит примерно $4 в месяц). Так вот, если вы не используете эти $300, то через год они исчезнут.
При активации триала, Google попросит о вас все данные — имя, адрес, телефон и номер кредитной или дебетовой карточки. Причем в информационном окошке они заверяют, что ни копейки с карточки не снимут, если только вы сами вручную не подпишетесь на платный аккаунт. Объясняют это проверкой, что вы не робот. На самом деле это сделано, чтобы вам легче было потом подписаться на платные услуги. Если вы решили купить услугу, а тут Google просит ввести номер кредитной карты, вы три раза подумаете: «А нужна ли мне эта услуга?». А если данные кредитной карты уже есть, то и покупка проходит легче — нажал кнопку, подтвердил — и вот, ты уже подписан!
Но это все лирика. Далее нам нужно создать GCP проект. Проект — это не обязательно отдельная программка. Вы можете раздавать сотни программок с одного и того же проекта. Проект в GCP — это скорее направление, сфера работы. На картинке выше проект называется API Project
Возвращаемся в Idea. Снова идем в Run/Debug Configurations, но на этот раз шаблон выбираем Google App Engine Deployment. Здесь настроек вообще по-минимуму. Нужно выбрать только артифакт в строке Deployment и созданный на предыдущем шаге GCP проект. Если вы делаете это в первый раз, то Idea пропросит вас зайти в ваш Google аккаунт.
Казалось бы все? А вот и нет. Дело в том, что App Engine ассоциирует ваше приложение с виртуальным сервером. И этот сервер должен находиться на том или ином физическом сервере Google — так называемой зоне. Всего у Google 20 регионов и 61 зона. Обычно лучше всего выбирать зону, наиболее близкую к вашим клиентам — ссылки внутри зоны открываются гораздо быстрее, чем ссылки между зонами
После того, как все настроено, можно запускать заливку приложения на сервер. Формально, нам нужно бы еще создать файл app.yaml с параметрами для App Engine. По факту же плагин Cloud Tools облегчает нам эту задачу, и генерирует страндартный app.yaml автоматически.
Когда мы заливаем приложение на облако в первый раз, это может занять продолжительное время, ведь Idea загружает все нужные файлы на сервер. Впоследствии же она будет загружать только измененные файлы, и все будет годаздо быстрее.
Когда же весь процесс завершен, ваш проект будет доступен всему миру по автоматически сгенерированной ссылке, заканчивающейся на .appspot.com.
Поздравляем! Вы онлайн!
Комментарии (11)
zirix
04.12.2019 15:13+3Готовые Tomcat хостинги недешевы
Поэтому надо брать обычный VPS (5$ на digitalocean) и самому ставить nginx, tomcat, СУБД и прочее. Для програмиста на java это обязательный навык.
Для меня вообще новость, что существуют java хостинги. Кто-то реально ими пользуется?ne_kotin
04.12.2019 15:56брать обычный VPS (5$ на digitalocean) и самому ставить nginx, tomcat, СУБД и прочее.
apt-get update && apt-get -y install docker.io nginx software-properties-common certbot wget git openjdk-8-jdk
и хватит.
остальное — контейнерами и компоузомanatooly
05.12.2019 12:37Насколько использование докера ощутимо нагружает систему на vps? Преимущества перевешивают недостатки?
ne_kotin
05.12.2019 13:12ну, у меня в контейнерах прокси живут. если не озабочиваться host networking mode, то из 100 Mbps вытаскивается максимум 40 при полностью загруженных ядрах.
А так — с чего ему нагружаться, вычислительный оверхед у докера мизерный.
tuxi
04.12.2019 16:25Если EE не надо, то помимо tomcat есть еще куча вариантов, caucho resin например. К тому же, статику он не сильно хуже nginx отдавать умеет.
Статья очень удивительная, такое ощущение, что автор только вчера открыл дверь с табличкой «java»
вспомнил: AWS t2.micro целый год бесплатен, и образы с томкатом там уже есть готовые.
mikaakim
04.12.2019 17:49+1Еще можно вспомнить, что есть embedded tomcat и jetty, чтобы деплой заканчивался на команде «java -jar app.jar» или через systemd
amarkevich
05.12.2019 00:33Наша комманда для «поиграться» со Spring Boot приложениями пользовалась Heroku
Arb9i
07.12.2019 01:22можно на амазоне поднять свое приложение, там тоже будет бесплатно(особенно, если мало людей посещают). там еще и дополнительные плюшки будут))
alexesDev
Только Google Cloud не работает с физиками в РФ (как минимум триал не дает начать, хотя данные ип никак не проверяет).
Meosit
Добавлю: раньше им можно было пользоваться в рамках бесплатных квот (которых вполне хватало для домашних проектов) без подключения billing, однако после 30 ноября 2019 года эта возможность пропала из-за введения обязательного использования Google Cloud Build, который в свою очередь обязательно требует billing. То есть чисто технически App Engine можно использовать как физическое лицо бесплатно, но задеплоить новую версию кода уже нельзя.
strong_split
Хорошо, что бугл далеко не монополист в отличном хостинге. Из бесплатных с ходу вспоминается heroku, ibm cloud