Upsource — система от JetBrains для код ревью, который через плагин интегрируется во все IDE от JetBrains.
Представляет собой Java-приложение с Apache Cassandra в роли локального хранилища данных и индексов.
Минимальные требования к машине, на которой будет запускаться — 8 ГБ памяти, что, впрочем, не удивительно.
До 10-ти пользователей — бесплатна.
В этом посте — пример запуска на AWS EC2 и подключение из PyCharm.
Перед самим Upsource будет NGINX с SSL от Let’s Encrypt.
NGINX и Let’s Encrypt уже установлены, см. детали в посте TestRail: QA Test Case Management система — установка на Linux.
Документация — тут>>>.
Содержание
Установка Upsource
Создаём пользователя:
[simterm]
root@bttrm-testrail:/home/admin# useradd -r upsource
[/simterm]
Создаём каталог сервиса:
[simterm]
root@bttrm-testrail:/var/www# mkdir upsource.example.com
[/simterm]
Загружаем архив со страницы загрузок, распаковываем:
[simterm]
root@bttrm-testrail:/var/www# wget https://download.jetbrains.com/upsource/upsource-2018.2.1154.zip root@bttrm-testrail:/var/www# unzip upsource-2018.2.1154.zip
[/simterm]
Переносим в домашнюю директорию проекта:
[simterm]
root@bttrm-testrail:/var/www# mv upsource-2018.2.1154/* upsource.example.com/ root@bttrm-testrail:/var/www# cd upsource.example.com/
[/simterm]
Скрипты запуска располагаются в bin/:
[simterm]
root@bttrm-testrail:/var/www/upsource.example.com# ll bin/ total 8 -rw-r--r-- 1 root root 3458 Dec 31 16:06 upsource.bat -rwxr-xr-x 1 root root 2981 Dec 31 16:06 upsource.sh
[/simterm]
Устанавливаем Java:
[simterm]
root@bttrm-testrail:/var/www/upsource.example.com# apt install default-jdk root@bttrm-testrail:/var/www/upsource.example.com# java -version openjdk version "1.8.0_212"
[/simterm]
Запускаем Upsource.
Используем run для проверки, start — для запуска в бекграунде. Остальные команды см. по help:
[simterm]
root@bttrm-testrail:/var/www/upsource.example.com# ./bin/upsource.sh help
Usage:
/bin/sh /var/www/upsource.example.com/bin/upsource.sh <command>
<command> can be one of the following:
configure
configures Upsource, call "help configure" for details
start
starts Upsource in background, call "help start" for details
...
[/simterm]
Сейчас запускаем с run:
[simterm]
root@bttrm-testrail:/var/www/upsource.example.com# ./bin/upsource.sh run Starting Upsource... * Configuring JetBrains Upsource 2018.2 command [hostname]: hostname: Name or service not known * Made default base-url 'http://127.0.0.1:8080/' from hostname '127.0.0.1' and listen port '8080' * JetBrains Upsource 2018.2 runtime environment is successfully configured * Loading logging configuration from /var/www/upsource.example.com/lib/ext/log4j.xml * Redirecting JetBrains Upsource 2018.2 logging to /var/www/upsource.example.com/logs/internal/services/bundleProcess * Configuring Service-Container[bundleProcess] * Configuring Bundle Backend Service * Configuring Configuration Wizard command [hostname]: hostname: Name or service not known * Starting Service-Container[bundleProcess] * Starting Bundle Backend Service * Starting Configuration Wizard * JetBrains Upsource 2018.2 Configuration Wizard will be available on [http://127.0.0.1:8080?wizard_token=pikhg8iuYJ7OdssGkXbF] after start
[/simterm]
Вроде работает — переходим к SSL.
Let’s Encrypt
Получаем сертификат через standalone аутентификатор, т.к. конфига NGINX ещё нет:
[simterm]
root@bttrm-testrail:/var/www/upsource.example.com# systemctl stop nginx root@bttrm-testrail:/var/www/upsource.example.com# /opt/letsencrypt/letsencrypt-auto certonly -d upsource.example.com Saving debug log to /var/log/letsencrypt/letsencrypt.log How would you like to authenticate with the ACME CA? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: Nginx Web Server plugin (nginx) 2: Spin up a temporary webserver (standalone) 3: Place files in webroot directory (webroot) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-3] then [enter] (press 'c' to cancel): 2 Plugins selected: Authenticator standalone, Installer None ... IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/upsource.example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/upsource.example.com/privkey.pem ...
[/simterm]
NGINX
Создаём файл настроек виртуалхоста, документация тут>>>:
server {
listen 80;
server_name upsource.example.com;
# Lets Encrypt Webroot
location ~ /.well-known {
root /var/www/html;
allow all;
}
location / {
# office1
allow 194.***.***.24/29;
# office2
allow 91.***.***.78/32;
# arseny home
allow 188.***.***.48/32;
# unknown
#allow 93.***.***.125/32;
deny all;
return 301 https://upsource.example.com;
}
}
server {
listen 443 ssl;
server_name upsource.example.com;
root /var/www/upsource.example.com;
access_log /var/log/nginx/upsource.example.com-access.log;
error_log /var/log/nginx/upsource.example.com-error.log warn;
# office1
allow 194.***.***.24/29;
# office2
allow 91.***.***.78/32;
# arseny home
allow 188.***.***.48/32;
deny all;
ssl_certificate /etc/letsencrypt/live/upsource.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/upsource.example.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/dhparams.pem;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_session_timeout 1d;
ssl_stapling on;
ssl_stapling_verify on;
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_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://localhost:8080;
proxy_pass_header Sec-Websocket-Extensions;
}
}
Проверяем, перечитываем конфиги NGINX:
[simterm]
root@bttrm-testrail:/var/www/upsource.example.com# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful root@bttrm-testrail:/var/www/upsource.example.com# service nginx reload
[/simterm]
Запуск Upsource
Обновляем /etc/security/limits.conf.
В документации пример указывает на увеличение лимитов всем — имхо не очень идея, меняем лимиты только для нашего пользователя:
upsource - memlock unlimited upsource - nofile 100000 upsource - nproc 32768 upsource - as unlimited
Обновляем файл /etc/hosts — $HOSTNAME должен быть добавлен, иначе не заведётся Apache Cassandra.
Проверяем имя:
[simterm]
root@bttrm-testrail:/var/www/upsource.example.com# hostnamectl Static hostname: bttrm-testrail ...
[/simterm]
Добавляем его:
... 127.0.0.1 localhost bttrm-testrail ...
Меняем владельца каталога и файлов:
[simterm]
root@bttrm-testrail:/var/www/upsource.example.com# chown -R upsource:upsource /var/www/upsource.example.com/
[/simterm]
Переключаемся на пользователя upsource и запускаем используя start:
[simterm]
root@bttrm-testrail:/var/www/upsource.example.com# su -l upsource $ bash upsource@bttrm-testrail:~$ cd /var/www/upsource.example.com/ upsource@bttrm-testrail:/var/www/upsource.example.com$ ./bin/upsource.sh start Starting Upsource... * Configuring JetBrains Upsource 2018.2 * JetBrains Upsource 2018.2 runtime environment is successfully configured * Loading logging configuration from /var/www/upsource.example.com/lib/ext/log4j.xml * Redirecting JetBrains Upsource 2018.2 logging to /var/www/upsource.example.com/logs/internal/services/bundleProcess * Configuring Service-Container[bundleProcess] * Configuring Bundle Backend Service * Configuring Starting Page Service * Configuring Upsource Configurator * Configuring Hub * Configuring Bundle Hub Configurator * Configuring Apache Cassandra * Configuring Upsource Cluster Initialize Service * Configuring Upsource Frontend * Starting Service-Container[bundleProcess] * Starting Bundle Backend Service * Starting Starting Page Service * JetBrains Upsource 2018.2 will be available on [https://upsource.example.com/bundle/starting] after start * Starting Upsource Configurator Upsource is running
[/simterm]
При первом запуске Upsource сгенерирует токен авториpации в файле /var/www/upsource.example.com/conf/internal/services/configurationWizard/wizard_token.txt.
systemd unit
Для управления сервисом — создаём файл /etc/systemd/system/upsource.service:
[Unit] Description=JetBrains Upsource Requires=network.target After=network.target [Service] User=upsource Group=upsource TimeoutStartSec=10min WorkingDirectory=/var/www/upsource.example.com/ PIDFile=/var/www/upsource.example.com/logs/upsource.pid ExecStart=/var/www/upsource.example.com/bin/upsource.sh start ExecStop=/var/www/upsource.example.com/bin/upsource.sh stop ExecReload=/var/www/upsource.example.com/bin/upsource.sh restart [Install] WantedBy=multi-user.target
Останавливаем Upsource, который запускали вручную:
[simterm]
upsource@bttrm-testrail:/var/www/upsource.example.com$ ./bin/upsource.sh stop
[/simterm]
И запускаем уже через systemd:
[simterm]
root@bttrm-testrail:/etc/nginx/conf.d# systemctl start upsource.service
root@bttrm-testrail:/etc/nginx/conf.d# systemctl status upsource.service
● upsource.service - Upsource Code Review service
Loaded: loaded (/etc/systemd/system/upsource.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2019-04-02 10:23:43 UTC; 2s ago
Main PID: 5356 (bash)
Tasks: 53 (limit: 4915)
CGroup: /system.slice/upsource.service
├─5356 /bin/bash upsource.sh start
...
Apr 02 10:23:43 bttrm-testrail systemd[1]: Started Upsource Code Review service.
Apr 02 10:23:44 bttrm-testrail bash[5356]: Starting Upsource...
[/simterm]
Добавляем в автозапуск:
[simterm]
root@bttrm-testrail:/etc/nginx/conf.d# systemctl enable upsource.service Created symlink /etc/systemd/system/multi-user.target.wants/upsource.service → /etc/systemd/system/upsource.service.
[/simterm]
Настройка Upsource
Переходим на https://upsource.example.com, и выполняем первоначальную настройку:
Вводим токен из файла wizard_token.txt, жмём Log in, кликаем Set up:
Тут можно всё оставить по умолчанию — Upsource сам подставит URL.
Оставляем HTTP, т.к. между NGINX и Upsource у нас HTTP, а SSL терминейтится на самом NGINX:
Добавляем админа:
Тут тоже всё можно оставить по умолчанию:
Ждём, пока он запустится:
Логи хранятся в /var/www/upsource.example.com/logs/.
Запускается 1-2 минуты:
PyCharm integration
В PyCharm переходим в Settings > Plugins, находим и устанавливаем Upsource Integration:
Кликаем Test Connection — перенаправит в браузер, на страницу авторизации:
Готово.













