본문으로 건너뛰기

2.2. 서비스 설치

2.2.1. Ingest 모듈 소스 코드 다운로드

  1. 아래 명령어를 실행하여 Ingest 모듈 Git 저장소 (링크)를 복제합니다.
# 홈 디렉토리로 이동
$ cd ~

# 시티데이터허브 데이터 수집 서비스 저장소 복제
$ git clone https://github.com/IoTKETI/citydatahub_data_ingest_module.git ingest
  1. Git 초기 설정
# 복제한 GIt 저장소 디렉토리로 이동
$ cd ingest

# linux 시스템에서\r\n 문제 부분처리
$ git config core.autocrlf input

# git에서 파일 모드 변경 추적 제외하기
$ git config core.filemode false

2.2.2. 데이터 수집 서비스 소스 코드 빌드

  1. Ingest 모듈 컨테이너 실행에 필요한 데이터 디렉토리 생성
# 로그 디렉토리 생성 (docker-compose 에서 공유할 호스트 로그 디렉토리)
$ mkdir ~/log-data

# DB 데이터 백업 디렉토리 생성(docker-compose 에서 공유할 호스트 백업 디렉토리)
$ mkdir ~/db-data
  1. postgres 컨테이너 데이터 접근에 필요한 사용자 권한 설정
  • postgres 컨테이너 생성시에 db-data 의 권한이 polkitd 로 생기는 문제 처리
    • 2.1.1.의 MAVEN_HOME 설정 시 수정했던 ~/.bash_profile 파일을 수정합니다.
  • [...]~/.bash_profile에 작성된 기존 내용을 의미하며 입력하지 않습니다.
[...]
export U_ID=$(id -u)
export G_ID=$(id -g)
  1. 변경 사항 적용
$ source ~/.bashrc
  1. Ingest 모듈 빌드
# 복제한 데이터 수집 모듈 디렉토리 이동
$ cd ~/ingest

# 소스 코드 빌드
$ mvn clean install
  1. Ingest 모듈 빌드 결과물 복사 복사
$ cp -f ingest-adapter/target/ingest-adapter-1.0.0.jar ingest-daemon/src/main/docker/agent/lib/
$ cp -f ingest-core/target/ingest-core-1.0.0.jar ingest-daemon/src/main/docker/agent/lib/

2.2.3. Docker Image 생성

아래 명령어를 통해 Apache Maven을 이용하여 Docker Image를 생성합니다.

  1. Ingest 모듈 Docker 빌드 스크립트 실행 권한 설정
$ cd ~/ingest

# docker build 스크립트 실행 권한 부여
$ chmod +x ingest-daemon/build.sh
$ chmod +x ingest-web/build.sh
  1. ingest-daemon Docker 이미지 만들기
# 디렉토리 이동
$ cd ~/ingest/ingest-daemon

# 데몬 이미지 만들기
$ mvn package docker:build
  1. ingest-web Docker 이미지 만들기
# 디렉토리 이동
$ cd ~/ingest/ingest-web

# 웹 UI 이미지 만들기
$ mvn package docker:build
  1. docker images 명령어를 실행하여 생성된 Docker Image를 확인합니다. 아래 그림과 유사한 형태로 생성됩니다.

docker_images

2.2.4. 데이터 수집 서비스 구동

2.2.4.1. 배포 환경 설정

아래는 ~/ingest/docker 디렉토리의 docker-compose.yml 파일의 전체 내용입니다. 배포 환경에 맞게 데이터 수집 서비스를 구성할 수 있습니다.

#docker-compose.yml 전체내용
version: "3"

services:
ingest-db:
container_name: ingest-db
image: postgis/postgis:11-2.5-alpine
hostname: ingest-db
user: "${U_ID}:${G_ID}"
environment:
- TZ=Asia/Seoul
- LC_COLLATE=C
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=pine1234
ports:
- 5432:5432
volumes:
- ~/db-data:/var/lib/postgresql/data:Z
- ./db/init.sql:/docker-entrypoint-initdb.d/init.sql
command: postgres -c 'max_connections=300'
restart: on-failure
healthcheck:
test: "exit 0"

ingest-daemon:
container_name: ingest-daemon
image: pinecni/ingest-daemon:latest
hostname: ingest-daemon
ports:
- 8888:8888
volumes:
- ~/log-data:/opt/logs:Z
environment:
- TZ=Asia/Seoul
- DATASOURCE_DRIVER=org.postgresql.Driver
- DATASOURCE_URL=jdbc:postgresql://ingest-db:5432/postgres
- DATASOURCE_ID=postgres
- DATASOURCE_PW=pine1234
- DATAMODEL_API_URL=http://10.0.0.36:8080/datamodels
- INGEST_INTERFACE_API_URL=http://10.0.0.25:8080/entityOperations/upsert?options=update
- LOG_LEVEL=info
depends_on:
ingest-db:
condition: service_healthy

ingest-web:
container_name: ingest-web
image: pinecni/ingest-web:latest
hostname: ingest-web
ports:
- 8080:8080
volumes:
- ~/log-data:/opt/logs:Z
environment:
- TZ=Asia/Seoul
- DATASOURCE_DRIVER=org.postgresql.Driver
- DATASOURCE_URL=jdbc:postgresql://ingest-db:5432/postgres
- DATASOURCE_ID=postgres
- DATASOURCE_PW=pine1234
- DAEMON_URL=http://ingest-daemon:8888
- DATAMODEL_API_URL=http://10.0.0.36:8080/datamodels
- INGEST_INTERFACE_API_USE_YN=Y
- INGEST_INTERFACE_API_URL=http://10.0.0.25:8080/entityOperations/upsert?options=update
- AUTH_YN=N
- AUTH_EXTERNAL_URL=http://203.253.128.181:30084
- AUTH_INTERNAL_URL=http://10.0.0.237:30000
- AUTH_CLIENT_ID=V43z0o2boLrXia0E5zn6
- AUTH_CLIENT_SECRET=YikQaYqOaHvIvOpGt42lfGvxAiJ4DsYY
- AUTH_REDIRECT_URL=http://localhost:8080/accesstoken
- EUREKA_ENABLED=false
- EUREKA_EUREKA_DEFAULT_ZONE=http://10.0.0.144:8888/eureka
- LOG_LEVEL=info
depends_on:
ingest-db:
condition: service_healthy
ingest-daemon:
condition: service_started

환경 설정 변수는 아래와 같습니다.

  • TZ : 타임존 설정 Asia/Seoul
  • LC_COLLATE : postgres 에서 한글정렬을 위해 세팅
  • user: "${U_ID}:${G_ID}" <- 2.2.2 의 .bashrc를 반드시 적용하셔야 합니다.
  • DATASOURCE_DRIVER : Database 에 접속하기 위한 driver 를 설정합니다.
  • DATASOURCE_URL : Database 에 접속하기 위한 jdbc URL 를 설정합니다.
  • DATASOURCE_ID : Database 에 접속하기 위한 ID 를 설정합니다.
  • DATASOURCE_PW : Database 에 접속하기 위한 PW 를 설정합니다.
  • DAEMON_URL : 데몬서버 주소를 설정합니다. 데몬서버는 관리UI 화면에서 아답터 제어를 하기 위한 서버입니다.
  • DATAMODEL_API_URL : City Data Hub 시스템의 데이터 모델의 스키마 서버의 주소를 설정합니다.
  • INGEST_INTERFACE_API_USE_YN : City Data Hub 시스템의 INTERFACE API 서버의 사용여부를 설정합니다.(Y,N)
  • INGEST_INTERFACE_API_URL : City Data Hub 시스템의 INTERFACE API 서버의 주소를 설정합니다.
  • AUTH_YN : City Data Hub 시스템의 인증서버의 사용여부를 설정합니다.(Y,N)
  • AUTH_EXTERNAL_URL : City Data Hub 시스템의 인증서버 외부 URL 설정합니다. (예: http://203.253.128.181:30084)
  • AUTH_INTERNAL_URL : City Data Hub 시스템의 인증서버 내부 URL 설정합니다. (예: http://10.0.0.237:30000)
  • AUTH_CLIENT_ID : City Data Hub 시스템의 인증서버에서 등록한 클라이언트 아이디 설정합니다.
  • AUTH_CLIENT_SECRET : City Data Hub 시스템의 인증서버에서 등록한 클라이언트 시크릿키 설정합니다.
  • AUTH_REDIRECT_URL : City Data Hub 시스템의 인증서버에서 로그인 한 후에 리다이렉트되는 주소 설정 (예: http://localhost:8080/accesstoken)
  • EUREKA_ENABLED : City Data Hub 시스템의 EUREKA 서버의 사용여부를 설정합니다.(true, false)
  • EUREKA_EUREKA_DEFAULT_ZONE : City Data Hub 시스템의 EUREKA 서버의 URL 설정합니다. (예: http://10.0.0.144:8888/eureka)
  • LOG_LEVEL : 로그의 적재 level 설정합니다. debug, info , warn 설정가능합니다.

2.2.4.2. Docker compose를 이용한 서비스 구동

  1. 아래 명령어를 실행하여 데이터 수집 서비스를 구동합니다.
# 디렉토리 이동
$ cd ~/ingest/docker

# 데이터 수집 서비스 구동 (백그라운드 실행)
$ docker compose up -d
  1. docker compose up -d 명령어를 실행하면 아래 그림과 유사한 결과를 얻을 수 있습니다.

docker_compose_up

  1. 서비스 구동이 완료되면 아래 명령어를 실행하여 생성된 컨테이너와 상태를 확인할 수 있습니다.
# 디렉토리 이동
$ cd ~/ingest/docker

# 데이터 수집 서비스를 제공하는 컨테이너 상태 확인
$ docker compose ps -a

docker_compose_ps

  1. 아래 명령어는 데이터 수집 서비스를 관리하는데 사용합니다. 모든 명령어는 ~/ingest/docker 디렉토리에서 실행합니다.
# 데이터 수집 서비스 시작
$ docker compose start

# 데이터 수집 서비스 중지
$ docker compose stop

# 데이터 수집 서비스 제거
$ docker compose down

# 데이터 수집 서비스 전체 로그 보기
$ docker compose logs

# ingest-db 컨테이너 로그 보기
$ docker logs ingest-db

# ingest-daemon 컨테이너 로그 보기
$ docker logs ingest-daemon

# ingest-web 컨테이너 로그 보기
$ docker logs ingest-web