Atlassian JIRA on AWS EC2 /w SSL (AWS 에 JIRA 설치하기)
Atlassian 의 JIRA 는 개발을 위한 버그 트래킹 시스템에서 시작, 지금은 이슈트래킹 뿐만 아니라 전반적 프로젝트 관리가 가능한 툴이다. 유사한(?) 제품으로 트릴로가 있지만, 개인적으로 JIRA + Confluence는 업무 처리 능력 향상에 가장 우수하다 생각된다. (트릴로는 하나의 팀 프로젝트 단위에 맞는 느낌?) 설치를 논하기 전 지인들로 부터 들었던 공통적 궁금점. 바로 ‘JIRA Software / Core’의 차이였다. 그 차이는 다음과 같다.
- JIRA Software : JIRA + JIRA Agile
- JIRA CORE : JIRA only without JIRA Agile
- JIRA Service Desk: JIRA Service Desk (no changes)
왠만해선 JIRA Software 가 낫다. Agile 때문. 이 JIRA Software(이하 JIRA) 를 Amazon Web Service 에 설치해 보자.
JIRA 는Atlassian Cloud 혹은 직접 서버에서 운영하는 두 가지 형태로 서비스 사용 가능하다. Atlassian Cloud 에서의 서비스는 설치의 불편함을 최소화 하고 비용 또한 크게 절감할 수 있는 장점이 있다. 도메인-A Record 만 연결하면 ‘내 서비스’처럼 운영할 수 있기 때문에 좋은 선택이 될 수 있다. 하지만, Atlassian Cloud 는 한국에서 답답할 정도로 느리고, 커스터마이징에 제약이 따른다. 좀더 원활한 사용 목적에선 후자가 재격. 그래서 현재 사용중인 Amazon Web Service 에 JIRA 를 설치하기로 결정했다.
인프라 설계
Atlassian 에 문의한 결과 적은 수의 사용자를 위한 별도의 HA 구성은 없다고 한다. 좀더 자세한 내용을 확인 해 보면 Datacenter 버전을 구입해야 Clustering 구현이 가능했다. 하지만 이 제품은 Atlassian 홈페이지에서도 가격을 확인할 수 없었다(!!) 이와 더불어 사용량이 많지 않다면 별도의 Reverse Proxy 를 설치할 필요도 없다고 한다. 그 결과 매우 일반적인 웹서비스 형태로 설계가 이루어졌다.
- EC2 Instance 와 RDS 는 Private Subnet 에 위치힌다.
- 개발자는 관리트래픽(VPN)을 통해 접근한다.
- AWS NAT 를 사용함해 외부 인터넷으로 접근한다.
- 사용자 트래픽은 External ELB 에서만 받아들인다.
AWS 사용자(업체)는 Free-tier 를 최대한 활용하기 원할 것이다. 안타깝게도 Atlassian 의 2형제. JIRA 와 Confluence 는 결코 가벼운 아이들이 아니다. 적지 않은 리소스를 사용한다. Atlassian 의 말(링크)에 따르면 극소수의 사용자가 아니라면 t2.micro 등 보다는 m3/c3 이상을 추천하고 있다. 사용자가 없을 때 CPU 사용량은 크지 않을 것이기 때문에 JIRA 를 설치 한 다음 메모리 사용량을 검토했다
ubuntu@ip-10-40-101-55-jira:~$ ps -C java -o user,pid,pcpu,pmem,size,vsize,cmd USER PID %CPU %MEM SIZE VSZ CMD jira 6881 0.2 18.9 3661752 3757760 /opt/atlassian/jira/jre//bin/java -Djav
그 결과 3,575MB 의 메모리를 사용하고 있음을 확인했다. 즉, 약 700MB 의 메모리를 제공하는 t2.micro 에서는 가상 메모리를 사용하면 동작에는 문제는 없겠지만 원활한 사용이 어려울 것으로 보인다. 그래서 메모리 확보가 가능한 m4.large 와 더불어 RDS 에서는 m3.large를 선택했다.
- EC2 : m4.large + EBS 100G (UBuntu 14.04 LTS)
- RDS : m3.large (MySQL 5.6.27)
모델 | vCPU | 메모리(GiB) | SSD 스토리지(GB) | 전용 EBS 대역폭(Mbps) |
m4.large | 2 | 8 | EBS 전용 | 450 |
여기서 고려해야 할 것은 Storage 인데, JIRA 는 지속적으로 첨부 파일 등을 등록한다는 것을 고려해야 하며, 때문에 100GB의 EBS를 선택했다. 참고로 RDS 를 m3.large를 선택한 이유는 추후 Confluence 를 함께 사용할 것이기 때문에 너무 낮은 RDS 의 선택은 무리라 판단했다. 만약 JIRA 만 사용한다면 RDS 는 좀더 낮은 사양을 선택 해도 무방하다.
JIRA 설치 (UBuntu 14.04 LTS 기준)
1. EC2 Update
EC2 의 컨디션을 최신 상태로 업데이트 하자. 새로운 EC2를 생성했다면 꼭!
sudo apt-get update sudo apt-get upgrade
이후 리부팅은 필수.
2. JDK 설치
JIRA 는 JAVA 환경에서 동작한다. 6 이상의 JDK 만 있으면 동작하는데 전혀 지장 없다. 현 시점에서 9버전 이상이 나와 있지만 기본 Repo에서 설치 가능한 최근 버전인 openjdk-7 을 설치하자.
sudo apt-get install openjdk-7-jre-headless
3. JIRA Download
JIRA 의 현행화 버전을 받는다. URL 은 https://ko.atlassian.com/software/jira/download 에서 얻을 수 있다. 앞서 언급한 바와 같이 Core 말고 Software 버전을 받자. Scrum Board등의 유용한 기능등을 사용할 수 있기 때문.
sudo mkdir /opt/download cd /opt/download sudo wget https://www.atlassian.com/software/jira/downloads/binary/atlassian-jira-software-7.1.8-jira-7.1.8-x64.bin sudo chmod +x ./atlassian-jira-software-7.1.8-jira-7.1.8-x64.bin sudo ./atlassian-jira-software-7.1.8-jira-7.1.8-x64.bin
실행 권한을 부여하고, bin 을 실행하면 shell 모드에서 설치가 시작된다. Express Install 을 선택하고 나머지를 모두 Y 버튼을 연타하면 설치가 종료된다. 설치 경로는 /opt/atlassian/jira/ 이며, http://localhost:8080 으로 접속 하면 JIRA 의 환경 설정 모습을 확인할 수 있다.
4. MySQL Connector-J Download
MySQL 을 DB로 사용할 예정이지만, JIRA 에는 MySQL Driver 가 따로 존재하지 않는다. 때문에 MySQL Connector-J 가 필요한데 https://dev.mysql.com/downloads/connector/j/ 에서 가장 최근 버전을 받자.
sudo wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.39.tar.gz sudo tar xvfz ./mysql-connector-java-5.1.39.tar.gz sudo cp ./mysql-connector-java-5.1.39/mysql-connector-java-5.1.39-bin.jar /opt/atlassian/jira/lib/
압축을 풀고 Atlassian JIRA 의 lib 폴더에 Connector-J 를 복사하면 이제 JIRA 는 MySQL 과 통신할 준비가 끝났다.
5. MySQL Parameter Group 수정
기본적으로 JIRA 는 UTF-8을 사용한다. RDS 생성 후 DB 를 UTF-8 로 변경해도 Client 는 기본 설정인 latin으로 되어 있을 것이다. Initial Command 등으로 변경하는건 비추천. Parameter Groups 를 수정하자.
아래 부분을 모두 UTF-8 로 변경하자.
별도의 Parameter Group을 만드는 것을 추천. 나중에 Confluence 에서도 사용하면 되기 때문이다. 이제 JIRA 를 위한 사용자를 생성하자.
mysql> CREATE USER 'jirauser'@'localhost' IDENTIFIED BY '<ChangeThisPassword>'; mysql> CREATE DATABASE jiradb CHARACTER SET utf8 COLLATE utf8_bin; Query OK, 1 row affected (0.02 sec) mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,INDEX on jiradb.* TO 'jirauser'@'localhost' IDENTIFIED BY 'mypassword'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> quit
User Name 과 Password 는 정책에 맞게 생성하면 된다.
6. ELB 와 JIRA EC2 연결
앞선 설계에 따라 JIRA 가 설치된 EC2 Instance 는 Private Subnet 에 설치되어 있어 외부 사용자가 이 인스턴스에 접근할 수 없다. 때문에 ELB 와 연결해주자.
8080 포트는 JIRA 의 기본 포트. 이제 HTTPS 로 접근이 가능하게 됐다. https://your.host.name 에 접속하면 JIRA 의 Welcome 화면과 함께 DB 설정, 라이선스 입력 창을 만나게 된다. (라이선스는 Atlassian 페이지에서 30일 무제한 라이센스를 받을 수 있다) 그럼 기본적인 설치는 끝. 이 단계 까지 약 30분도 안되서 끝낼 수 있다.
7. 보조 환경 설정
JIRA 가 Self call 을 했을 때의 Protocol(HTTP)와 Port(8080)과 ELB 에서 넘어오는 데이터가 달라 URL 에 대한 이슈가 발생한다. ELB 를 Proxy 라 감안하고 이에 대한 설정을 변경해 주자. 본인은 보안을 위해 반드시 HTTPS 를 통해서만 JIRA 를 사용할 수 있게 정책을 세웠다.
이 절차는 매우 중요하다. JIRA 가 동작하는 것 처럼 보이지만 정상 동작 하지 않기 때문. 특히 Widget 의 타이틀 영역이 __MSG.TTITLE_ 등과 같은 문제를 피할 수 있을 뿐만 아니라, 내부 이미지의 경로를 올바르게 지정해 주는 역할을 하기 때문이다.
- /opt/atlassian/jira/conf/server.xml 의 수정
scheme ~ proxyPort 까지 내용을 추가해야 한다. - SSL Add-on 설치
별도의 복잡한 설정 없이 SSL 설정을 JIRA 에 반영할 수 있는 Add-on. 주의할 것은 3번으로 넘어가기전 본인의 SSL 인증서 crt 파일을 UBuntu 에 등록하고 반영해야만 한다 - SSL Add-on 설정
Save certificates 를 누르면 생성된 인증서를 복사하라는 내용이 나올 텐데 다음 커맨드는 누구나 동일하다.sudo cp /var/atlassian/application-data/jira/cacerts /opt/atlassian/jira/jre/lib/security/cacerts
SSH 로 접속해 처리 함으로써 끝.
모든 설치가 완료됐다. DB Parameter Group 설정과 더불어 SSL 환경 반영까지 적잖게 고생했다. Google 에서 검색해 보니 나와 같은 경험자들이 상당히 많았는데, 안타깝게도 AWS 환경에 대한 설명은 쉽게 찾기 어려웠다. 하지만 이대로 한다면 JIRA 설치에서 서비스 까지 한번에 끝! 다음엔 Confluence 설치 및 JIRA/Confluence 연동에 대해 알아보자.