스프린트4 배포환경 테스트
1. 테스트용 데이터베이스 초기화
1
| mysql -h [아이디].prgms-fullcycle.com -u prgms -p < init-test-db.sql
|
2. 데이터베이스 확인
1
| mysql -h [아이디].prgms-fullcycle.com -u prgms -p
|
- 데이터베이스 선택
1
| mysql> use prgms_notes;
|
- user 테이블 확인
1
2
3
4
5
6
7
| mysql> select * from users;
+----+------------------+--------------------------------------------------------------+
| id | email | encrypted_password |
+----+------------------+--------------------------------------------------------------+
| 1 | test@example.com | $2b$10$432oW5OwXPcHPcmyQghkxeICMi65DGPdFnDv21dJ2QU3CSj.xFbi6 |
+----+------------------+--------------------------------------------------------------+
1 row in set (0.01 sec)
|
3. BE 환경 설정 (.yaml
)
1
2
3
4
5
6
7
8
9
10
11
12
| apiVersion: v1
kind: ConfigMap
metadata:
name: notes-be-config
namespace: prgms-notes
data:
DB_HOST: hyemin.prgms-fullcycle.com
DB_USER: prgms
DATABASE_PASSWORD: prgms
DATABASE: prgms_notes
TOKEN_ISSUER: prgms
CORS_ALLOWED_ORIGIN: https://hyemin.prgms-fullcycle.com
|
4. FE 환경 설정 (.yaml
)
1
2
3
4
5
6
7
8
9
10
| spec:
containers:
- name: notes-frontend
image: hyeem66/prgms-fe:latest
imagePullPolicy: Always
ports:
- containerPort: 3000
env:
- name: REACT_APP_API_BASE_URL
value: https://hyemin.prgms-fullcycle.com/api
|
5. 시험배포
1
| kubectl config use-context [context]
|
1
| kubectl create namespace prgms-notes
|
- namespace 목록 가져오기
- backend 폴더에서
notes-be.yaml
파일 빌드
1
| kubectl apply -f notes-be.yaml
|
- frontend 폴더에서
notes-fe.yaml
파일 빌드
1
| kubectl apply -f notes-fe.yaml
|
1
| kubectl -n prgms-notes get all
|
1
| kubectl -n prgms-notes get pods
|
6. aws에 올린 이미지를 다운 받기
1
| kubectl create namespace prgms-notes
|
1
| kubectl apply-f notes-be.yaml
|
1
2
3
4
| kubectl -n prgms-notes get pods
NAME READY STATUS RESTARTS AGE
notes-be-558ff4dbb9-fmtgf 0/1 ErrImagePull 0 12s
|
no basic auth credentials
오류가 발생해서 이미지를 pull할 수 없는 상태
✅AWS 인증 토큰 받기
1
2
3
4
5
6
7
8
9
10
11
| aws ecr --region=ap-northeast-2 get-authorization-token
{
"authorizationData": [
{
"authorizationToken": "생략",
"expiresAt": "생략",
"proxyEndpoint": "생략"
}
]
}
|
- json 형태를 text 형태로 반환 + authorizationToken 값만 추출
1
2
3
| aws ecr --region=ap-northeast-2 get-authorization-token --output text --query "authorizationData[].authorizationToken"
(...)
|
✅리눅스 환경에서 토큰 디코드하고 저장하기
1
2
3
| aws ecr --region=ap-northeast-2 get-authorization-token --output text --query "authorizationData[].authorizationToken" | base64 --decode
AWS: (...)
|
1
2
3
| aws ecr --region=ap-northeast-2 get-authorization-token --output text --query "authorizationData[].authorizationToken" | base64 --decode| cut -d: -f2
(...)
|
1
| TOKEN=`aws ecr --region=ap-northeast-2 get-authorization-token --output text --query "authorizationData[].authorizationToken" | base64 --decode| cut -d: -f2`
|
✅윈도우 환경에서 토큰 디코드하고 저장하기
1
2
3
4
5
6
7
8
9
10
11
12
| # AWS CLI를 사용하여 ECR에서 인증 토큰을 가져옵니다.
$token = aws ecr get-authorization-token --region ap-northeast-2 --output json | ConvertFrom-Json
# Base64 디코딩 후 토큰을 추출합니다.
$decodedToken = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($token.authorizationData[0].authorizationToken))
# 토큰에서 필요한 부분을 추출합니다.
$finalToken = ($decodedToken -split ':')[1]
# 결과를 출력합니다.
Write-Output $finalToken
|
✅받은 토큰으로 kubernetes secrets 생성 및 확인하기
1
2
3
| kubectl -n prgms-notes create secret docker-registry [비밀번호 이름]--docker-server=[https://로 시작하는 서버 주소] --docker-username=[유저이름] --docker-password="$finalToken"
secret/[비밀번호 이름] created
|
비밀번호 확인
만약 -n prgms-notes 옵션을 사용하지 않았다면 다음 명령어를 입력하고,
1
2
3
4
| kubectl get secrets
NAME TYPE DATA AGE
[비밀번호 이름] kubernetes.io/dockerconfigjson 1 28s
|
-n prgms-notes
옵션을 사용했다면 다음 명령어를 사용하여 확인하면 됨
1
2
3
4
| kubectl get secrets -n prgms-notes
NAME TYPE DATA AGE
[비밀번호 이름] kubernetes.io/dockerconfigjson 1 28s
|
7. Manifest 파일에 비밀번호 적용
1
2
3
4
5
6
7
8
9
| spec:
containers:
- name: notes-backend
(...)
envFrom:
- configMapRef:
name: notes-be-config
imagePullSecrets:
- name: [비밀번호 이름]
|
1
2
3
4
5
6
7
8
9
| spec:
containers:
- name: notes-backend
(...)
envFrom:
- configMapRef:
name: notes-be-config
imagePullSecrets:
- name: [비밀번호 이름]
|
8. Manifest 실행
1
2
3
4
5
| kubectl apply -f notes-be.yaml
configmap/notes-be-config configured
deployment.apps/notes-be created
service/notes-be created
|
1
2
3
4
| kubectl apply -f notes-fe.yaml
deployment.apps/notes-fe created
service/notes-fe created
|
9. https
로 시작하는 사이트 들어가서 확인해보기
나의 경우에는 내가 작업한 프로젝트 컨테이너 이미지를 사용하지 않고, 강의에서 사용한 컨테이너 이미지를 다운받아서 적용함