/ Java

Хостинг java 8 приложения на облаке Digitalocean (используем Apache Tomcat 8)

UPD 2017

А лучше используйте Docker:)

Оглавление

Статья рассчитана в первую очередь на новичков, не уверенно ориентирующихся в утилитах linux, и работающих впервые с digitalocean

Сегодня расскажу о :

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

Digitalocean

И так, для хостинга будем использовать облачный сервис digitalocean. Вам предоставляют облачный сервер (VPS), к которому вы имеете root доступ, в вправе делать с ним, что захотите, т.е. можете поднимать любой http сервер, ставить любое ПО.

В digitalocean ключевое понятие - дроплет (droplet). Это работающая единица, своего рода виртуальная машина, с которой вы в последствии и будете работать.

Создание дроплета

Здесь ничего сложного, просто регистрируетесь на сайте https://cloud.digitalocean.com. После регистрации вам нужно привязать платежную карточку или paypal. Цены разные, в зависимости от ресурсов, самый дешевый вариант - 5$ в месяц. Вы можете получить бонус - 10$ - введя промокод от подкаста http://www.radio-t.com/ (подробности в любом выпуске).

Для создания дроплета положите деньги на счет, они будут списываться каждый день, в зависимости от созданных вами дроплетов.

Нажмите "создать новый дроплет"

выберите то решение, что вам нужно:

потом выберите регион, чем ближе он к вам, тем вероятнее будет скорость доступа к серверу. В моем случае это Амстердам.

дальше выберите дистрибудив или приложение. На выбор вам даются разные версии Ubuntu, FreeBSD, Fedora, Debian, CoreOS, CentOS. Я предпочитаю Ubuntu 14.04x64. Вы также можете выбрать образ с предустановленным приложением. Например с Docer (его и советую).

Дальше можно ничего не настраивать, но советую сразу добавить ключ для доступа по ssh.

нажимайте "создать дроплет" и ждите около минуты, вам на почту придет root пароль и ваш IP.

И сразу можете перейти к вашему дроплету и запустить web консоль

(в принципе можете через неё можно полноценно работать). При входе вам нужно будет создать изменить root пароль.

Все, теперь у вас есть виртуальная машина, к которой вы имеете полный доступ.

Доступ по ssh

Это не обязательный шаг, все можно сделать и через предоставляемую веб-консоль. Но это менее удобно

Если вы уже добавили ключ, то можете просто подключиться:

ssh root@your_id_address

Если нужно изменить или добавить новый ключи, зайдите в настройки

И добавьте свой публичный ключ из .ssh/[name].pub

Если у вас нет ssh ключа, сгенерируйте его, подробно процесс не описываю, информацию найти не сложно, в том числе и на русском языке. Если вы счастливый пользователь *unix системы, выполните:

ssh-keygen -t rsa

если же вы пользователь windows, вам придется дополнительно установить нужное ПО (PuTTY), а еще удобно использовать использовать линуксовый терминал (я предпочитаю использовать git bash)

Если по настройке и генерации ключей нужно больше информации, сообщите мне, я дополню.

Установка java 8 и apache tomcat 8

Я предпочел использовать oracle jdk, и самый новый на данный момент tomcat. По этому вопросу будут полезны статьи:

Рекомендую первые 2 ссылки. Самое основное изложу здесь с пояснениями.

Чтобы использовать tomcat, нужно установить java. Первым делом проверьте или её еще нет. Потом добавьте источники, чтобы установить используя apt-get

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update

теперь установите JDK 8

sudo apt-get install oracle-java8-installer

Проверьте или все работает.

Теперь переходим к установке tomcat, идея простая: скачиваем архив и извлекаем. Устанавливать его не нужно.

Тут ссылки на скачивания tomcat

Перейдите в home

cd ~

скачайте архив

wget http://mirror.sdunix.com/apache/tomcat/tomcat-8/v8.0.23/bin/apache-tomcat-8.0.23.tar.gz

нужно извлечь архив. Извлекаем в /opt/tomcat

opt предназначенна для добавления пакетов ПО, или для других компонентов не являющихся базой системы. Некоторые используют её, другие просто /usr/local - выбор за вами

создайте целевую папку:

sudo mkdir /opt/tomcat

извлеките

sudo tar xvf apache-tomcat-8*tar.gz -C /opt/tomcat --strip-components=1

Пояснение по команде tar: ключ xvf предназначен для извлечения содержимого tar.gz архива. Ключ -C позволяет создать Tarpipe. Tarpipe — процесс создания tar-архива в stdout и последующего извлечения содержания архива в другом каталоге из stdin. Это очень удобный метод копирования содержания одной файловой системы в другую, так как происходит полное копирование, включая атрибуты файлов, символические ссылки, файлы устройств. Но если просто, вы указываете куда извлечь содержание архива. --strip-components=1 - говорит, что нужно пропустить один уровень в имени, давайте на примере, если запустить без strip, то архив был бы извлечен в каталог /opt/tomcat/apache-tomcat-8.0.26/<содержание> , а с ключем --strip-components=1 мы получим /opt/tomcat/<содержание>

ну и все, сервер теперь работоспособен, для проверки можете запустить:

/opt/tomcat/bin/./catalina sh run

откройте ваш браузер: http://<your_ip>:8080 и увидите:

Настройка запуска tomcat как сервиса и полномочий

Мы запустили tomcat, но такой вариант запуска несколько не удобен (разве что для отладки). Сейчас настроим запуск tomcat как сервис. Как обычно есть много вариантов как это сделать, я опишу один из них.

1.Обновим разрешения.

Если вы все делаете по root, то вам не нужен этот шаг. Но по ряду причин, это плохой тон, запускать все с root правами

зайдите в папку с tomcat

cd /opt/tomcat

Then give the tomcat user write access to the conf directory, and read access to the files in that directory:

Затем дайте пользователю tomcat доступ на запись к каталогу conf, и доступ на чтение к файлам в этом каталоге:

sudo chgrp -R tomcat conf
sudo chmod g+rwx conf
sudo chmod g+r conf/*

Пояснения

Группа — это несколько пользователей Linux, которые могут использовать (при достаточных правах доступа) файлы и папке на уровне с их владельцем. Изменить группу пользователей ассоциированных с файлом или директорией можно командой chgrp

chgrp позволяет изменить группу файлов. Ключ -R включает рекурсивное изменение группы для каталогов и их содержимого. tomcat - это, естественно, имя группы. conf - каталог для которого мы меняем группу

chmod (change mode) – это широко используемая команда для изменения прав доступа к файлам и папкам в Linux. Она позволяет устанавливать права на доступ как пользователю, так и группе пользователей и для всех остальных.

g+rwx расшифруем: g+ добавляет разрешение для группы, rw на чтение (r) и запись (w). и символ x - дает право быть запускаемым (execute).

И теперь назначим пользователя tomcat владельцем директорий: work/ temp/ logs/ , командой chown (change owner)

sudo chown -R tomcat work/ temp/ logs/

подробно о правах доступа в Linux

2.Настроим скрипт для записи.

Нам нужно узнать путь к java, его обычно называют JAVA_HOME, простейший путь найти вашу java, выполнить команду:

sudo update-alternatives --config java

так вот, JAVA_HOME это путь без bin/java на конце

output:

There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-8-oracle/jre/bin/java
Nothing to configure.

в моем случае это:

/usr/lib/jvm/java-8-oracle/jre

у нас все готово для написания скрипта для запуска, для этого нужно создать файл /etc/init/tomcat.conf

для этих целей можете использовать любой консольный текстовый редактор. Например nano, я же предпочитаю vi:

Я не объясняю как работать с VI, если не сталкивались, можете кратко почитать основы vi. Или используйте другой редактор.

откройте файл:

sudo vi /etc/init/tomcat.conf

для начала приведу минимальный скрипт, который вам нужно написать (только если вы запустите все с root-правами, как я уже говорил, нет причин делать так)

Обратите внимание на переменные среды JAVA_HOME и CATALINA_HOME там должны быть ваши значения: для java, то что мы узнали выше, для catalina, то куда в установили

description "Tomcat Server"

  start on runlevel [2345]
  stop on runlevel [!2345]
  respawn
  respawn limit 10 5

  env JAVA_HOME=/usr/lib/jvm/java-8-oracle/jre
  env CATALINA_HOME=/opt/tomcat

  exec $CATALINA_HOME/bin/catalina.sh run

Итак, пояснения

description - как следует из названия, описывает информацию о сервисе.

start on runlevel [2345] - говорит что сервис должен запустится при достижении системой уровня выполнения 2,3,4 или 5.

stop on runlevel [!2345] - говорит что сервис должен остановиться при достижении системой уровня выполнения не 2,3,4 или 5.

Информация о уровнях выполнения

Подробнее про upstart и еще

respawn - флаг который говорит, что сервис должен быть перезапущен при неожиданном завершении

respawn limit 10 5 - ограничение на количеств переподключений/ respawn limit count timeout

env задает нужные переменные окружения, для работы tomcat нужна JAVA_HOME и CATALINA_HOME

exec описывает непосредственно действие, которое должно быть выполнено. А именно, запуск нашего сервера.

Теперь дополним скрипт, добавим группу tomcat, скрипты после завершения и опции:

description "Tomcat Server"

  start on runlevel [2345]
  stop on runlevel [!2345]
  respawn
  respawn limit 10 5

  setuid tomcat
  setgid tomcat

  env JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/jre
  env CATALINA_HOME=/opt/tomcat

  # Вы можете задавать настройки, например:
  # env JAVA_OPTS="-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom"
  # env CATALINA_OPTS="-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

  exec $CATALINA_HOME/bin/catalina.sh run

  # Очистка директории temp после завершения скриптов
  post-stop script
    rm -rf $CATALINA_HOME/temp/*
  end script

В этой версии скрипта добавились setuid и setgid, а также post-stop script

Чтобы понять зачем setuid и setgid советую почитать эту статью.
setuid и setgid нужны для присваивания нашему процессу группы пользователейtomcat , как вы помните, выше мы настраивали разрешения для них. Таким образом мы подымем приоритет для нашего процесса, хотя пользователь не будет иметь root прав.

Биты setuid и setgid, установленные для каталогов, имеют совсем другой смысл. Бит setgid для директории (chmod g+s) заставляет только новые каталоги и файлы, созданные в ней, наследовать ID группы этой директории вместо ID группы пользователя, создавшего файл. Новые поддиректории также наследуют бит setgid. Это позволяет создать общее рабочее пространство для группы без неудобств членам группы явно менять их текущую группу для создания новых файлов и каталогов. Наследование устанавливается только для новых файлов и каталогов. Уже существующим файлам и каталогам этот бит нужно устанавливать вручную

что касается блокаpost-stop script, это набор команд, как вы поняли из названия, того что должно выполнится после завершения. В нашем случае чистится папка для временных файлов.

Поздравляю, вы все настроили, теперь просто перезагрузите настройки:

sudo initctl reload-configuration

и запустите сервис

sudo initctl start tomcat

или просто

sudo start tomcat

скрипт будет запускаться сам, при перезагрузке системы

Проверить работу можно просто открыв в браузере:

http://server_IP_address:8080

если вы все сделали правильно, вы увидите стартовую страницу tomcat.

Вы также можете остановить сервер stop tomcat, перезапустить restart tomcat, или проверить статус status tomcat

Настройка пользователей tomcat

Пользователи tomcat нужны для управление сервером. Мы можем задавать им роли. Сейчас создадим пользователя, администратора, и дадим ему право управлять через веб интерфейс сервером. Информация о пользователях хранится в tomcat-users.xml :

/opt/tomcat/conf/tomcat-users.xml

в файле содержится информация о том, что вы можете сделать. Чтобы добавить пользователя, вставьте между тегами tomcat-users строку с параметрами, например:

<tomcat-users>
    <user username="admin" password="password" roles="manager-gui,admin-gui"/>
</tomcat-users>

после сохранения, перезапустите сервер (наш сервис):

sudo initctl restart tomcat

или просто

sudo restart tomcat

Теперь вы имеете доступ к веб-интерфейсу сервера.

Настроим свое доменное имя

Для настройки доменного имени, откройте вкладку "DNS" на сайте digitalocean и добавьте запись. В которой напишите желаемое доменное имя (естественно, вы должны перед этим его купить), в примере я использую субдомен igor для своего доменного имени второго уровня nesterenya

после добавление увидите

вверху будет указан ваш домен (или субдомен в моем случае) и здесь можно ничего не менять. Обратите внимание на ваш IP, он вам нужен для настройки записи у провайдера вашего доменного имени. Настройка зависит от вашего провайдера, я использую godaddy, и я могу через веб-интерфейс редактировать записи, я добавляю A запись, в которой вы указываете хост и IP сервера. В моем случае это выглядит:

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

В моем случае godaddy моментально обновляет записи, но, обратите внимание, что смена записей может тянуться до двух дней, все зависит от вашего провайдера. Поэтому не стоит волноваться если адрес не работает, просто подождите пока обновятся записи о вашем доменном имени.

На этом все, ваше доменное имя настроено, но не забывайте, что сейчас ваш tomcat запускается на порту 8080 если вы хотите, чтобы при захождении на ваш сайт не нужно было указывать порт, смените настройки tomcat, используйте стандартный порт: 80

для этого откройте файл настроек сервера:

vi /opt/tomcat/conf/server.xml

измените порт

сохраните изменения, и перезапустите сервер.

Загрузить свой проект (вручную, через web интерфейс)

Чтобы развернуть проект существует множество способов. В данном случае мы просто загрузим проект через веб-интерфейс, не самый полезный способ для реальных задач, но очень простой. Откройте страницу, и введите свой пароль, который задали в настройках tomcat users:

<your_site_address>/manager/html

найдите раздел Deploy:

Выберите загрузку WAR архива проекта (который вы изначально должны собрать, на своей машине)

После загрузки проект развернется и будет доступен, по url указанному в настройках вашего проекта. Для примера я развернул свой REST-сервис, проект был развернут в папку webapi

вот результат:

В другой раз автоматизируем сборку и деплой проекта, но пока этого достаточно.

Заключение

если вы сделали все правильно, у вас теперь работающий tomcat сервер, настроено доменное имя, и вы имеете доступ к управлению через web интерфейс своим сервером. Если что-то не понятно, или есть ошибки и замечания по тексту, пишите в комментариях или ко мне на почту.

P.S.

Также планирую связанные с Digitalocean статьи [оставил это здесь, чтобы заставить себя это сделать, пообещал - поэтому придется в ближайшее время с этим разобраться ]:

  • Веб приложение для моделирования (МКЭ) - моя магистерская, видимо хостить я её буду здесь (или на red hat openshif cloud), там будут замешены angular, REST, МКЭ и WebGL.
  • Микросервисы - ну тема сейчас сильно на слуху, нужно с ними познакомиться
  • Сервисы на python для машинного обучения (scikit-learn) - планирую разработать REST-сервис для решения некоторых интересных задача с помощью машинного обучения. Скорее всего буду использовать Flask Framework. Нужно применить знания на чем-то более практическом, чем просто запуск скриптов на компьютере.
Хостинг java 8 приложения на облаке Digitalocean (используем Apache Tomcat 8)
Share this

Subscribe to Yet another blog