98 lines
5.5 KiB
Markdown
98 lines
5.5 KiB
Markdown
# [BlokWorks] Device Deployer Service #
|
|
사용자에게 Command 를 입력받아 MQTT 를 발행하고 배포된 앱의 정보를 저장하고, 조회하는 Spring boot 기반 Java 애플리케이션입니다.
|
|
|
|
## 기반 기술 ##
|
|
|
|
---
|
|
* Java 17
|
|
* Spring Boot 3.1.3
|
|
* Gradle 8.2.1
|
|
|
|
## 주요 의존성 ##
|
|
|
|
---
|
|
* MQTT
|
|
* PostgreSQL
|
|
|
|
## 빌드 ##
|
|
|
|
---
|
|
|
|
### 프로젝트 패키징 ###
|
|
|
|
Gradle을 사용하여 패키징합니다.
|
|
```shell
|
|
$ ./gradlew clean build -x test
|
|
```
|
|
|
|
### 도커 빌드 ###
|
|
|
|
```dockerfile
|
|
FROM amazoncorretto:17.0.6-al2023
|
|
EXPOSE 8081
|
|
ADD ./build/libs/*.jar device-deployer.jar
|
|
ENTRYPOINT ["java", "-jar", "/device-deployer.jar"]
|
|
```
|
|
|
|
Image Registry로 사용할 AWS ECR에 로그인을 합니다.
|
|
```shell
|
|
$ aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 003960268191.dkr.ecr.ap-northeast-2.amazonaws.com
|
|
```
|
|
|
|
패키징된 jar 파일을 Docker image로 빌드합니다.
|
|
```shell
|
|
$ docker build --platform linux/amd64 -t device-deployer:0.0.7-SNAPSHOT .
|
|
$ docker tag sdt-cloud/device-deployer:0.0.7-SNAPSHOT 003960268191.dkr.ecr.ap-northeast-2.amazonaws.com/sdt-cloud/device-deployer:{{version}}
|
|
```
|
|
|
|
### 이미지 업로드 ###
|
|
|
|
빌드 및 태깅된 Docker image를 Image Registry에 업로드 합니다.
|
|
```shell
|
|
$ docker push 003960268191.dkr.ecr.ap-northeast-2.amazonaws.com/sdt-cloud/device-deployer:{{version}}
|
|
```
|
|
|
|
|
|
## 구동 ##
|
|
|
|
---
|
|
|
|
### 사전 구동 애플리케이션 및 모듈 ###
|
|
|
|
1. MQTT 컨테이너 모듈
|
|
- 사용자의 Command 를 Edge(Device)에게 전달하기 위한 Message Queue 입니다.
|
|
2. PostgreSQL 컨테이너 모듈
|
|
- 실행된 Command 의 정보를 저장하고 조회할 수 있는 RDB 입니다.
|
|
|
|
|
|
### 설정 정보 ###
|
|
설정 정보 등록은 설정 관리 애플리케이션의 POST /configuration API 를 이용합니다.
|
|
|
|
| 옵션 | 설명 | 필수 여부 | 기본값 |
|
|
|:--------------------------:|:-----------------------------------:|:-----:|:---:|
|
|
| server.port | 서버 포트 | O | - |
|
|
| inbound.mqtt.url | MQTT 모듈의 url | O | - |
|
|
| inbound.mqtt.username | MQTT 모듈의 username | O | - |
|
|
| inbound.mqtt.password | MQTT 모듈의 password | O | - |
|
|
| inbound.mqtt.topics | MQTT 모듈이 구독할 Inference 결과 데이터 topic | O | - |
|
|
| spring.datasource.uri | PostgreSQL 모듈의 연결을 위한 URI | O | - |
|
|
| spring.datasource.username | PostgreSQL 모듈의 username | O | - |
|
|
| spring.datasource.pssword | PostgreSQL 모듈의 password | O | - |
|
|
|
|
### 배포 ###
|
|
배포는 k8s manifest로 작성한 deploy.yaml을 이용합니다.
|
|
Deployment 오브젝트에 반드시 명시해야 하는 설정 정보(`env`)는 아래와 같습니다.
|
|
|
|
| 옵션 | 설명 | 필수 여부 | 예시 |
|
|
|:-----------------------------:|:-------------------------------------------------:|:-----:|:-----------------------------------------------------------------------------------------------------------------------------------------:|
|
|
| SPRING_PROFILES_ACTIVE | 구동 profile | O | k8s |
|
|
| SERVER_PORT | 애플리케이션이 등록될 포트 | O | 8085 |
|
|
| POSTGRES_CREDENTIALS_URL | PostgreSQL의 URL | O | jdbc:postgresql://localhost:5432/blokworks |
|
|
| POSTGRES_CREDENTIALS_USERNAME | PostgreSQL의 계정 | O | sdt |
|
|
| POSTGRES_CREDENTIALS_PASSWORD | PostgreSQL의 비밀번호 | O | 2xxxxx |
|
|
| IAM_AMQP_HOST | RabbitMQ의 URL | O | rabbitmq.sdt-cloud.svc.cluster.local |
|
|
| IAM_AMQP_PORT | RabbitMQ의 포트 | O | 5672 |
|
|
| IAM_AMQP_USERNAME | RabbitMQ에 접속할 계정 | O | guest |
|
|
| IAM_AMQP_PASSWORD | RabbitMQ에 접속할 비밀번호 | O | guest |
|
|
|