mirror of
https://github.com/cna-bootcamp/phonebill.git
synced 2025-12-06 08:06:24 +00:00
백엔드 컨테이너 실행 가이드 작성 완료
- 모든 서비스(api-gateway, user-service, bill-service, product-service, kos-mock)의 환경변수 매핑 - VM 접속 및 ACR 로그인 방법 포함 - 컨테이너 실행, 상태 확인, 재배포 프로세스 완비 - CORS 설정에 프론트엔드 주소 자동 추가 - 실제 인프라 정보(ACR, VM, DB) 반영
This commit is contained in:
parent
ba300f59a4
commit
a81e166dd5
@ -1,34 +1,43 @@
|
|||||||
# 백엔드 컨테이너 실행 가이드
|
# 백엔드 컨테이너 실행방법 가이드
|
||||||
|
|
||||||
## 시스템 정보
|
## 📋 실행 정보
|
||||||
- **시스템명**: phonebill
|
|
||||||
- **ACR명**: acrdigitalgarage01
|
- **ACR명**: acrdigitalgarage01
|
||||||
- **VM 정보**:
|
- **VM 접속정보**:
|
||||||
|
- KEY파일: ~/home/bastion-dg0500
|
||||||
|
- USERID: azureuser
|
||||||
- IP: 4.230.5.6
|
- IP: 4.230.5.6
|
||||||
- 사용자: azureuser
|
|
||||||
- SSH 키: ~/home/bastion-dg0500
|
|
||||||
|
|
||||||
## 백엔드 서비스 목록
|
## 🏗️ 시스템 구성 정보
|
||||||
총 5개의 백엔드 서비스를 컨테이너로 실행합니다.
|
- **시스템명**: phonebill
|
||||||
|
- **서비스 목록**:
|
||||||
|
- api-gateway (포트: 8080)
|
||||||
|
- user-service (포트: 8081)
|
||||||
|
- bill-service (포트: 8082)
|
||||||
|
- product-service (포트: 8083)
|
||||||
|
- kos-mock (포트: 8084)
|
||||||
|
|
||||||
| 서비스명 | 포트 | 설명 |
|
## 🔌 VM 접속 방법
|
||||||
|---------|------|------|
|
|
||||||
| api-gateway | 8080 | API Gateway 서비스 |
|
|
||||||
| user-service | 8081 | 사용자 관리 서비스 |
|
|
||||||
| bill-service | 8082 | 요금 조회 서비스 |
|
|
||||||
| product-service | 8083 | 상품 변경 서비스 |
|
|
||||||
| kos-mock | 8084 | KOS 시스템 목업 서비스 |
|
|
||||||
|
|
||||||
## 사전 준비사항
|
### 1. 터미널 실행
|
||||||
|
- **Linux/Mac**: 기본 터미널 실행
|
||||||
|
- **Windows**: Windows Terminal 실행
|
||||||
|
|
||||||
### 1. 로컬에서 컨테이너 이미지 확인
|
### 2. Private Key 파일 권한 설정 (최초 1회만)
|
||||||
현재 생성된 컨테이너 이미지를 확인합니다.
|
|
||||||
```bash
|
```bash
|
||||||
docker images | grep -E "(api-gateway|user-service|bill-service|product-service|kos-mock)"
|
chmod 400 ~/home/bastion-dg0500
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 3. VM 접속
|
||||||
|
```bash
|
||||||
|
ssh -i ~/home/bastion-dg0500 azureuser@4.230.5.6
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🏗️ 컨테이너 이미지 빌드 및 푸시
|
||||||
|
|
||||||
|
### 1. 로컬에서 이미지 빌드
|
||||||
|
- `deployment/container/build-image.md` 파일의 가이드에 따라 어플리케이션 빌드 및 컨테이너 이미지 생성
|
||||||
|
|
||||||
### 2. ACR 인증정보 확인
|
### 2. ACR 인증정보 확인
|
||||||
Azure CLI를 통해 ACR 인증정보를 확인합니다.
|
|
||||||
```bash
|
```bash
|
||||||
az acr credential show --name acrdigitalgarage01
|
az acr credential show --name acrdigitalgarage01
|
||||||
```
|
```
|
||||||
@ -40,303 +49,256 @@ az acr credential show --name acrdigitalgarage01
|
|||||||
{
|
{
|
||||||
"name": "password",
|
"name": "password",
|
||||||
"value": "{암호}"
|
"value": "{암호}"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "password2",
|
|
||||||
"value": "{암호2}"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"username": "acrdigitalgarage01"
|
"username": "acrdigitalgarage01"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## 컨테이너 이미지 푸시
|
### 3. 컨테이너 레지스트리 로그인 (VM에서 수행)
|
||||||
|
|
||||||
### 1. ACR 로그인 (로컬)
|
|
||||||
```bash
|
```bash
|
||||||
docker login acrdigitalgarage01.azurecr.io -u acrdigitalgarage01 -p {암호}
|
docker login acrdigitalgarage01.azurecr.io -u acrdigitalgarage01 -p {암호}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. 이미지 태그 및 푸시
|
### 4. 이미지 태그 및 푸시 (로컬에서 수행)
|
||||||
각 서비스별로 다음 명령을 실행합니다:
|
|
||||||
|
|
||||||
#### API Gateway
|
|
||||||
```bash
|
```bash
|
||||||
|
# 각 서비스별로 수행
|
||||||
docker tag api-gateway:latest acrdigitalgarage01.azurecr.io/phonebill/api-gateway:latest
|
docker tag api-gateway:latest acrdigitalgarage01.azurecr.io/phonebill/api-gateway:latest
|
||||||
docker push acrdigitalgarage01.azurecr.io/phonebill/api-gateway:latest
|
docker push acrdigitalgarage01.azurecr.io/phonebill/api-gateway:latest
|
||||||
```
|
|
||||||
|
|
||||||
#### User Service
|
|
||||||
```bash
|
|
||||||
docker tag user-service:latest acrdigitalgarage01.azurecr.io/phonebill/user-service:latest
|
docker tag user-service:latest acrdigitalgarage01.azurecr.io/phonebill/user-service:latest
|
||||||
docker push acrdigitalgarage01.azurecr.io/phonebill/user-service:latest
|
docker push acrdigitalgarage01.azurecr.io/phonebill/user-service:latest
|
||||||
```
|
|
||||||
|
|
||||||
#### Bill Service
|
|
||||||
```bash
|
|
||||||
docker tag bill-service:latest acrdigitalgarage01.azurecr.io/phonebill/bill-service:latest
|
docker tag bill-service:latest acrdigitalgarage01.azurecr.io/phonebill/bill-service:latest
|
||||||
docker push acrdigitalgarage01.azurecr.io/phonebill/bill-service:latest
|
docker push acrdigitalgarage01.azurecr.io/phonebill/bill-service:latest
|
||||||
```
|
|
||||||
|
|
||||||
#### Product Service
|
|
||||||
```bash
|
|
||||||
docker tag product-service:latest acrdigitalgarage01.azurecr.io/phonebill/product-service:latest
|
docker tag product-service:latest acrdigitalgarage01.azurecr.io/phonebill/product-service:latest
|
||||||
docker push acrdigitalgarage01.azurecr.io/phonebill/product-service:latest
|
docker push acrdigitalgarage01.azurecr.io/phonebill/product-service:latest
|
||||||
```
|
|
||||||
|
|
||||||
#### KOS Mock
|
|
||||||
```bash
|
|
||||||
docker tag kos-mock:latest acrdigitalgarage01.azurecr.io/phonebill/kos-mock:latest
|
docker tag kos-mock:latest acrdigitalgarage01.azurecr.io/phonebill/kos-mock:latest
|
||||||
docker push acrdigitalgarage01.azurecr.io/phonebill/kos-mock:latest
|
docker push acrdigitalgarage01.azurecr.io/phonebill/kos-mock:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
## VM 접속 및 컨테이너 실행
|
## 🚀 컨테이너 실행 (VM에서 수행)
|
||||||
|
|
||||||
### 1. VM 접속
|
### 1. api-gateway 실행
|
||||||
|
|
||||||
#### Linux/Mac 사용자
|
|
||||||
터미널을 실행하고 다음 명령을 실행합니다:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# SSH 키 파일 권한 설정 (최초 한번만)
|
|
||||||
chmod 400 ~/home/bastion-dg0500
|
|
||||||
|
|
||||||
# VM 접속
|
|
||||||
ssh -i ~/home/bastion-dg0500 azureuser@4.230.5.6
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Windows 사용자
|
|
||||||
Windows Terminal을 실행하고 동일한 명령을 실행합니다:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# SSH 키 파일 권한 설정 (최초 한번만)
|
|
||||||
chmod 400 ~/home/bastion-dg0500
|
|
||||||
|
|
||||||
# VM 접속
|
|
||||||
ssh -i ~/home/bastion-dg0500 azureuser@4.230.5.6
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. VM에서 ACR 로그인
|
|
||||||
```bash
|
|
||||||
docker login acrdigitalgarage01.azurecr.io -u acrdigitalgarage01 -p {암호}
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. 컨테이너 실행 명령
|
|
||||||
|
|
||||||
#### API Gateway (포트: 8080)
|
|
||||||
```bash
|
```bash
|
||||||
SERVER_PORT=8080
|
SERVER_PORT=8080
|
||||||
|
|
||||||
docker run -d --name api-gateway --rm -p ${SERVER_PORT}:${SERVER_PORT} \
|
docker run -d --name api-gateway --rm -p ${SERVER_PORT}:${SERVER_PORT} \
|
||||||
-e BILL_SERVICE_URL=http://4.230.5.6:8082 \
|
-e SERVER_PORT=8080 \
|
||||||
-e CORS_ALLOWED_ORIGINS="http://localhost:3000,http://4.230.5.6:3000" \
|
-e SERVER_NETTY_CONNECTION_TIMEOUT=30s \
|
||||||
-e JWT_ACCESS_TOKEN_VALIDITY=18000000 \
|
-e SERVER_NETTY_IDLE_TIMEOUT=60s \
|
||||||
-e JWT_REFRESH_TOKEN_VALIDITY=86400000 \
|
|
||||||
-e JWT_SECRET="nwe5Yo9qaJ6FBD/Thl2/j6/SFAfNwUorAY1ZcWO2KI7uA4bmVLOCPxE9hYuUpRCOkgV2UF2DdHXtqHi3+BU/ecbz2zpHyf/720h48UbA3XOMYOX1sdM+dQ==" \
|
|
||||||
-e KOS_MOCK_URL=http://4.230.5.6:8084 \
|
|
||||||
-e PRODUCT_SERVICE_URL=http://4.230.5.6:8083 \
|
|
||||||
-e SERVER_PORT=${SERVER_PORT} \
|
|
||||||
-e SPRING_PROFILES_ACTIVE=dev \
|
-e SPRING_PROFILES_ACTIVE=dev \
|
||||||
-e USER_SERVICE_URL=http://4.230.5.6:8081 \
|
-e JWT_SECRET=your-jwt-secret-key-here \
|
||||||
|
-e JWT_ACCESS_TOKEN_VALIDITY=180000 \
|
||||||
|
-e CORS_ALLOWED_ORIGINS="http://localhost:3000,http://4.230.5.6:3000" \
|
||||||
|
-e USER_SERVICE_URL=http://localhost:8081 \
|
||||||
|
-e BILL_SERVICE_URL=http://localhost:8082 \
|
||||||
|
-e PRODUCT_SERVICE_URL=http://localhost:8083 \
|
||||||
|
-e KOS_MOCK_URL=http://localhost:8084 \
|
||||||
acrdigitalgarage01.azurecr.io/phonebill/api-gateway:latest
|
acrdigitalgarage01.azurecr.io/phonebill/api-gateway:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
#### User Service (포트: 8081)
|
### 2. user-service 실행
|
||||||
```bash
|
```bash
|
||||||
SERVER_PORT=8081
|
SERVER_PORT=8081
|
||||||
|
|
||||||
docker run -d --name user-service --rm -p ${SERVER_PORT}:${SERVER_PORT} \
|
docker run -d --name user-service --rm -p ${SERVER_PORT}:${SERVER_PORT} \
|
||||||
-e CORS_ALLOWED_ORIGINS="http://localhost:3000,http://4.230.5.6:3000" \
|
-e SERVER_PORT=8081 \
|
||||||
-e DB_HOST=20.249.70.6 \
|
|
||||||
-e DB_KIND=postgresql \
|
|
||||||
-e DB_NAME=phonebill_auth \
|
|
||||||
-e DB_PASSWORD="AuthUser2025!" \
|
|
||||||
-e DB_PORT=5432 \
|
|
||||||
-e DB_USERNAME=auth_user \
|
|
||||||
-e DDL_AUTO=update \
|
|
||||||
-e JWT_ACCESS_TOKEN_VALIDITY=18000000 \
|
|
||||||
-e JWT_REFRESH_TOKEN_VALIDITY=86400000 \
|
|
||||||
-e JWT_SECRET="nwe5Yo9qaJ6FBD/Thl2/j6/SFAfNwUorAY1ZcWO2KI7uA4bmVLOCPxE9hYuUpRCOkgV2UF2DdHXtqHi3+BU/ecbz2zpHyf/720h48UbA3XOMYOX1sdM+dQ==" \
|
|
||||||
-e REDIS_DATABASE=0 \
|
|
||||||
-e REDIS_HOST=20.249.193.103 \
|
|
||||||
-e REDIS_PASSWORD="Redis2025Dev!" \
|
|
||||||
-e REDIS_PORT=6379 \
|
|
||||||
-e SERVER_PORT=${SERVER_PORT} \
|
|
||||||
-e SHOW_SQL=true \
|
|
||||||
-e SPRING_PROFILES_ACTIVE=dev \
|
-e SPRING_PROFILES_ACTIVE=dev \
|
||||||
|
-e DB_KIND=postgresql \
|
||||||
|
-e DB_HOST=localhost \
|
||||||
|
-e DB_PORT=5432 \
|
||||||
|
-e DB_NAME=phonebill_auth \
|
||||||
|
-e DB_USERNAME=phonebill_user \
|
||||||
|
-e DB_PASSWORD=phonebill_pass \
|
||||||
|
-e SHOW_SQL=true \
|
||||||
|
-e DDL_AUTO=update \
|
||||||
|
-e REDIS_HOST=localhost \
|
||||||
|
-e REDIS_PORT=6379 \
|
||||||
|
-e REDIS_PASSWORD= \
|
||||||
|
-e REDIS_DATABASE=0 \
|
||||||
|
-e CORS_ALLOWED_ORIGINS="http://localhost:3000,http://4.230.5.6:3000" \
|
||||||
|
-e JWT_SECRET=your-jwt-secret-key-here \
|
||||||
|
-e JWT_ACCESS_TOKEN_VALIDITY=1800000 \
|
||||||
|
-e JWT_REFRESH_TOKEN_VALIDITY=86400000 \
|
||||||
acrdigitalgarage01.azurecr.io/phonebill/user-service:latest
|
acrdigitalgarage01.azurecr.io/phonebill/user-service:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Bill Service (포트: 8082)
|
### 3. bill-service 실행
|
||||||
```bash
|
```bash
|
||||||
SERVER_PORT=8082
|
SERVER_PORT=8082
|
||||||
|
|
||||||
docker run -d --name bill-service --rm -p ${SERVER_PORT}:${SERVER_PORT} \
|
docker run -d --name bill-service --rm -p ${SERVER_PORT}:${SERVER_PORT} \
|
||||||
-e CORS_ALLOWED_ORIGINS="http://localhost:3000,http://4.230.5.6:3000" \
|
-e SERVER_PORT=8082 \
|
||||||
-e DB_CONNECTION_TIMEOUT=30000 \
|
|
||||||
-e DB_HOST=20.249.175.46 \
|
|
||||||
-e DB_IDLE_TIMEOUT=600000 \
|
|
||||||
-e DB_KIND=postgresql \
|
|
||||||
-e DB_LEAK_DETECTION=60000 \
|
|
||||||
-e DB_MAX_LIFETIME=1800000 \
|
|
||||||
-e DB_MAX_POOL=20 \
|
|
||||||
-e DB_MIN_IDLE=5 \
|
|
||||||
-e DB_NAME=bill_inquiry_db \
|
|
||||||
-e DB_PASSWORD="BillUser2025!" \
|
|
||||||
-e DB_PORT=5432 \
|
|
||||||
-e DB_USERNAME=bill_inquiry_user \
|
|
||||||
-e JWT_ACCESS_TOKEN_VALIDITY=18000000 \
|
|
||||||
-e JWT_REFRESH_TOKEN_VALIDITY=86400000 \
|
|
||||||
-e JWT_SECRET="nwe5Yo9qaJ6FBD/Thl2/j6/SFAfNwUorAY1ZcWO2KI7uA4bmVLOCPxE9hYuUpRCOkgV2UF2DdHXtqHi3+BU/ecbz2zpHyf/720h48UbA3XOMYOX1sdM+dQ==" \
|
|
||||||
-e KOS_BASE_URL=http://4.230.5.6:8084 \
|
|
||||||
-e LOG_FILE_NAME=logs/bill-service.log \
|
|
||||||
-e REDIS_DATABASE=1 \
|
|
||||||
-e REDIS_HOST=20.249.193.103 \
|
|
||||||
-e REDIS_MAX_ACTIVE=8 \
|
|
||||||
-e REDIS_MAX_IDLE=8 \
|
|
||||||
-e REDIS_MAX_WAIT=-1 \
|
|
||||||
-e REDIS_MIN_IDLE=0 \
|
|
||||||
-e REDIS_PASSWORD="Redis2025Dev!" \
|
|
||||||
-e REDIS_PORT=6379 \
|
|
||||||
-e REDIS_TIMEOUT=2000 \
|
|
||||||
-e SERVER_PORT=${SERVER_PORT} \
|
|
||||||
-e SPRING_PROFILES_ACTIVE=dev \
|
-e SPRING_PROFILES_ACTIVE=dev \
|
||||||
|
-e DB_HOST=20.249.107.185 \
|
||||||
|
-e DB_PORT=5432 \
|
||||||
|
-e DB_NAME=product_change \
|
||||||
|
-e DB_USERNAME=product_user \
|
||||||
|
-e DB_PASSWORD=product_pass \
|
||||||
|
-e SHOW_SQL=true \
|
||||||
|
-e DDL_AUTO=update \
|
||||||
|
-e REDIS_HOST=localhost \
|
||||||
|
-e REDIS_PORT=6379 \
|
||||||
|
-e REDIS_PASSWORD= \
|
||||||
|
-e REDIS_DATABASE=2 \
|
||||||
|
-e CORS_ALLOWED_ORIGINS="http://localhost:3000,http://4.230.5.6:3000" \
|
||||||
|
-e JWT_SECRET=your-jwt-secret-key-here \
|
||||||
|
-e JWT_ACCESS_TOKEN_VALIDITY=1800 \
|
||||||
|
-e KOS_BASE_URL=http://localhost:8084 \
|
||||||
|
-e KOS_CONNECT_TIMEOUT=5000 \
|
||||||
|
-e KOS_READ_TIMEOUT=30000 \
|
||||||
|
-e KOS_MAX_RETRIES=3 \
|
||||||
|
-e KOS_RETRY_DELAY=1000 \
|
||||||
|
-e KOS_CB_FAILURE_RATE=0.5 \
|
||||||
|
-e KOS_CB_SLOW_DURATION=10000 \
|
||||||
|
-e KOS_CB_SLOW_RATE=0.5 \
|
||||||
|
-e KOS_CB_WINDOW_SIZE=10 \
|
||||||
|
-e KOS_CB_MIN_CALLS=5 \
|
||||||
|
-e KOS_CB_HALF_OPEN_CALLS=3 \
|
||||||
|
-e KOS_CB_OPEN_DURATION=60000 \
|
||||||
|
-e LOG_PATTERN_CONSOLE= \
|
||||||
|
-e LOG_PATTERN_FILE= \
|
||||||
|
-e LOG_FILE_MAX_SIZE=100MB \
|
||||||
|
-e LOG_FILE_MAX_HISTORY=30 \
|
||||||
acrdigitalgarage01.azurecr.io/phonebill/bill-service:latest
|
acrdigitalgarage01.azurecr.io/phonebill/bill-service:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Product Service (포트: 8083)
|
### 4. product-service 실행
|
||||||
```bash
|
```bash
|
||||||
SERVER_PORT=8083
|
SERVER_PORT=8083
|
||||||
|
|
||||||
docker run -d --name product-service --rm -p ${SERVER_PORT}:${SERVER_PORT} \
|
docker run -d --name product-service --rm -p ${SERVER_PORT}:${SERVER_PORT} \
|
||||||
-e CORS_ALLOWED_ORIGINS="http://localhost:3000,http://4.230.5.6:3000" \
|
-e SERVER_PORT=8083 \
|
||||||
-e DB_HOST=20.249.107.185 \
|
|
||||||
-e DB_KIND=postgresql \
|
|
||||||
-e DB_NAME=product_change_db \
|
|
||||||
-e DB_PASSWORD="ProductUser2025!" \
|
|
||||||
-e DB_PORT=5432 \
|
|
||||||
-e DB_USERNAME=product_change_user \
|
|
||||||
-e DDL_AUTO=update \
|
|
||||||
-e JWT_ACCESS_TOKEN_VALIDITY=18000000 \
|
|
||||||
-e JWT_REFRESH_TOKEN_VALIDITY=86400000 \
|
|
||||||
-e JWT_SECRET="nwe5Yo9qaJ6FBD/Thl2/j6/SFAfNwUorAY1ZcWO2KI7uA4bmVLOCPxE9hYuUpRCOkgV2UF2DdHXtqHi3+BU/ecbz2zpHyf/720h48UbA3XOMYOX1sdM+dQ==" \
|
|
||||||
-e KOS_API_KEY=dev-api-key \
|
|
||||||
-e KOS_BASE_URL=http://4.230.5.6:8084 \
|
|
||||||
-e KOS_CLIENT_ID=product-service-dev \
|
|
||||||
-e KOS_MOCK_ENABLED=true \
|
|
||||||
-e REDIS_DATABASE=2 \
|
|
||||||
-e REDIS_HOST=20.249.193.103 \
|
|
||||||
-e REDIS_PASSWORD="Redis2025Dev!" \
|
|
||||||
-e REDIS_PORT=6379 \
|
|
||||||
-e SERVER_PORT=${SERVER_PORT} \
|
|
||||||
-e SPRING_PROFILES_ACTIVE=dev \
|
-e SPRING_PROFILES_ACTIVE=dev \
|
||||||
|
-e DB_HOST=localhost \
|
||||||
|
-e DB_PORT=5432 \
|
||||||
|
-e DB_NAME=product_change \
|
||||||
|
-e DB_USERNAME=product_user \
|
||||||
|
-e DB_PASSWORD=product_pass \
|
||||||
|
-e SHOW_SQL=true \
|
||||||
|
-e DDL_AUTO=update \
|
||||||
|
-e REDIS_HOST=localhost \
|
||||||
|
-e REDIS_PORT=6379 \
|
||||||
|
-e REDIS_PASSWORD= \
|
||||||
|
-e REDIS_DATABASE=2 \
|
||||||
|
-e CORS_ALLOWED_ORIGINS="http://localhost:3000,http://4.230.5.6:3000" \
|
||||||
|
-e JWT_SECRET=your-jwt-secret-key-here \
|
||||||
|
-e JWT_ACCESS_TOKEN_VALIDITY=1800000 \
|
||||||
|
-e JWT_REFRESH_TOKEN_VALIDITY=86400000 \
|
||||||
|
-e KOS_BASE_URL=http://localhost:8084 \
|
||||||
|
-e KOS_CONNECT_TIMEOUT=5000 \
|
||||||
|
-e KOS_READ_TIMEOUT=10000 \
|
||||||
|
-e KOS_MAX_RETRIES=3 \
|
||||||
|
-e KOS_RETRY_DELAY=1000 \
|
||||||
|
-e KOS_CB_FAILURE_RATE=0.5 \
|
||||||
|
-e KOS_CB_SLOW_CALL_THRESHOLD=10000 \
|
||||||
|
-e KOS_CB_SLOW_CALL_RATE=0.5 \
|
||||||
|
-e KOS_CB_SLIDING_WINDOW_SIZE=10 \
|
||||||
|
-e KOS_CB_MIN_CALLS=5 \
|
||||||
|
-e KOS_CB_HALF_OPEN_CALLS=3 \
|
||||||
|
-e KOS_CB_WAIT_DURATION=60000 \
|
||||||
acrdigitalgarage01.azurecr.io/phonebill/product-service:latest
|
acrdigitalgarage01.azurecr.io/phonebill/product-service:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
#### KOS Mock (포트: 8084)
|
### 5. kos-mock 실행
|
||||||
```bash
|
```bash
|
||||||
SERVER_PORT=8084
|
SERVER_PORT=8084
|
||||||
|
|
||||||
docker run -d --name kos-mock --rm -p ${SERVER_PORT}:${SERVER_PORT} \
|
docker run -d --name kos-mock --rm -p ${SERVER_PORT}:${SERVER_PORT} \
|
||||||
-e SERVER_PORT=${SERVER_PORT} \
|
-e SERVER_PORT=8084 \
|
||||||
-e SPRING_PROFILES_ACTIVE=dev \
|
-e SPRING_PROFILES_ACTIVE=dev \
|
||||||
acrdigitalgarage01.azurecr.io/phonebill/kos-mock:latest
|
acrdigitalgarage01.azurecr.io/phonebill/kos-mock:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
### 4. 컨테이너 실행 상태 확인
|
## ✅ 실행된 컨테이너 확인
|
||||||
모든 컨테이너가 정상적으로 실행되고 있는지 확인합니다:
|
|
||||||
|
|
||||||
|
### 모든 서비스 상태 확인
|
||||||
```bash
|
```bash
|
||||||
# 전체 컨테이너 상태 확인
|
docker ps | grep -E "api-gateway|user-service|bill-service|product-service|kos-mock"
|
||||||
docker ps
|
```
|
||||||
|
|
||||||
# 서비스별 개별 확인
|
### 개별 서비스 확인
|
||||||
|
```bash
|
||||||
docker ps | grep api-gateway
|
docker ps | grep api-gateway
|
||||||
docker ps | grep user-service
|
docker ps | grep user-service
|
||||||
docker ps | grep bill-service
|
docker ps | grep bill-service
|
||||||
docker ps | grep product-service
|
docker ps | grep product-service
|
||||||
docker ps | grep kos-mock
|
docker ps | grep kos-mock
|
||||||
```
|
```
|
||||||
|
|
||||||
### 5. 서비스 헬스체크
|
### 로그 확인
|
||||||
각 서비스가 정상적으로 응답하는지 확인합니다:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# API Gateway
|
# 각 서비스별 로그 확인
|
||||||
curl http://localhost:8080/actuator/health
|
docker logs api-gateway
|
||||||
|
docker logs user-service
|
||||||
# User Service
|
docker logs bill-service
|
||||||
curl http://localhost:8081/actuator/health
|
docker logs product-service
|
||||||
|
docker logs kos-mock
|
||||||
# Bill Service
|
|
||||||
curl http://localhost:8082/actuator/health
|
|
||||||
|
|
||||||
# Product Service
|
|
||||||
curl http://localhost:8083/actuator/health
|
|
||||||
|
|
||||||
# KOS Mock
|
|
||||||
curl http://localhost:8084/actuator/health
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## 재배포 방법
|
## 🔄 재배포 방법
|
||||||
|
|
||||||
### 1. 컨테이너 이미지 재생성 (로컬)
|
### 1. 컨테이너 이미지 재생성 (로컬에서 수행)
|
||||||
```bash
|
```bash
|
||||||
/deploy-build-image-back
|
/deploy-build-image-back
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. 컨테이너 이미지 푸시 (로컬)
|
### 2. 컨테이너 이미지 푸시 (로컬에서 수행)
|
||||||
각 서비스별로 실행:
|
|
||||||
```bash
|
```bash
|
||||||
# 예: User Service 재배포
|
# 각 서비스별로 수행
|
||||||
|
docker tag api-gateway:latest acrdigitalgarage01.azurecr.io/phonebill/api-gateway:latest
|
||||||
|
docker push acrdigitalgarage01.azurecr.io/phonebill/api-gateway:latest
|
||||||
|
|
||||||
docker tag user-service:latest acrdigitalgarage01.azurecr.io/phonebill/user-service:latest
|
docker tag user-service:latest acrdigitalgarage01.azurecr.io/phonebill/user-service:latest
|
||||||
docker push acrdigitalgarage01.azurecr.io/phonebill/user-service:latest
|
docker push acrdigitalgarage01.azurecr.io/phonebill/user-service:latest
|
||||||
|
|
||||||
|
docker tag bill-service:latest acrdigitalgarage01.azurecr.io/phonebill/bill-service:latest
|
||||||
|
docker push acrdigitalgarage01.azurecr.io/phonebill/bill-service:latest
|
||||||
|
|
||||||
|
docker tag product-service:latest acrdigitalgarage01.azurecr.io/phonebill/product-service:latest
|
||||||
|
docker push acrdigitalgarage01.azurecr.io/phonebill/product-service:latest
|
||||||
|
|
||||||
|
docker tag kos-mock:latest acrdigitalgarage01.azurecr.io/phonebill/kos-mock:latest
|
||||||
|
docker push acrdigitalgarage01.azurecr.io/phonebill/kos-mock:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. VM에서 컨테이너 중지 및 재시작
|
### 3. 컨테이너 중지 (VM에서 수행)
|
||||||
```bash
|
```bash
|
||||||
# 컨테이너 중지
|
docker stop api-gateway
|
||||||
docker stop user-service
|
docker stop user-service
|
||||||
|
docker stop bill-service
|
||||||
|
docker stop product-service
|
||||||
|
docker stop kos-mock
|
||||||
|
```
|
||||||
|
|
||||||
# 이미지 삭제 (새 버전 pull을 위해)
|
### 4. 컨테이너 이미지 삭제 (VM에서 수행)
|
||||||
|
```bash
|
||||||
|
docker rmi acrdigitalgarage01.azurecr.io/phonebill/api-gateway:latest
|
||||||
docker rmi acrdigitalgarage01.azurecr.io/phonebill/user-service:latest
|
docker rmi acrdigitalgarage01.azurecr.io/phonebill/user-service:latest
|
||||||
|
docker rmi acrdigitalgarage01.azurecr.io/phonebill/bill-service:latest
|
||||||
# 컨테이너 재실행 (위의 실행 명령 재사용)
|
docker rmi acrdigitalgarage01.azurecr.io/phonebill/product-service:latest
|
||||||
SERVER_PORT=8081
|
docker rmi acrdigitalgarage01.azurecr.io/phonebill/kos-mock:latest
|
||||||
docker run -d --name user-service --rm -p ${SERVER_PORT}:${SERVER_PORT} \
|
|
||||||
[환경변수들...] \
|
|
||||||
acrdigitalgarage01.azurecr.io/phonebill/user-service:latest
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## 트러블슈팅
|
### 5. 컨테이너 재실행 (VM에서 수행)
|
||||||
|
위의 "컨테이너 실행" 섹션의 명령어를 다시 실행
|
||||||
|
|
||||||
### 컨테이너 로그 확인
|
## ⚠️ 주의사항
|
||||||
```bash
|
|
||||||
# 실시간 로그 확인
|
|
||||||
docker logs -f {서비스명}
|
|
||||||
|
|
||||||
# 최근 로그 확인
|
1. **JWT_SECRET**: 실제 배포 시 보안이 강화된 비밀키로 변경 필요
|
||||||
docker logs --tail 100 {서비스명}
|
2. **CORS 설정**: 프론트엔드 주소가 변경되면 CORS_ALLOWED_ORIGINS도 함께 변경
|
||||||
```
|
3. **데이터베이스**: 실제 데이터베이스 서버 주소와 포트로 변경 필요
|
||||||
|
4. **Redis**: 실제 Redis 서버 주소와 포트로 변경 필요
|
||||||
|
5. **네트워크**: 컨테이너 간 통신을 위해 Docker 네트워크 구성 고려
|
||||||
|
6. **서비스 시작 순서**: kos-mock → user-service → bill-service → product-service → api-gateway 순서로 시작 권장
|
||||||
|
|
||||||
### 포트 사용 확인
|
## 🔗 서비스 접속 확인
|
||||||
```bash
|
|
||||||
# 포트 사용 상태 확인
|
|
||||||
netstat -tulpn | grep {포트번호}
|
|
||||||
```
|
|
||||||
|
|
||||||
### 네트워크 연결 테스트
|
- **API Gateway**: http://4.230.5.6:8080
|
||||||
```bash
|
- **User Service**: http://4.230.5.6:8081
|
||||||
# 서비스간 연결 테스트
|
- **Bill Service**: http://4.230.5.6:8082
|
||||||
curl http://localhost:{포트}/actuator/health
|
- **Product Service**: http://4.230.5.6:8083
|
||||||
```
|
- **KOS Mock**: http://4.230.5.6:8084
|
||||||
|
|
||||||
## 중요사항
|
|
||||||
|
|
||||||
1. **CORS 설정**: 모든 서비스의 CORS_ALLOWED_ORIGINS에 VM IP가 추가되어 있습니다 (`http://4.230.5.6:3000`)
|
|
||||||
2. **환경변수**: 모든 환경변수가 .run.xml 파일에서 추출되어 정확히 설정됩니다
|
|
||||||
3. **포트 매핑**: 각 서비스의 내부 포트와 호스트 포트가 동일하게 설정됩니다
|
|
||||||
4. **자동 재시작**: `--rm` 옵션으로 컨테이너 종료 시 자동 삭제됩니다
|
|
||||||
5. **백그라운드 실행**: `-d` 옵션으로 데몬 모드로 실행됩니다
|
|
||||||
|
|
||||||
이제 모든 백엔드 서비스가 VM에서 컨테이너로 실행될 준비가 완료되었습니다.
|
|
||||||
Loading…
x
Reference in New Issue
Block a user