2.2. 서비스 설치
2.2.1. Ingest 모듈 소스 코드 다운로드
- 아래 명령어를 실행하여 Ingest 모듈 Git 저장소 (링크)를 복제합니다.
# 홈 디렉토리로 이동
$ cd ~
# 시티데이터허브 데이터 수집 서비스 저장소 복제
$ git clone https://github.com/IoTKETI/citydatahub_data_ingest_module.git ingest
- Git 초기 설정
# 복제한 GIt 저장소 디렉토리로 이동
$ cd ingest
# linux 시스템에서\r\n 문제 부분처리
$ git config core.autocrlf input
# git에서 파일 모드 변경 추적 제외하기
$ git config core.filemode false
2.2.2. 데이터 수집 서비스 소스 코드 빌드
- Ingest 모듈 컨테이너 실행에 필요한 데이터 디렉토리 생성
# 로그 디렉토리 생성 (docker-compose 에서 공유할 호스트 로그 디렉토리)
$ mkdir ~/log-data
# DB 데이터 백업 디렉토리 생성(docker-compose 에서 공유할 호스트 백업 디렉토리)
$ mkdir ~/db-data
- postgres 컨테이너 데이터 접근에 필요한 사용자 권한 설정
- postgres 컨테이너 생성시에 db-data 의 권한이 polkitd 로 생기는 문제 처리
- 2.1.1.의
MAVEN_HOME
설정 시 수정했던~/.bash_profile
파일을 수정합니다.
- 2.1.1.의
- [...]은
~/.bash_profile
에 작성된 기존 내용을 의미하며 입력하지 않습니다.
[...]
export U_ID=$(id -u)
export G_ID=$(id -g)
- 변경 사항 적용
$ source ~/.bashrc
- Ingest 모듈 빌드
# 복제한 데이터 수집 모듈 디렉토리 이동
$ cd ~/ingest
# 소스 코드 빌드
$ mvn clean install
- 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를 생성합니다.
- Ingest 모듈 Docker 빌드 스크립트 실행 권한 설정
$ cd ~/ingest
# docker build 스크립트 실행 권한 부여
$ chmod +x ingest-daemon/build.sh
$ chmod +x ingest-web/build.sh
- ingest-daemon Docker 이미지 만들기
# 디렉토리 이동
$ cd ~/ingest/ingest-daemon
# 데몬 이미지 만들기
$ mvn package docker:build
- ingest-web Docker 이미지 만들기
# 디렉토리 이동
$ cd ~/ingest/ingest-web
# 웹 UI 이미지 만들기
$ mvn package docker:build
docker images
명령어를 실행하여 생성된 Docker Image를 확인합니다. 아래 그림과 유사한 형태로 생성됩니다.
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를 이용한 서비스 구동
- 아래 명령어를 실행하여 데이터 수집 서비스를 구동합니다.
# 디렉토리 이동
$ cd ~/ingest/docker
# 데이터 수집 서비스 구동 (백그라운드 실행)
$ docker compose up -d
docker compose up -d
명령어를 실행하면 아래 그림과 유사한 결과를 얻을 수 있습니다.
- 서비스 구동이 완료되면 아래 명령어를 실행하여 생성된 컨테이너와 상태를 확인할 수 있습니다.
# 디렉토리 이동
$ cd ~/ingest/docker
# 데이터 수집 서비스를 제공하는 컨테이너 상태 확인
$ docker compose ps -a
- 아래 명령어는 데이터 수집 서비스를 관리하는데 사용합니다. 모든 명령어는
~/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