Развертывание JetBrains Hub + Youtrack + Upsource + Nginx на своем сервере Debian 8

  • Tutorial
Несколько дней назад столкнулся с задачей развернуть систему управления разработкой, которую предлагает JetBrains, а именно установить Hub, Youtrack и Upsource при этом обеспечить доступ к ресурсам по удобным для всех url.

Почитав про продукты и их установку на сервере из zip архивов, решил поделиться опытом и готовым решением (скриптом) для автоматического развертывания с вами.

hub+youtrack+upsource

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


Речь пойдет о продуктах, которые предоставляются для linux в .zip архивах.

Все разворачивалось на новом Debian 8 сервере, который только созданы был в облаке, то есть на нем ничего не было кроме самого минимально необходимого.

При настройке системы руководствовался следующими ресурсами:


Рекомендации для сервера


В инструкции для Upsource сказано, что рекомендуемыми характеристиками для системы является:
  1. Более 8 Гб оперативной памяти.
  2. JRE или JDK 1.8 и новее.

Другие рекомендации для Upsource может прочесть здесь.

О процессе установки


Процесс установки прост:
пример показан для hub, другие продукты устанавливаются один в один.
  1. Скачиваем архив
    mkdir -p /usr/opt/jetbrains/hub
    cd /usr/opt/jetbrains/hub
    wget http://download.jetbrains.com/hub/1.0/hub-ring-bundle-1.0.529.zip
    

  2. Распаковываем в нужную каталог, который будет домашним для продукта.
    unzip hub-ring-bundle-1.0.529.zip
    

  3. И потом согласно инструкции можно запустить командой (start для background запуска):
    /usr/opt/jetbrains/hub/bin/hub.sh run
    

  4. Затем открываем в браузере yourdomain.local:8080
    И делаем настройку. Указываем имя хоста и порт.

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

Для этого перед пунктом 3, так как мы планируем использовать nginx в качестве прокси, в конфиг /etc/nginx/sites-enabled/default надо добавить в начало строки:
server {
	listen 80;
	listen [::]:80;
	server_name hub.yourdomain.local;
	server_tokens off;
	
	location / {
		proxy_set_header X-Forwarded-Host $http_host; 
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
		proxy_set_header X-Forwarded-Proto $scheme; 
		proxy_http_version 1.1;
	
		proxy_pass http://localhost:2222/;
	}
}

Сделать:
service nginx reload


А затем нужно выполнить команду:
/usr/opt/jetbrains/hub/bin/hub.sh configure --listen-port 2222 --base-url http://hub.yourdomain.local


Теперь можно выполнить собственно пункт 3 и перейти по настроенному адресу hub.yourdomain.local.

О связки продуктов


Сначала устанавливается и настраивается Hub, затем можно настраивать Youtrack и Upsource.
Причем при конфигурировании Youtrack и Upsource в браузере на втором шаге нужно указать настроенный вами hub.

ВАЖНО!
После настройки и конфигурации Youtrack и Upsource, и перезагрузки сервера если Hub еще не запустился то Youtrack и Upsource
не смогут запустить и упадут с ошибкой что не существует службы hub. По этому их надо запускать только после успешного старта Hub.

Но, ни hub ни другие сервисы сами не прописываются в автозагрузку.

Для этого надо сделать сценарии запуска каждого продукта как сервиса:
cat >/etc/init.d/hub <<EOF
#! /bin/sh
### BEGIN INIT INFO
# Provides:          hub
# Required-Start:    \$local_fs \$remote_fs \$network \$syslog \$named
# Required-Stop:     \$local_fs \$remote_fs \$network \$syslog \$named
# Default-Start:     2 3 4 5
# Default-Stop:      S 0 1 6
# Short-Description: initscript for hub
# Description:       initscript for hub
### END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=hub
SCRIPT=/usr/opt/jetbrains/\$NAME/bin/\$NAME.sh
do_start() {
  \$SCRIPT start soft
}
case "\$1" in
  start)
    do_start
    ;;
  stop|restart|status|run|rerun|help)
    \$SCRIPT \$1 \$2
    ;;
  *)
    echo "Usage: sudo /etc/init.d/hub {start|stop|restart|status|run|rerun}" >&2
    exit 1
    ;;
esac
exit 0
EOF

chmod +x /etc/init.d/hub

update-rc.d hub defaults


Для Youtrack и Upsource надо дополнительно выполнить:
update-rc.d youtrack disable
Потому что они так и так не стартанут сами корректно.
Для их корректного старта нужно написать для cron скрипт для события @reboot
, который ждет запуска api Hub:

mkdir -p /root/crons

cat >/root/crons/jetbrains<<EOF
#!/bin/bash
status=404
while [ \$status -eq 404 ]; do
  echo "wait hub..."
  sleep 60
  status=\`curl -s -o /dev/null -w "%{http_code}" http://hub.yourdomain.local/hub\`
  echo "hub status \$status"
done
service youtrack start
service upsource start
exit 0
EOF

chmod +x /root/crons/jetbrains

echo "@reboot /root/crons/jetbrains" > /tmp/cron_
crontab /tmp/cron_


Заключение



Для чего я тут грубо пересказал инструкции JetBrains. Во-первых, для того чтобы вы не писали велосипедов а уже могли воспользоваться готовым решением. Да может быть мой скрипт не является эталоном, но он находиться в gist и любой желающий может косяки поправить и предложить свой экспертный взгляд.
Во-вторых, я просто не нашел решения, которые бы уменьшили мои трудозатраты.

Благодарю за внимание.

P.S. Об ошибках пишите в личку.

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

Пользуетесь ли вы данными продуктами JetBrains
  • +12
  • 17,2k
  • 7
Поделиться публикацией
Комментарии 7
    +2
    Ставить, что в /usr/jetbrains (как вы предлагаете в гисте), что в /usr/opt — несколько некошерно. Лучше в /opt или /opt/jetbrains, т. к. это тяжелый самодостаточный софт, который вы не опакечиваете.

    Кроме того, можно удалить из распакованных архивов jre (internal/java/*), если используете системную jre/jdk.

    Также стоит отметить, что использовать hub без TLS — дело не сильно полезное, хотя наплевательское отношение к безопасности может быть допустимо внутри мелкой организации.
      0
      Ну для нас пока не критично наличие TLS. Самое что интересное для Gitlab через ssl сделано =)

      По поводу замечании по каталогов, согласен надо будет поправить.
        0
        В статье показывается, как организовать проксирование через nginx. nginx — прекрасный SSL/TLS-терминатор, так что с этим проблем не возникнет, если хочется немного безопасности. Туда бы еще раздачу статики добавить, и будет совсем хорошо. Кстати, рекомендацией godlike-уровня были бы намеки, что можно кэшировать без опасности все сломать или превратить в улитку :)
          0
          Я использую nginx для терминации TLS. Удобно, легко настраивается.

          У меня основная неприятность вылезла при обновлении YouTrack (при обновлении с восстановлением из db backup'а). Сначала yt запускается на порту 8080, потом, после указания, где лежит бэкап, берёт оттуда порт (и перезапускается на нём), но теряет информацию об адресе, на который биндится. И запускается не на том адресе, который проксируется nginx'ом, а на том, в который резолвится hostname.
        0
        А как же TeamCity?
          0
          А там жесть =))) Там все не просто… Это следующий этап интеграции =)))
          0
          В этой строке
          echo "Usage: sudo /etc/init.d/hub {start|stop|restart|status|run|rerun}" >&2
          


          Забыли help
          echo "Usage: sudo /etc/init.d/hub {start|stop|restart|status|run|rerun|help}" >&2
          

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

          Самое читаемое