Несколько дней назад столкнулся с задачей развернуть систему управления разработкой, которую предлагает JetBrains, а именно установить Hub, Youtrack и Upsource при этом обеспечить доступ к ресурсам по удобным для всех url.
Почитав про продукты и их установку на сервере из zip архивов, решил поделиться опытом и готовым решением (скриптом) для автоматического развертывания с вами.
Речь пойдет о продуктах, которые предоставляются для linux в .zip архивах.
Все разворачивалось на новом Debian 8 сервере, который только созданы был в облаке, то есть на нем ничего не было кроме самого минимально необходимого.
При настройке системы руководствовался следующими ресурсами:
В инструкции для Upsource сказано, что рекомендуемыми характеристиками для системы является:
Другие рекомендации для Upsource может прочесть здесь.
Процесс установки прост:
пример показан для hub, другие продукты устанавливаются один в один.
Но если вы планируете использовать субдомены для доступа к ресурсам да и вообще более верный путь это заранее сконфигурировать продукты на нужный порт и имя хоста, так как они должны слушать разные порты как минимум.
Для этого перед пунктом 3, так как мы планируем использовать nginx в качестве прокси, в конфиг /etc/nginx/sites-enabled/default надо добавить в начало строки:
Сделать:
А затем нужно выполнить команду:
Теперь можно выполнить собственно пункт 3 и перейти по настроенному адресу hub.yourdomain.local.
Сначала устанавливается и настраивается Hub, затем можно настраивать Youtrack и Upsource.
Причем при конфигурировании Youtrack и Upsource в браузере на втором шаге нужно указать настроенный вами hub.
Но, ни hub ни другие сервисы сами не прописываются в автозагрузку.
Для этого надо сделать сценарии запуска каждого продукта как сервиса:
Для Youtrack и Upsource надо дополнительно выполнить:
Для их корректного старта нужно написать для cron скрипт для события
Для чего я тут грубо пересказал инструкции JetBrains. Во-первых, для того чтобы вы не писали велосипедов а уже могли воспользоваться готовым решением. Да может быть мой скрипт не является эталоном, но он находиться в gist и любой желающий может косяки поправить и предложить свой экспертный взгляд.
Во-вторых, я просто не нашел решения, которые бы уменьшили мои трудозатраты.
Благодарю за внимание.
P.S. Об ошибках пишите в личку.
Почитав про продукты и их установку на сервере из zip архивов, решил поделиться опытом и готовым решением (скриптом) для автоматического развертывания с вами.
Сразу скажу, что ничего нового того, что вы бы не нашли в документации продуктов я не сообщу, я расскажу об некоторых нюансах и как собрать все хозяйство вместе.
Речь пойдет о продуктах, которые предоставляются для linux в .zip архивах.
Все разворачивалось на новом Debian 8 сервере, который только созданы был в облаке, то есть на нем ничего не было кроме самого минимально необходимого.
При настройке системы руководствовался следующими ресурсами:
Рекомендации для сервера
В инструкции для Upsource сказано, что рекомендуемыми характеристиками для системы является:
- Более 8 Гб оперативной памяти.
- JRE или JDK 1.8 и новее.
Другие рекомендации для Upsource может прочесть здесь.
О процессе установки
Процесс установки прост:
пример показан для hub, другие продукты устанавливаются один в один.
- Скачиваем архив
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
- Распаковываем в нужную каталог, который будет домашним для продукта.
unzip hub-ring-bundle-1.0.529.zip
- И потом согласно инструкции можно запустить командой (start для background запуска):
/usr/opt/jetbrains/hub/bin/hub.sh run
- Затем открываем в браузере 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. Об ошибках пишите в личку.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
grossws
Ставить, что в /usr/jetbrains (как вы предлагаете в гисте), что в /usr/opt — несколько некошерно. Лучше в /opt или /opt/jetbrains, т. к. это тяжелый самодостаточный софт, который вы не опакечиваете.
Кроме того, можно удалить из распакованных архивов jre (
internal/java/*
), если используете системную jre/jdk.Также стоит отметить, что использовать hub без TLS — дело не сильно полезное, хотя наплевательское отношение к безопасности может быть допустимо внутри мелкой организации.
artzub
Ну для нас пока не критично наличие TLS. Самое что интересное для Gitlab через ssl сделано =)
По поводу замечании по каталогов, согласен надо будет поправить.
justabaka
В статье показывается, как организовать проксирование через nginx. nginx — прекрасный SSL/TLS-терминатор, так что с этим проблем не возникнет, если хочется немного безопасности. Туда бы еще раздачу статики добавить, и будет совсем хорошо. Кстати, рекомендацией godlike-уровня были бы намеки, что можно кэшировать без опасности все сломать или превратить в улитку :)
grossws
Я использую nginx для терминации TLS. Удобно, легко настраивается.
У меня основная неприятность вылезла при обновлении YouTrack (при обновлении с восстановлением из db backup'а). Сначала yt запускается на порту 8080, потом, после указания, где лежит бэкап, берёт оттуда порт (и перезапускается на нём), но теряет информацию об адресе, на который биндится. И запускается не на том адресе, который проксируется nginx'ом, а на том, в который резолвится hostname.