# [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 |