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

Несколько дней назад столкнулся с задачей развернуть систему управления разработкой, которую предлагает 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 <&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< /tmp/cron_
crontab /tmp/cron_

Заключение

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

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

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

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

© Habrahabr.ru