Все мы хоть когда-нибудь писали приложения, облегчающие жизнь. Не на заказ, а просто для себя. Записные книжки, программки учета финансов, набор карточек для изучения иностранного языка — да мало ли в жизни хороших идей? И вот было бы здорово, иметь доступ к этой программке не только со своего компьютера, но и с рабочего! А то и поделиться с друзьями своей замечательной программкой!


Все отлично, если вы, скажем, PHP программист — дешевых и даже бесплатных хостингов море.


А что если вы программист Java? Готовые Tomcat хостинги недешевы, а если у вас еще и несколько таких программок, то желание поделиться ими с друзьями выльется в копеечку.


Примерные цены на JVM хостинг

Что же делать?


Google нам поможет...


Для следующего рецепта нам понадобится:

  • IntelliJ Idea — 1 шт (можно использовать и Eclipse, но на работе наша команда работает с Idea, и мне Idea как-то уже привычнее)
  • Аккаунт в Google — скажем, ваша gmail почта
  • Доступ к интернету — для скачивания Cloud Code плагина и загрузки вашего приложения на облако
  • Имя, адрес, телефон, номер кредитной или дебетовой карточки. Но не волнуйтесь, ни копейки с этой карточки списано не будет
  • Примерно 15 минут времени


Итак, поехали!


Запускаем Idea, выбираем Ctrl-Alt-S > Plugins. Ищем Cloud Code by Google Cloud


image

Устанавливаем, переоткрываем Idea


Если проект у вас новый, то просто при создании проекта выбираем поддержку Google App Engine Standard (почему стандард? Потому что есть еще flexible, но его бесплатного не бывает, и в целом он дороже).


image

Если же программка у вас уже написана, то идем в 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.


image

Сохраняем, запускаем. Приложение появится в вашем браузере по ссылке localhost:8080 (или 8888). Если программа наткнется на breakpoint, то Idea сама активизируется и вылезет поверх всех остальных окон.


Кстати, breakpoint-ы можно ставить не только на ваших Java классах (сервлетах и прочей серверной части), но и на jsp страницах. Тогда отладка остановится каждый раз, когда браузер запрашивает эту страницу


Отлично! Локально все работает, пора заливать на сервер!


Заходим в наш Google аккаунт, и переходим на Google Cloud Console. Сверху окна появится предложение активировать триал и получить $300 для использования различных облачных сервисов. Эти $300 действительны ровно год, если за год вы их не израсходовали (а скорее всего, не израсходуете. Для примера, приложение с 60 постоянными активными пользователями, каждый из которых имеет отдельный namespace в DataStore с десятком таблиц в каждом — все это тратит примерно $4 в месяц). Так вот, если вы не используете эти $300, то через год они исчезнут.

image

При активации триала, Google попросит о вас все данные — имя, адрес, телефон и номер кредитной или дебетовой карточки. Причем в информационном окошке они заверяют, что ни копейки с карточки не снимут, если только вы сами вручную не подпишетесь на платный аккаунт. Объясняют это проверкой, что вы не робот. На самом деле это сделано, чтобы вам легче было потом подписаться на платные услуги. Если вы решили купить услугу, а тут Google просит ввести номер кредитной карты, вы три раза подумаете: «А нужна ли мне эта услуга?». А если данные кредитной карты уже есть, то и покупка проходит легче — нажал кнопку, подтвердил — и вот, ты уже подписан!


Но это все лирика. Далее нам нужно создать GCP проект. Проект — это не обязательно отдельная программка. Вы можете раздавать сотни программок с одного и того же проекта. Проект в GCP — это скорее направление, сфера работы. На картинке выше проект называется API Project


Возвращаемся в Idea. Снова идем в Run/Debug Configurations, но на этот раз шаблон выбираем Google App Engine Deployment. Здесь настроек вообще по-минимуму. Нужно выбрать только артифакт в строке Deployment и созданный на предыдущем шаге GCP проект. Если вы делаете это в первый раз, то Idea пропросит вас зайти в ваш Google аккаунт.


Казалось бы все? А вот и нет. Дело в том, что App Engine ассоциирует ваше приложение с виртуальным сервером. И этот сервер должен находиться на том или ином физическом сервере Google — так называемой зоне. Всего у Google 20 регионов и 61 зона. Обычно лучше всего выбирать зону, наиболее близкую к вашим клиентам — ссылки внутри зоны открываются гораздо быстрее, чем ссылки между зонами


image

После того, как все настроено, можно запускать заливку приложения на сервер. Формально, нам нужно бы еще создать файл app.yaml с параметрами для App Engine. По факту же плагин Cloud Tools облегчает нам эту задачу, и генерирует страндартный app.yaml автоматически.


Когда мы заливаем приложение на облако в первый раз, это может занять продолжительное время, ведь Idea загружает все нужные файлы на сервер. Впоследствии же она будет загружать только измененные файлы, и все будет годаздо быстрее.


image

Когда же весь процесс завершен, ваш проект будет доступен всему миру по автоматически сгенерированной ссылке, заканчивающейся на .appspot.com.


Поздравляем! Вы онлайн!

Комментарии (11)


  1. alexesDev
    04.12.2019 14:45

    Только Google Cloud не работает с физиками в РФ (как минимум триал не дает начать, хотя данные ип никак не проверяет).


    1. Meosit
      04.12.2019 16:20

      Добавлю: раньше им можно было пользоваться в рамках бесплатных квот (которых вполне хватало для домашних проектов) без подключения billing, однако после 30 ноября 2019 года эта возможность пропала из-за введения обязательного использования Google Cloud Build, который в свою очередь обязательно требует billing. То есть чисто технически App Engine можно использовать как физическое лицо бесплатно, но задеплоить новую версию кода уже нельзя.


    1. strong_split
      07.12.2019 01:22

      Хорошо, что бугл далеко не монополист в отличном хостинге. Из бесплатных с ходу вспоминается heroku, ibm cloud


  1. zirix
    04.12.2019 15:13
    +3

    Готовые Tomcat хостинги недешевы

    Поэтому надо брать обычный VPS (5$ на digitalocean) и самому ставить nginx, tomcat, СУБД и прочее. Для програмиста на java это обязательный навык.

    Для меня вообще новость, что существуют java хостинги. Кто-то реально ими пользуется?


    1. 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
      

      и хватит.
      остальное — контейнерами и компоузом


      1. anatooly
        05.12.2019 12:37

        Насколько использование докера ощутимо нагружает систему на vps? Преимущества перевешивают недостатки?


        1. ne_kotin
          05.12.2019 13:12

          ну, у меня в контейнерах прокси живут. если не озабочиваться host networking mode, то из 100 Mbps вытаскивается максимум 40 при полностью загруженных ядрах.
          А так — с чего ему нагружаться, вычислительный оверхед у докера мизерный.


    1. tuxi
      04.12.2019 16:25

      Если EE не надо, то помимо tomcat есть еще куча вариантов, caucho resin например. К тому же, статику он не сильно хуже nginx отдавать умеет.

      Статья очень удивительная, такое ощущение, что автор только вчера открыл дверь с табличкой «java»

      вспомнил: AWS t2.micro целый год бесплатен, и образы с томкатом там уже есть готовые.


  1. mikaakim
    04.12.2019 17:49
    +1

    Еще можно вспомнить, что есть embedded tomcat и jetty, чтобы деплой заканчивался на команде «java -jar app.jar» или через systemd


  1. amarkevich
    05.12.2019 00:33

    Наша комманда для «поиграться» со Spring Boot приложениями пользовалась Heroku


  1. Arb9i
    07.12.2019 01:22

    можно на амазоне поднять свое приложение, там тоже будет бесплатно(особенно, если мало людей посещают). там еще и дополнительные плюшки будут))