JIRA: ручная установка на Debian

Автор: | 04/25/2016
 

jira_logoУстановка JIRA 7.1.4 на Debian 8 Jessie в Vagrant-бокс.

  • Подготовка Vagrant бокса и ОС
  • Установка MySQL/MariaDB
  • Установка Java
  • Установка и настройка JIRA
  • Установка и настройка NGINX
  • Завершение установки

Подготовка Vagrant бокса и ОС

Создаем машину:

$ vagrant init debian/jessie64

Редактируем файл Vagrantfile, настраиваем сеть и добавляем памяти:

...
config.vm.network "public_network"
...
config.vm.provider "virtualbox" do |vb|
  vb.memory = "2048"
end
...

Запускаем:

$ vagrant up
...
==> default: Available bridged network interfaces:
1) eth0
2) wlan0
==> default: When choosing an interface, it is usually the one that is
==> default: being used to connect to the internet.
    default: Which interface should the network bridge to? 1
...

Подключаемся:

$ vagrant ssh

Обновляем установленные пакеты:

# apt-get update
# apt-get upgrade

Создаем пользователя, под которым будет работать JIRA:

# useradd --create-home jira

Установка MySQL/MariaDB

Я предпочитаю использовать MariaDB, но в установка одинакова.

Находим пакет:

# apt-cache search mariadb-server
...
mariadb-server - MariaDB database server (metapackage depending on the latest version)
...

Аналогично для MySQL:

# apt-cache search mysql-server
...
mysql-server - MySQL database server (metapackage depending on the latest version)

Устанавливаем:

# apt-get install mariadb-server

или:

# apt-get install mysql-server

Вне зависимости MySQL или MariaDB — выполняем последние шаги для настройки:

# mysql_secure_installation

Создаем базу:

# mysql -u root -p
MariaDB [(none)]> create database jiradb character set utf8;

Пользователя:

MariaDB [(none)]> create user 'jira'@'localhost' identified by 'p@ssw0rd';

Открываем доступ пользователю к базе:

MariaDB [(none)]> grant all on jiradb.* to 'jira'@'localhost';

Проверяем:

# mysql -u jira -pp@ssw0rd -e "show databases"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| jiradb             |
+--------------------+

Выходим из консоли MariaDB:

MariaDB [(none)]> quit
Bye

Создаем бекап файла конфигурации MySQL/MariaDB:

# cp /etc/mysql/my.cnf /etc/mysql/my.cnf.origin

Редактируем его и в блоке [mysqld] устанавливаем SQL_MODE:

...
sql_mode = NO_AUTO_VALUE_ON_ZERO
...

Перезапускаем MariaDB и проверяем:

# systemctl restart mysql
# mysql -u root -pp@ssw0rd -e "show variables like 'sql_mode'"
+---------------+-----------------------+
| Variable_name | Value                 |
+---------------+-----------------------+
| sql_mode      | NO_AUTO_VALUE_ON_ZERO |
+---------------+-----------------------+

Установка Java

Добавляем репозитории:

# echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | tee /etc/apt/sources.list.d/webupd8team-java.list
deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main
# echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | tee -a /etc/apt/sources.list.d/webupd8team-java.list
deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main
# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886
# apt-get update && apt-get install oracle-java8-installer

Проверяем:

# java -version
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)

Установка и настройка JIRA

Устанавливать будем из tar-архива, который можно найти на странице загрузок Atlassian:

jira_linux_installation_3

Создаем каталог, в который установим JIRA и каталог для JIRA_HOME:

# mkdir -p /opt/atlassian/jira
# mkdir -p /var/atlassian/application-data/jira
# chown jira:jira /opt/atlassian/jira/
# chown jira:jira /var/atlassian/application-data/jira

Переключаемся на пользователя jira:

# su - jira
$ 

Загружаем архив:

$ cd /tmp/
$ wget https://www.atlassian.com/software/jira/downloads/binary/atlassian-jira-software-7.1.4-jira-7.1.4.tar.gz

Распаковывавем:

$ tar xfp atlassian-jira-software-7.1.4-jira-7.1.4.tar.gz

Содержимое:

$ ls -l
total 234996
-rw-r--r--  1 jira jira 240631698 Apr  6 02:52 atlassian-jira-software-7.1.4-jira-7.1.4.tar.gz
drwxr-xr-x 13 jira jira      4096 Apr  6 02:44 atlassian-jira-software-7.1.4-standalone
$ ls -l atlassian-jira-software-7.1.4-standalone/
total 108
drwxr-xr-x 17 jira jira  4096 Apr 24 13:21 atlassian-jira
drwxr-xr-x  3 jira jira  4096 Apr 24 13:21 bin
drwxr-xr-x  2 jira jira  4096 Apr 24 13:21 conf
drwxr-xr-x  2 jira jira  4096 Apr 24 13:21 external-source
drwxr-xr-x  2 jira jira  4096 Apr 24 13:21 lib
drwxr-xr-x  2 jira jira 57344 Apr 24 13:21 licenses
drwxr-xr-x  2 jira jira  4096 Jan  9  2015 logs
-rw-r--r--  1 jira jira  1442 Jan  9  2015 NOTICE
-rw-r--r--  1 jira jira  3813 Apr  6 02:44 README.html
-rw-r--r--  1 jira jira  2064 Apr  6 02:44 README.txt
drwxr-xr-x  2 jira jira  4096 Apr 24 13:21 temp
drwxr-xr-x  2 jira jira  4096 Apr 24 13:21 tomcat-docs
drwxr-xr-x  2 jira jira  4096 Jan  9  2015 webapps
drwxr-xr-x  2 jira jira  4096 Jan  9  2015 work

Перемещаем все в /opt/atlassian/jira:

$ cp -r atlassian-jira-software-7.1.4-standalone/* /opt/atlassian/jira/
$ ls -l /opt/atlassian/jira/
total 108
drwxr-xr-x 17 jira jira  4096 Apr 24 13:25 atlassian-jira
drwxr-xr-x  3 jira jira  4096 Apr 24 13:25 bin
drwxr-xr-x  2 jira jira  4096 Apr 24 13:25 conf
drwxr-xr-x  2 jira jira  4096 Apr 24 13:25 external-source
drwxr-xr-x  2 jira jira  4096 Apr 24 13:25 lib
drwxr-xr-x  2 jira jira 57344 Apr 24 13:25 licenses
drwxr-xr-x  2 jira jira  4096 Apr 24 13:25 logs
-rw-r--r--  1 jira jira  1442 Apr 24 13:25 NOTICE
-rw-r--r--  1 jira jira  3813 Apr 24 13:25 README.html
-rw-r--r--  1 jira jira  2064 Apr 24 13:25 README.txt
drwxr-xr-x  2 jira jira  4096 Apr 24 13:25 temp
drwxr-xr-x  2 jira jira  4096 Apr 24 13:25 tomcat-docs
drwxr-xr-x  2 jira jira  4096 Apr 24 13:25 webapps
drwxr-xr-x  2 jira jira  4096 Apr 24 13:25 work

Редактируем файл /opt/atlassian/jira/atlassian-jira/WEB-INF/classes/jira-application.properties, в котором указываем параметр jira.home, например:

jira.home = /var/atlassian/application-data/jira

Можно проверять.

Запускаем:

$ cd /opt/atlassian/jira/
$ ./bin/start-jira.sh 

To run JIRA in the foreground, start the server with start-jira.sh -fg
executing as current user
                .....
          .... .NMMMD.  ...
        .8MMM.  $MMN,..~MMMO.
        .?MMM.         .MMM?.

     OMMMMZ.           .,NMMMN~
     .IMMMMMM. .NMMMN. .MMMMMN,
       ,MMMMMM$..3MD..ZMMMMMM.
        =NMMMMMM,. .,MMMMMMD.
         .MMMMMMMM8MMMMMMM,
           .ONMMMMMMMMMMZ.
             ,NMMMMMMM8.
            .:,.$MMMMMMM
          .IMMMM..NMMMMMD.
         .8MMMMM:  :NMMMMN.
         .MMMMMM.   .MMMMM~.
         .MMMMMN    .MMMMM?.

      Atlassian JIRA
      Version : 7.1.4
                  

If you encounter issues starting or stopping JIRA, please see the Troubleshooting guide at http://confluence.atlassian.com/display/JIRA/Installation+Troubleshooting+Guide


Server startup logs are located in /opt/atlassian/jira/logs/catalina.out
Using CATALINA_BASE:   /opt/atlassian/jira
Using CATALINA_HOME:   /opt/atlassian/jira
Using CATALINA_TMPDIR: /opt/atlassian/jira/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /opt/atlassian/jira/bin/bootstrap.jar:/opt/atlassian/jira/bin/tomcat-juli.jar
Using CATALINA_PID:    /opt/atlassian/jira/work/catalina.pid
Tomcat started.

Т.к. машина в Vagrant-е — то получаем её IP:

# ip a s eth1 | grep inet
    inet 192.168.1.114/24 brd 192.168.1.255 scope global eth1
    inet6 fe80::a00:27ff:fe53:ec62/64 scope link

И проверяем, перейдя на http://192.168.1.114:8080:

jira_linux_installation_1

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

Находим последнюю версию mysql-connector-java на странице загрузок MySQL и загружаем ее:

$ cd /tmp
$ wget http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.38.tar.gz

Распаковываем:

$ tar xfp mysql-connector-java-5.1.38.tar.gz

И копируем файл драйвера в каталог /opt/atlassian/jira/lib/:

$ cp mysql-connector-java-5.1.38/mysql-connector-java-5.1.38-bin.jar /opt/atlassian/jira/lib

Проверяем:

$ file /opt/atlassian/jira/lib/mysql-connector-java-5.1.38-bin.jar 
/opt/atlassian/jira/lib/mysql-connector-java-5.1.38-bin.jar: Java archive data (JAR)

Перезапускаем JIRA:

$ /opt/atlassian/jira/bin/stop-jira.sh
$ /opt/atlassian/jira/bin/start-jira.sh

Продолжаем установку — выбираем «I’ll set it up myself» и жмем Next.

Выбираем базу — My own и настраиваем подключение:

jira_linux_installation_2

Жмем Next, и ожидаем завершения установки — «Please wait while the database is set up. This may take a minute…«.

Пока можно посмотреть — какие таблицы использует JIRA:

MariaDB [jiradb]> show tables;
+--------------------------------+
| Tables_in_jiradb               |
+--------------------------------+
| JQUARTZ_BLOB_TRIGGERS          |
| JQUARTZ_CALENDARS              |
| JQUARTZ_CRON_TRIGGERS          |
...
| workflowscheme                 |
| workflowschemeentity           |
| worklog                        |
+--------------------------------+
167 rows in set (0.00 sec)
MariaDB [jiradb]> desc userbase;
+---------------+---------------+------+-----+---------+-------+
| Field         | Type          | Null | Key | Default | Extra |
+---------------+---------------+------+-----+---------+-------+
| ID            | decimal(18,0) | NO   | PRI | NULL    |       |
| username      | varchar(255)  | YES  | MUL | NULL    |       |
| PASSWORD_HASH | varchar(255)  | YES  |     | NULL    |       |
+---------------+---------------+------+-----+---------+-------+

Установка завершена:

jira_linux_installation_4

Жмем Next и переходим на страницу ввода лицензии.

Внизу кликаем на Generate key:

jira_linux_installation_5

После окончания проверки лицензии — попадаем на следующую страницу, и создаем администратора:

jira_linux_installation_6

Далее — можно сразу настроить SMTP для отправки сообщений:

jira_linux_installation_7

Последний шаг — выбор языка:

jira_linux_installation_8

Установка и настройка NGINX

NGINX будет работать фронтендом и проксировать трафик к Tomcat, под которым работает JIRA.

Устанавливаем NGINX:

# apt-get install nginx

Создаем файл настроек для JIRA, например — /etc/nginx/sites-available/jira.home.net:

server {

    server_name jira.home.net;

    access_log /var/log/nginx/jira.home.net-access.log;
    error_log /var/log/nginx/jira.home.net-error.log;

    root /var/www/html;

    location / {
        proxy_paddss http://localhost:8080;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Подключаем его:

# ln -s /etc/nginx/sites-available/jira.home.net /etc/nginx/sites-enabled/

Проверяем:

# ls -l /etc/nginx/sites-enabled/
total 0
lrwxrwxrwx 1 root root 34 Apr 24 14:30 default -> /etc/nginx/sites-available/default
lrwxrwxrwx 1 root root 40 Apr 24 14:44 jira.home.net -> /etc/nginx/sites-available/jira.home.net

Проверяем:

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезагружаем:

# service nginx reload

И пробуем:

jira_linux_installation_9

Завершение установки

JIRA ругается на:

«com.atlassian.gadgets.dashboard.internal.diagnostics.UrlHostnameMismatchException: Detected URL hostname, ‘127.0.0.1’, does not match expected hostname, ‘jira.home.net'»

jira_linux_installation_10

Подобная проблема с Tomcat встречается часто, при использовании прокси-сервера.

Много гуглил, но нашел только одно решение.

Редактируем файл /opt/atlassian/jira/conf/server.xml, и добавляем proxyName и proxyPort для Connector port="8080":

...
    <Service name="Catalina">

        <Connector port="8080"

                   maxThreads="150"
                   minSpareThreads="25"
                   connectionTimeout="20000"

                   enableLookups="false"
                   maxHttpHeaderSize="8192"
                   protocol="HTTP/1.1"
                   useBodyEncodingForURI="true"
                   redirectPort="8443"
                   acceptCount="100"
                   disableUploadTimeout="true"
                   proxyName="jira.home.net"        
                   proxyPort="80" />
...

И перезапускаем JIRA:

# /opt/atlassian/jira/bin/stop-jira.sh
# su - jira -c '/opt/atlassian/jira/bin/start-jira.sh'

Последний шаг — добавить unit-файл для управления JIRA через systemd. Надо было это раньше сделать 🙂

Создаем файл /etc/systemd/system/jira.service:

[Unit]
Description=JIRA Service
After=network.target iptables.service firewalld.service firewalld.service httpd.service

[Service]
Type=forking
User=jira
ExecStart=/opt/atlassian/jira/bin/start-jira.sh
ExecStop=/opt/atlassian/jira/bin/stop-jira.sh
ExecReload=/opt/atlassian/jira/bin/stop-jira.sh | sleep 60 | /opt/atlassian/jira/bin/start-jira.sh

[Install]

WantedBy=multi-user.target

Перезапускаем systemd:

# systemctl daemon-reload

И пробуем:

# service jira status
● jira.service - JIRA Service
   Loaded: loaded (/etc/systemd/system/jira.service; disabled)
   Active: inactive (dead)
#  service jira stop
# service jira start

# service jira status
● jira.service - JIRA Service
   Loaded: loaded (/etc/systemd/system/jira.service; disabled)
   Active: active (running) since Sun 2016-04-24 15:46:42 GMT; 1s ago
  Process: 9071 ExecStart=/opt/atlassian/jira/bin/start-jira.sh (code=exited, status=0/SUCCESS)
 Main PID: 9100 (java)
   CGroup: /system.slice/jira.service
           └─9100 /usr/bin/java -Djava.util.logging.config.file=/opt/atlassian/jira/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms384m -Xmx768m -Djava.awt.headless=true -Datlassian.stand...

Apr 24 15:46:42 debian-jessie start-jira.sh[9071]: .:,.$MMMMMMM
Apr 24 15:46:42 debian-jessie start-jira.sh[9071]: .IMMMM..NMMMMMD.
Apr 24 15:46:42 debian-jessie start-jira.sh[9071]: .8MMMMM:  :NMMMMN.
Apr 24 15:46:42 debian-jessie start-jira.sh[9071]: .MMMMMM.   .MMMMM~.
Apr 24 15:46:42 debian-jessie start-jira.sh[9071]: .MMMMMN    .MMMMM?.
Apr 24 15:46:42 debian-jessie start-jira.sh[9071]: Atlassian JIRA
Apr 24 15:46:42 debian-jessie start-jira.sh[9071]: Version : 7.1.4
Apr 24 15:46:42 debian-jessie start-jira.sh[9071]: If you encounter issues starting or stopping JIRA, please see the Troubleshooting guide at http://confluence.atlassian.com/display/JIRA/Installation+Troubleshooting+Guide
Apr 24 15:46:42 debian-jessie start-jira.sh[9071]: Server startup logs are located in /opt/atlassian/jira/logs/catalina.out
Apr 24 15:46:42 debian-jessie start-jira.sh[9071]: Tomcat started.

Для init можно создать скрипт /etc/init.d/jira с таким содержимым:

#!/usr/bin/env bash

# Name of the user to run as
USER=jira
# Location of application's bin directory
BASE=/opt/atlassian/jira

case "$1" in
  # Start command
  start)
    echo "Starting Jira"
    /bin/su -m $USER -c "$BASE/bin/start-jira.sh &> /dev/null"
    ;;
  # Stop command
  stop)
    echo "Stopping Jira"
    /bin/su -m $USER -c "$BASE/bin/stop-jira.sh &> /dev/null"
    echo "Jira stopped successfully"
    ;;
   # Restart command
   restart)
        $0 stop
        sleep 25
        $0 start
        ;;
  *)
    echo "Usage: /etc/init.d/jira {start|restart|stop}"
    exit 1
    ;;
esac

exit 0

Устанавливаем права на выполнение:

# chmod +x /etc/init.d/jira

init-скрипт не проверял.