mirror of
https://github.com/ktds-dg0501/kt-event-marketing.git
synced 2025-12-06 22:46:24 +00:00
- deployment/container/run-container-guide.md 생성 - 4개 서비스(user, event, analytics, participation) 컨테이너 실행 방법 안내 - VM 접속, ACR 설정, 이미지 푸시, 컨테이너 실행, 재배포 절차 포함 - CORS 설정에 프론트엔드 주소(http://20.196.65.160:3000) 추가 - 실행정보: ACR(acrdigitalgarage01), VM(20.196.65.160)
11 KiB
11 KiB
백엔드 컨테이너 실행 가이드
목차
개요
본 가이드는 kt-event-marketing 시스템의 백엔드 마이크로서비스들을 Docker 컨테이너로 실행하는 방법을 안내합니다.
시스템 정보
- 시스템명: kt-event-marketing
- ACR명: acrdigitalgarage01
- 서비스 목록:
- user-service (포트: 8081)
- event-service (포트: 8080)
- analytics-service (포트: 8086)
- participation-service (포트: 8084)
VM 정보
- IP: 20.196.65.160
- 사용자 ID: P82265804@ktds.co.kr
- SSH Key 파일: ~/home/bastion-dg0505
VM 접속
1단계: 터미널 실행
- Linux/Mac: 기본 터미널 실행
- Windows: Windows Terminal 실행
2단계: SSH Key 파일 권한 설정 (최초 1회)
chmod 400 ~/home/bastion-dg0505
3단계: VM 접속
ssh -i ~/home/bastion-dg0505 P82265804@ktds.co.kr@20.196.65.160
Git Repository 클론
1단계: workspace 디렉토리 생성 및 이동
mkdir -p ~/home/workspace
cd ~/home/workspace
2단계: 소스 클론
git clone https://github.com/ktds-dg0501/kt-event-marketing.git
3단계: 프로젝트 디렉토리로 이동
cd kt-event-marketing
컨테이너 이미지 빌드
이미지 빌드 가이드 참조
프로젝트 내 빌드 가이드를 참조하여 컨테이너 이미지를 생성합니다:
# 빌드 가이드 파일 열기
cat deployment/container/build-image.md
빌드 가이드에 따라 각 서비스의 컨테이너 이미지를 생성하세요.
컨테이너 레지스트리 설정
1단계: ACR 인증 정보 확인
Azure CLI를 사용하여 ACR 인증 정보를 확인합니다:
az acr credential show --name acrdigitalgarage01
출력 예시:
{
"passwords": [
{
"name": "password",
"value": "{암호}"
},
{
"name": "password2",
"value": "{암호2}"
}
],
"username": "acrdigitalgarage01"
}
- ID:
username값 (예: acrdigitalgarage01) - 암호:
passwords[0].value값
2단계: Docker 로그인
docker login acrdigitalgarage01.azurecr.io -u {ID} -p {암호}
예시:
docker login acrdigitalgarage01.azurecr.io -u acrdigitalgarage01 -p mySecretPassword123
컨테이너 이미지 푸시
각 서비스의 이미지를 ACR에 푸시합니다.
user-service
docker tag user-service:latest acrdigitalgarage01.azurecr.io/kt-event-marketing/user-service:latest
docker push acrdigitalgarage01.azurecr.io/kt-event-marketing/user-service:latest
event-service
docker tag event-service:latest acrdigitalgarage01.azurecr.io/kt-event-marketing/event-service:latest
docker push acrdigitalgarage01.azurecr.io/kt-event-marketing/event-service:latest
analytics-service
docker tag analytics-service:latest acrdigitalgarage01.azurecr.io/kt-event-marketing/analytics-service:latest
docker push acrdigitalgarage01.azurecr.io/kt-event-marketing/analytics-service:latest
participation-service
docker tag participation-service:latest acrdigitalgarage01.azurecr.io/kt-event-marketing/participation-service:latest
docker push acrdigitalgarage01.azurecr.io/kt-event-marketing/participation-service:latest
컨테이너 실행
각 서비스를 Docker 컨테이너로 실행합니다.
user-service 실행
SERVER_PORT=8081
docker run -d --name user-service --rm -p ${SERVER_PORT}:${SERVER_PORT} \
-e SERVER_PORT=8081 \
-e DB_URL=jdbc:postgresql://20.249.125.115:5432/userdb \
-e DB_DRIVER=org.postgresql.Driver \
-e DB_HOST=20.249.125.115 \
-e DB_PORT=5432 \
-e DB_NAME=userdb \
-e DB_USERNAME=eventuser \
-e DB_PASSWORD=Hi5Jessica! \
-e DB_KIND=postgresql \
-e DDL_AUTO=update \
-e SHOW_SQL=true \
-e JPA_DIALECT=org.hibernate.dialect.PostgreSQLDialect \
-e H2_CONSOLE_ENABLED=false \
-e REDIS_ENABLED=true \
-e REDIS_HOST=20.214.210.71 \
-e REDIS_PORT=6379 \
-e REDIS_PASSWORD=Hi5Jessica! \
-e REDIS_DATABASE=0 \
-e EXCLUDE_REDIS="" \
-e KAFKA_BOOTSTRAP_SERVERS=4.230.50.63:9092 \
-e KAFKA_CONSUMER_GROUP=user-service-consumers \
-e EXCLUDE_KAFKA="" \
-e JWT_SECRET=kt-event-marketing-secret-key-for-development-only-please-change-in-production \
-e JWT_ACCESS_TOKEN_VALIDITY=604800000 \
-e CORS_ALLOWED_ORIGINS="http://localhost:*,http://20.196.65.160:3000" \
-e LOG_LEVEL_APP=DEBUG \
-e LOG_LEVEL_WEB=INFO \
-e LOG_LEVEL_SQL=DEBUG \
-e LOG_LEVEL_SQL_TYPE=TRACE \
-e LOG_FILE_PATH=logs/user-service.log \
acrdigitalgarage01.azurecr.io/kt-event-marketing/user-service:latest
event-service 실행
SERVER_PORT=8080
docker run -d --name event-service --rm -p ${SERVER_PORT}:${SERVER_PORT} \
-e SERVER_PORT=8080 \
-e DB_HOST=20.249.177.232 \
-e DB_PORT=5432 \
-e DB_NAME=eventdb \
-e DB_USERNAME=eventuser \
-e DB_PASSWORD=Hi5Jessica! \
-e DDL_AUTO=update \
-e REDIS_HOST=20.214.210.71 \
-e REDIS_PORT=6379 \
-e REDIS_PASSWORD=Hi5Jessica! \
-e KAFKA_BOOTSTRAP_SERVERS=20.249.182.13:9095,4.217.131.59:9095 \
-e CONTENT_SERVICE_URL=http://localhost:8082 \
-e DISTRIBUTION_SERVICE_URL=http://localhost:8084 \
-e JWT_SECRET=kt-event-marketing-secret-key-for-development-only-please-change-in-production \
-e LOG_LEVEL=DEBUG \
-e SQL_LOG_LEVEL=DEBUG \
acrdigitalgarage01.azurecr.io/kt-event-marketing/event-service:latest
analytics-service 실행
SERVER_PORT=8086
docker run -d --name analytics-service --rm -p ${SERVER_PORT}:${SERVER_PORT} \
-e DB_KIND=postgresql \
-e DB_HOST=4.230.49.9 \
-e DB_PORT=5432 \
-e DB_NAME=analyticdb \
-e DB_USERNAME=eventuser \
-e DB_PASSWORD=Hi5Jessica! \
-e DDL_AUTO=update \
-e SHOW_SQL=true \
-e REDIS_HOST=20.214.210.71 \
-e REDIS_PORT=6379 \
-e REDIS_PASSWORD=Hi5Jessica! \
-e REDIS_DATABASE=5 \
-e KAFKA_ENABLED=true \
-e KAFKA_BOOTSTRAP_SERVERS=20.249.182.13:9095,4.217.131.59:9095 \
-e KAFKA_CONSUMER_GROUP_ID=analytics-service-consumers \
-e SAMPLE_DATA_ENABLED=true \
-e SERVER_PORT=8086 \
-e JWT_SECRET=dev-jwt-secret-key-for-development-only-kt-event-marketing \
-e JWT_ACCESS_TOKEN_VALIDITY=1800 \
-e JWT_REFRESH_TOKEN_VALIDITY=86400 \
-e CORS_ALLOWED_ORIGINS="http://localhost:*,http://20.196.65.160:3000" \
-e LOG_FILE=logs/analytics-service.log \
-e LOG_LEVEL_APP=DEBUG \
-e LOG_LEVEL_WEB=INFO \
-e LOG_LEVEL_SQL=DEBUG \
-e LOG_LEVEL_SQL_TYPE=TRACE \
acrdigitalgarage01.azurecr.io/kt-event-marketing/analytics-service:latest
participation-service 실행
SERVER_PORT=8084
docker run -d --name participation-service --rm -p ${SERVER_PORT}:${SERVER_PORT} \
-e DB_HOST=4.230.72.147 \
-e DB_NAME=participationdb \
-e DB_PASSWORD=Hi5Jessica! \
-e DB_PORT=5432 \
-e DB_USERNAME=eventuser \
-e DDL_AUTO=update \
-e JWT_EXPIRATION=86400000 \
-e JWT_SECRET=kt-event-marketing-secret-key-for-development-only-change-in-production \
-e KAFKA_BOOTSTRAP_SERVERS=20.249.182.13:9095,4.217.131.59:9095 \
-e LOG_FILE=logs/participation-service.log \
-e LOG_LEVEL=INFO \
-e REDIS_HOST=20.214.210.71 \
-e REDIS_PASSWORD=Hi5Jessica! \
-e REDIS_PORT=6379 \
-e SERVER_PORT=8084 \
-e SHOW_SQL=true \
acrdigitalgarage01.azurecr.io/kt-event-marketing/participation-service:latest
컨테이너 확인
모든 서비스가 정상적으로 실행되었는지 확인합니다.
전체 서비스 확인
docker ps
개별 서비스 확인
docker ps | grep user-service
docker ps | grep event-service
docker ps | grep analytics-service
docker ps | grep participation-service
서비스 로그 확인
docker logs user-service
docker logs event-service
docker logs analytics-service
docker logs participation-service
재배포
소스 코드 수정 후 재배포 방법입니다.
1단계: 로컬에서 수정된 소스 푸시
로컬 개발 환경에서 소스 수정 후 Git에 푸시합니다.
2단계: VM 접속
ssh -i ~/home/bastion-dg0505 P82265804@ktds.co.kr@20.196.65.160
3단계: 디렉토리 이동 및 소스 내려받기
cd ~/home/workspace/kt-event-marketing
git pull
4단계: 컨테이너 이미지 재생성
빌드 가이드에 따라 이미지를 재생성합니다:
cat deployment/container/build-image.md
5단계: 컨테이너 이미지 푸시 (예: user-service)
docker tag user-service:latest acrdigitalgarage01.azurecr.io/kt-event-marketing/user-service:latest
docker push acrdigitalgarage01.azurecr.io/kt-event-marketing/user-service:latest
6단계: 기존 컨테이너 중지
docker stop user-service
7단계: 컨테이너 이미지 삭제
docker rmi acrdigitalgarage01.azurecr.io/kt-event-marketing/user-service:latest
8단계: 컨테이너 재실행
위 컨테이너 실행 섹션의 명령을 다시 실행합니다.
참고 사항
CORS 설정
- 프론트엔드 접근을 위해
CORS_ALLOWED_ORIGINS환경변수에http://20.196.65.160:3000이 추가되었습니다. - 필요에 따라 추가 도메인을 콤마(,)로 구분하여 추가할 수 있습니다.
포트 매핑
- user-service: 8081
- event-service: 8080
- analytics-service: 8086
- participation-service: 8084
환경변수 보안
- 본 가이드는 개발 환경용입니다.
- 운영 환경에서는 비밀번호, JWT 시크릿 등을 환경변수 파일이나 Secret 관리 시스템을 통해 관리해야 합니다.
Docker 네트워크
- 현재는 호스트 네트워크 모드로 실행됩니다.
- 서비스 간 통신이 필요한 경우 Docker 네트워크를 생성하여 사용하는 것을 권장합니다.
문제 해결
컨테이너가 시작되지 않는 경우
docker logs {서비스명}
포트가 이미 사용 중인 경우
# 포트 사용 프로세스 확인
sudo netstat -tulpn | grep {포트번호}
# 기존 컨테이너 중지
docker stop {서비스명}
이미지 다운로드 실패
# Docker 로그인 재시도
docker login acrdigitalgarage01.azurecr.io -u {ID} -p {암호}
# 이미지 pull 재시도
docker pull acrdigitalgarage01.azurecr.io/kt-event-marketing/{서비스명}:latest