Docker-Compose 를 이용하여 Yona 사용하기

21세기 협업 개발 플랫폼인 :: Yona-Project 를 누구나 손쉽게 하기 위해 개인적으로 만듦

2022년 NHN Cloud 무료 교육일정 : https://doc.skill.or.kr/2022-NHN-Cloud-Education

2022년 NHN Cloud 행사/프로모션 정보 공유 : https://doc.skill.or.kr/2022-NHN-Cloud-Event-Promotion

1. Yona Project 란 무엇인가?

Yona 는 21세기 협업 개발 플랫폼입니다.

  • Git 저장소 기능이 내장된 설치형 이슈트래커

  • Naver, Naver Labs 를 비롯하여 게임회사, 통신회사 고객센터, 공공기관, 투자사, 학교, 기업등에서 수년 간 실제로 사용되어 왔고 개선되어 온(Real world battled) 애플리케이션입니다.

자세한 사항은 Yona-Project 에서 확인 하시기 바랍니다.

2. Yona 의 주요기능은?

  • 서비스 종료나 데이터 종속 걱정없는 설치형

  • 프로젝트 기반의 유연한 이슈트래커와 게시판

    • 편리한 프로젝트간 이슈 이동

    • 서브 태스크 이슈

    • 본문 변경이력 보기

    • 이슈 템플릿 기능

  • 자체 내장된 코드 저장소

    • Git/SVN 선택 가능

    • 온라인 수정 및 커밋 지원

    • 프로젝트 멤버만 코드에 접근 가능 기능 등

  • 블럭기반 코드리뷰

    • 코드 블럭 및 리뷰 스레드 지원

    • 리뷰 점수 지원

  • 그룹 기능

    • 그룹 이슈 및 게시글 통합관리

    • 그룹 프로젝트, 그룹 멤버

  • 한글 기반

    • 프로젝트 이름 및 그룹 이름에 한글을 사용가능

  • LDAP 지원

    • LDAP 장애시에도 사용가능한 기능 제공

  • 다른 제품이나 서비스로의 마이그레이션 기능 제공

    • Github/Github Enterprise, 또 다른 Yona 인스턴스, Redmine 등

  • 로그인 관련 보안을 높일 수 있는 소셜로그인 지원

자세한 사항은 Yona-Project 에서 확인 하시기 바랍니다.

3. Yona 의 라이센스는?

Yona는 Apache 2.0 라이선스로 제공됩니다.

자세한 사항은 Yona-Project 에서 확인 하시기 바랍니다.

4. dockerfile을 이용하여 만들어 보자!!!

4.1 서비스 설계 구성

구성

설명

Docker Hub Base Image

mariadb:10.3

Source

Install Files

Service Port

9000

4.2 파일 구성

메인 폴더

파일

설명

yona-project

dockerfile

dockerfile 설정 파일

docker-compose.yml

docker-compose 실행 파일

my.cnf

mariadb 의 my.cnf 설정 파일

db_user.sql

DB User 사용자 생성 및 권한 설정 비밀번호 변경이 필요 함.

/yona/conf/application.conf 파일의 maraidb 접속 ID/Password 를 수정

DB User 비밀번호 변경 시 아래의 값을 수정 하여야 합니다.

application.con 파일은 yona 를 처음 실행 해야 파일이 생성 됩니다.

경로 /yona/conf/application.conf 파일

/yona/conf/application.conf
...
db.default.driver=org.mariadb.jdbc.Driver
db.default.url="jdbc:mariadb://127.0.0.1:3306/yona?useServerPrepStmts=true"
db.default.user=yona
db.default.password="yonadan"
...

4.3 DockerFile 을 이용하여 Docker Images 만들기

dockerfile
### Base Image 지정
FROM mariadb:10.3

### TimeZone 환경 변수 지정
ENV TZ Asia/Seoul

### Mariadb root 비밀번호 설정
ENV MYSQL_ROOT_PASSWORD=root

### TimeZone 설정   
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

### 업데이트    
RUN apt update && apt -y install git vim wget openjdk-8-jdk unzip

### yona 및 mysql 설정파일   
RUN mkdir /yona-data
COPY my.cnf /etc/mysql/my.cnf

### yona 설치 파일 다운로드 및 압축 해제   
RUN wget https://github.com/yona-projects/yona/releases/download/v1.4.0/yona-v1.4.0-bin.zip
RUN unzip yona-v1.4.0-bin.zip
RUN mv yona-1.4.0 yona

### DB User 생성 및 권한 설정
ADD db_user.sql /docker-entrypoint-initdb.d/db_user.sql

WORKDIR /yona

EXPOSE 9000

4.4 DockerFile Build 하기

dockerfile 을 build 하여 docker image 만들기
$ docker build -t tomcat_mariadb:yona-v.1.4.0 .
[+] Building 0.2s (15/15) FINISHED
 => [internal] load build definition from Dockerfile                                                                      0.0s
 => => transferring dockerfile: 552B                                                                                      0.0s
 => [internal] load .dockerignore                                                                                         0.0s
 => => transferring context: 2B                                                                                           0.0s
 => [internal] load metadata for docker.io/library/mariadb:10.3                                                           0.0s
 => [ 1/10] FROM docker.io/library/mariadb:10.3                                                                           0.0s
 => [internal] load build context                                                                                         0.0s
 => => transferring context: 59B                                                                                          0.0s
 => CACHED [ 2/10] RUN ln -snf /usr/share/zoneinfo/Asia/Seoul /etc/localtime && echo Asia/Seoul > /etc/timezone           0.0s
 => CACHED [ 3/10] RUN apt update && apt -y install git vim wget openjdk-8-jdk unzip                                      0.0s
 => CACHED [ 4/10] RUN mkdir /yona-data                                                                                   0.0s
 => CACHED [ 5/10] COPY my.cnf /etc/mysql/my.cnf                                                                          0.0s
 => CACHED [ 6/10] RUN wget https://github.com/yona-projects/yona/releases/download/v1.4.0/yona-v1.4.0-bin.zip            0.0s
 => CACHED [ 7/10] RUN unzip yona-v1.4.0-bin.zip                                                                          0.0s
 => CACHED [ 8/10] RUN mv yona-1.4.0 yona                                                                                 0.0s
 => CACHED [ 9/10] ADD db_user.sql /docker-entrypoint-initdb.d/db_user.sql                                                0.0s
 => CACHED [10/10] WORKDIR /yona                                                                                          0.0s
 => exporting to image                                                                                                    0.1s
 => => exporting layers                                                                                                   0.0s
 => => writing image sha256:66a6be3fde0d4a31fdbe18a57a2283e75cb858f16e3edf929295ae141d220c80                              0.0s
 => => naming to docker.io/library/tomcat_mariadb:yona-v.1.4.0                                                                      0.0s
Authenticating with existing credentials...
Login Succeeded

4.5 Build Image 를 이용하여 실행 해 보기

### Local docker images 검색   
$ docker images | findstr yona
bchwang/tomcat_mariadb                          yona-v.1.4.0          66a6be3fde0d   16 hours ago    1.24GB

### docker 실행하기 
$ docker run -d -p 80:900 tomcat_mariadb:yona-v.1.4.0
3d3811e3e7635545f0875e28f15cf79e128855b9c07ed07e0d59f8cd73bd58e3

### 실행된 docker 확인 
$ docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED                  STATUS         PORTS                                             NAMES
3d3811e3e763   yona-project:yona   "docker-entrypoint.s…"   Less than a second ago   Up 3 seconds   3306/tcp, 0.0.0.0:80->9000/tcp, :::80->9000/tcp   determined_moore

### 실행된 Container 에 접속 하기     
$ docker exec -it 3d3811e3e763 /bin/bash
root@3d3811e3e763:/yona/bin# ls
yona  yona.bat

### 실행된 Container 에 접속 하여 yona 실행 하기       
root@3d3811e3e763:/yona/bin# ./yona     ## ./yona & [백그라운드 실행]
Play server process ID is 213
[info] play - database [default] connected at jdbc:mysql://127.0.0.1:3306/yona
[info] play - Starting application default Akka system.
[debug] application - Registered AuthProvider 'google'
[debug] application - Registered AuthProvider 'github'
[info] play - Application started (Prod)
[info] application - User uploaded temporary files are cleaned up...(0 of 0)
[info] play - Listening for HTTP on /0.0.0.0:9000

5. Docker Hub 에 이미지 업로드

5.1 Docker push 를 이용하여 업로드

docker push 를 이용하여 업로드
### docker image tag 설정 
$ docker tag tomcat_mariadb:yona-v.1.4.0 bchwang/tomcat_mariadb:yona-v.1.4.0

### docker push 를 이용하여 업로드    
$ docker push bchwang/tomcat_mariadb:yona-v.1.4.0
The push refers to repository [docker.io/bchwang/tomcat_mariadb]
5f70bf18a086: Layer already exists
6921f1ef6bdd: Layer already exists
4679a8f17301: Pushed
b9bd63f53b44: Pushed
2834b665eb52: Pushed
e69d19316294: Layer already exists
3bff3ec352d8: Layer already exists
e9cf36b34289: Pushed
c4c2468cd25c: Layer already exists
791a7442f3ff: Layer already exists
19c8780ee26f: Layer already exists
4b9f2147a623: Layer already exists
337e89027ad2: Layer already exists
956b4f80a078: Layer already exists
df8b8ee18301: Layer already exists
7e50f83cc60c: Layer already exists
b98c96f5ae6b: Layer already exists
b699e149afa6: Layer already exists
0552d4cbc6e9: Layer already exists
a70daca533d0: Layer already exists
yona-v.1.4.0: digest: sha256:95eb1ac4fe0f6221aa008429cdd4e1da1003d364ad11695ad1feaa10f91e3564 size: 4504

5.2 Docker hub 에 접속 하여 업로드 된 이미지 확인

6. Yona-Project 실행 하기

6.1 Docker-Compose.yml 설정 하기

docker-compose.yml 파일
version: '3.1'

services:

  yona:
    image: bchwang/tomcat_mariadb:yona-v.1.4.0
    restart: always
    ports:
      - 80:9000

6.2 웹 접속 하여 Admin 설정 하기

크롬을 통해 웹사이트에 접속 하여 Admin 의 비밀번호를 설정 한 후 다시 한번 yona 를 재시작 하고 Admin 으로 로그인 하고 사용 하면 됩니다.

### docker-compose.yml 실행   
$ docker-compose up -d
Starting yona_redmine_1 ... done

### 실행된 docker 확인 
$ docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED                  STATUS         PORTS                                             NAMES
3d3811e3e763   yona-project:yona   "docker-entrypoint.s…"   Less than a second ago   Up 3 seconds   3306/tcp, 0.0.0.0:80->9000/tcp, :::80->9000/tcp   determined_moore

### 실행된 Container 에 접속 하기     
$ docker exec -it 3d3811e3e763 /bin/bash
root@3d3811e3e763:/yona/bin# ls
yona  yona.bat

### 초 yona 실행 하기       
root@3d3811e3e763:/yona/bin# ./yona     ## ./yona & [백그라운드 실행]
Play server process ID is 213
[info] play - database [default] connected at jdbc:mysql://127.0.0.1:3306/yona
[info] play - Starting application default Akka system.
[debug] application - Registered AuthProvider 'google'
[debug] application - Registered AuthProvider 'github'
[info] play - Application started (Prod)
[info] application - User uploaded temporary files are cleaned up...(0 of 0)
[info] play - Listening for HTTP on /0.0.0.0:9000

### Admin 비밀번호 번경 후 yona 재시작 하기    
root@3d3811e3e763:/yona/bin# ./yona     ## ./yona & [백그라운드 실행]
Play server process ID is 213
[info] play - database [default] connected at jdbc:mysql://127.0.0.1:3306/yona
[info] play - Starting application default Akka system.
[debug] application - Registered AuthProvider 'google'
[debug] application - Registered AuthProvider 'github'
[info] play - Application started (Prod)
[info] application - User uploaded temporary files are cleaned up...(0 of 0)
[info] play - Listening for HTTP on /0.0.0.0:9000

7. Yona-Project 에서 yona 설치 방법

Yona 는 다음과 같은 2단계로 설치를 진행 합니다.

7.1 MariaDB 설치

자세한 사항은 홈페이지를 참고 하시기 바랍니다. 바로가기

7.2 Yona 설치

자세한 사항은 홈페이지를 참고 하시기 바랍니다. 바로가기

8 . 그 밖의 사항(Yona 실행 및 업그레이드/백업 및 복구/문제 해결)

그 밖에 사항에 대해서는 홈페이지를 참고 하시기 바랍니다. 바로가기

2022년 NHN Cloud 무료 교육일정 : https://doc.skill.or.kr/2022-NHN-Cloud-Education

2022년 NHN Cloud 행사/프로모션 정보 공유 : https://doc.skill.or.kr/2022-NHN-Cloud-Event-Promotion

Last updated