1. api 요청이 안가요

https://github.com/EdenKim-dev/krampoline_step4_v2

 

GitHub - EdenKim-dev/krampoline_step4_v2

Contribute to EdenKim-dev/krampoline_step4_v2 development by creating an account on GitHub.

github.com

이 예제를 사용했다면 이 프로젝트 

krampoline_step4_v2/k8s/configs/default.conf 이 파일로 가보자

 

보면

 

server {
	listen 80;

        location / {
            proxy_pass http://frontend.default.svc.cluster.local:3000;
        }

        location /api/ {
            proxy_pass http://backend.default.svc.cluster.local:8080;
	}
}

이런식으로 되어있는데,

/으로 오는 요청은 다 프론트에서 처리를하고

내_주소.com/api/내_백엔드_url

로 만들어줘야 백엔드가 정상적으로 작동을 한다.

 

다시말해서 컨트롤러의 모든 url매핑 앞에 /api/를 붙여줘야한다는건데,

이건 application.yml에서 설정 할 수있다.

 

2. 크램폴린 사이트가 접속이 안돼요

내 경우에는 크램폴린을 오래 사용하다보면

갑자기 크램폴린 사이트가 먹통이 됐다.

 

내 문제인가 싶었는데, 아무래도 오래 사용하면 ip밴이 되는것 같다.

 

그래서 cmd 창에서

 

ipconfig /release

해주고

 

ipconfig /renew 했더니 정상적으로 접속이 됐다.

 

3. pull request 요청이 초과했다면서 이미지 빌드가 안돼요.

도커서버에서 이미지파일을 못받아 오는 오류이다

해결 방법에는 여러가지가 있는데,

# Microsoft Container Registry에서 제공하는 Java 17의 Base 이미지 선택
FROM mcr.microsoft.com/openjdk/jdk:17-ubuntu

마이크로소프트 컨테이너에서 제공하는 이미지파일을 가져오게 도커파일을 수정

 

혹은 

 

FROM public.ecr.aws/docker/library/mariadb:latest

이런식으로 

https://gallery.ecr.aws/docker/library에서 제공하는 이미지 파일을 가져오게 도커파일을 수정하자

우선 

https://github.com/EdenKim-dev/krampoline_step4_v2

 

GitHub - EdenKim-dev/krampoline_step4_v2

Contribute to EdenKim-dev/krampoline_step4_v2 development by creating an account on GitHub.

github.com

이 예제 파일을 나도 사용했기때문에 이 예제 파일 기준으로 설명하려고 한다.

이 예제파일을 Kargo 배포파일 이라고 하겠다.

 

1. 파일 설명

이 예제 파일에서 도커 파일은 단순하게 마리아 db 이미지를 설치하는 도커파일이다

이 리포지토리를 포크한다음에

d2hub에 넣어서 빌드까지 해주자.

 

 

이제부터 조금 어려울 수 있다.

 

2. 예제파일 수정

D2hub에 예제 파일까지 넣고, 프론트엔드 이미지파일, 백엔드 이미지 파일까지 넣었다면

이런 상황일것이다.

이제 여기서 포크 뜬 Kargo 배포파일을 잘 수정해줘야 한다.

 

2-1. 이미지 파일 등록

Kargo 배포파일을 열면 이런 구조로 되어있을것이다.

우선 backend.yaml부터 수정해보자

 

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
spec:
  selector:
    matchLabels:
      app: backend
  template:
    metadata:
      labels:
        app: backend
    spec:
      containers:
        - name: backend
          # 여러분의 backend image 주소를 입력해주세요.
          image: krmp-d2hub-idock.9rum.cc/dev-test/repo_60e6d4daecb5
          env:
            - name: TZ
              value: Asia/Seoul
            - name: DATABASE_URL
              value: jdbc:mariadb://mariadb:3306/krampoline
          resources:
            requests:
              memory: 1Gi
          readinessProbe:
            httpGet:
              path: /api/test
              port: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: backend
spec:
  selector:
    app: backend
  ports:
    - port: 8080
      targetPort: 8080

 

여기서 주석처리 된 부분 아래에

image: krmp-d2hub-idock.9rum.cc/dev-test/repo_60e6d4daecb5 이 부분을 수정해줘야한다.

 

여기서 전체삭제 아래에 휴지통 옆에 복사 버튼이 보일것이다.

저걸 누르면 이미지파일 경로가 복사가 된다.

복사해서 krmp-d2hub-idock.9rum.cc/dev-test/repo_60e6d4daecb5 이부분을 덮어쓰기 해주자

 

그리고 아래에

 

          readinessProbe:
            httpGet:
              path: /api/test 
              port: 8080

 

이 부분을 삭제해주자

 

 

2-2. front.yaml 수정

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend
spec:
  selector:
    matchLabels:
      app: frontend
  template:
    metadata:
      labels:
        app: frontend
    spec:
      containers:
        - name: frontend
          # 여러분의 frontend image 주소를 입력해주세요.
          image: krmp-d2hub-idock.9rum.cc/dev-test/repo_a15a0d7a955a
---
apiVersion: v1
kind: Service
metadata:
  name: frontend
spec:
  selector:
    app: frontend
  ports:
    - port: 3000
      targetPort: 3000

 

이것도 위의 과정과 똑같다.

프론트엔드 이미지파일 복사해서

덮어쓰기 해주면 된다.

 

2-3. mariadb.yaml 수정

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mariadb
spec:
  serviceName: mariadb
  selector:
    matchLabels:
      app: mariadb
  template:
    metadata:
      labels:
        app: mariadb
    spec:
      containers:
        - name: mariadb
          # 여러분의 mariadb image 주소를 입력해주세요.
          image: krmp-d2hub-idock.9rum.cc/dev-test/repo_7507979f9c02
          env:
            - name: TZ
              value: Asia/Seoul
            - name: MARIADB_ROOT_PASSWORD
              value: root
            - name: MARIADB_DATABASE
              value: krampoline
            - name: MARIADB_DISABLE_UPGRADE_BACKUP
              value: '1'
          volumeMounts:
            - mountPath: /var/lib/mysql
              name: data
              subPath: mysql
            - mountPath: /docker-entrypoint-initdb.d
              name: init-db
          resources:
            limits:
              memory: 1Gi
          readinessProbe:
            tcpSocket:
              port: 3306
      volumes:
        - name: init-db
          configMap:
            name: init-db
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
  name: mariadb
spec:
  type: ClusterIP
  clusterIP: None # Headless
  selector:
    app: mariadb
  ports:
    - port: 3306

 

이 부분은 db의 이미지파일 경로를 복사해서 붙여넣기 해주자.

 

여기까지 다 했으면 깃 커밋하고 푸시해주자

 

3. 카르고 앱 배포

이제 카르고 앱 배포를 하면 되는데,

아시다시피 우리는 마리아db 도커파일이 있는 리포지토리와 Kargo 배포파일은 똑같은 리포지토리이다!

 

그러니 git 선택을 마리아 db를 선택해주면 된다.

 

그리고 마지막으로 위쪽에 배포하기가 있는데, 배포하기를 누르면 된다.

이제 본격적으로 크램폴린 ide를 이용해서 배포를 해보려고 한다.

 

우선 내 추천은 작업중인 파일을 깃허브 private하게 '나의' 리포지토리로 포크 해오는것을 추천한다.

 

깃허브에서 뭐 권한 설정하고 하는것보다 이게 제일 빨랐다.

 

이제 도커파일을 만들어보자

도커파일 경로는 이렇게 root 디렉토리에 있으면 된다.

 

도커파일은

# 도커파일 jdk17 가져오기
FROM openjdk:17

# 이미지 내에서 애플리케이션 파일을 보관할 디렉토리 생성 및 설정
WORKDIR /app

# 빌드 결과물인 JAR 파일을 Docker 이미지 안으로 복사
COPY ./build/libs/'프로젝트_파일_이름'.jar /app/

# 컨테이너가 시작될 때 실행할 명령 설정
CMD ["java", "-jar", "/app/'프로젝트_파일_이름'.jar"]

이렇게 만들자

 

도커파일을 왜 이렇게 만들었냐면 

gradle을 크램폴린에서 처리하는게 너무 귀찮았다.

 

이제부터 살짝 복잡하다.

 

1. application.yml 수정하기

  datasource:
    driver-class-name: org.mariadb.jdbc.Driver
    url: jdbc:mariadb://mariadb:3306/krampoline?allowPublicKeyRetrieval=true&useSSL=false
    username: root
    password: root

application.yml 이든 properties 파일이든, 데이터베이스와 연결하는 부분을 이렇게 수정하자

 

(만약 기존에 사용하던 외부데이터베이스가 있으면 그대로 냅두셔도 되는데, 잘될지는 미지수다. 

쿠버네티스 환경에서 막힐 가능성도 어느정도 존재한다...)

 

2. .gitignore 수정하기

git ignore에서 build 를 삭제해주자. 빌드파일을 깃허브에 올려야 된다.

 

3. 프로젝트 빌드하기

 

인텔리제이 환경을 기준으로 옆에 gradle을 눌러서 gradle 메뉴를 출력해서

사진의 경로로 가면 bootjar가 있다.

bootjar를 실행해주자

 

 

그렇다면 이렇게 build 경로에 libs 안에 jar파일이 생성될텐데

이 파일이 아까 도커 파일에서

'프로젝트_파일_이름'.jar 인 파일이다.

 

도커파일을 내 파일에 맞춰서 수정해주자.

 

4. 깃허브 커밋 & 푸시 하기

말그대로 깃허브에 커밋하고 푸시하면 된다.

 

만약에 뭐 위험하다느니, 안올라간다느니 하면 99% 깃허브 레포지토리를 퍼블릭으로 설정해서 그런거다.

 

깃허브 레포지토리를 프라이빗으로 설정해서 올려보자

 

5. 크램폴린 ide에서 이미지파일 빌드하기

이제 크램폴린 D2Hub에서 내가 올린 깃허브를 가져오면 된다.

깃허브 로그인하고 가져오면 된다.

 

(깃허브에 제가 푸시한 리포지토리가 안보여요 =>

아직까지 잘은 모르겠지만, 내 조직의 public 리포지토리, 그리고 내 public & private 리포지토리들밖에 못가져오는 것처럼 보인다.

만약 내가 푸쉬한 깃허브 리포지토리가 안보인다면 혹시 조직의 private 리포지토리에 푸쉬한건 아닌지 생각해보자)

 

성공적으로 올렸다면 올린 이미지파일을 들어가서

빌드하기 버튼을 눌러보자!

크램폴린 ide는 프록시 설정을 써야돼서 일반적인 방법으로는 빌드하기가 어렵다.

 

그런데 내 크램폴린 ide가 이미 올라와있는 관계로 가이드라인 이미지를 보고 설명하려고 한다.

 

참고로 가이드라인 이미지와 지금 크램폴린은 많이 다르다.

 

 

우선 컨테이너 생성하기를 누르면 이런 화면이 뜰 것이다.

지금과 많이 UI가 다를텐데, 내가 불러오고 싶은 리포지토리를 깃허브에서 불러오고

 

소프트웨어 스택에서 스프링을 선택하자

 

이게 정신건강상에 좋았다.

 

 

그럼 이런 화면이 뜰텐데

여기서 내 프로젝트를 빌드하는 방법을 알려주겠다.

만약 오른쪽 상단에서 스프링 프로젝트 실행하기를 눌러서 정상적으로 빌드 & 실행이 된다면 그냥 넘어가면 된다.

 

 

일단 내 경우에는 빌드가 제대로 안됐는데, 오류 해결하는게 굉장히 버거웠다.

 

그래서 내가 선택한 방법은

우선 터미널에 chmod +x gradlew 를 쳐준다

그리고 ./gradlew build 했더니 정상적으로 빌드가 됐다.

 

빌드가 잘 됐다고 로컬 개발환경처럼 메인 소스코드를 실행하려고 하면 안된다.

 

내 경우에는 빌드 결과가 오른쪽 파일트리에 바로 반영이 안돼서 고생했는데

 

터미널창에서 cd build/libs 해보자(cd libs일수도 있다.)거기서 ls 하면 파일이 나오는데 거기'자기_프로젝트명'.jar 파일이 있으면 빌드에 성공한거다.

 

그러면 그대로 터미널에서 java -jar '자기_프로젝트명'.jar 하면프로젝트가 정상적으로 실행이 된다.

 

 

 

PS.이 소스파일을 보면 대충 크램폴린 상에서 gradle 빌드가 어떻게 되는지 알 수 있다.기술스택 SPRING 으로 하면 프록시 설정이 자동으로 들어가는것으로 보인다.

# gradle:7.3.1-jdk17 이미지를 기반으로 함
FROM krmp-d2hub-idock.9rum.cc/goorm/gradle:7.3.1-jdk17

# 작업 디렉토리 설정
WORKDIR /home/gradle/project

# Spring 소스 코드를 이미지에 복사
COPY . .

# gradle 빌드 시 proxy 설정을 gradle.properties에 추가
RUN echo "systemProp.http.proxyHost=krmp-proxy.9rum.cc\nsystemProp.http.proxyPort=3128\nsystemProp.https.proxyHost=krmp-proxy.9rum.cc\nsystemProp.https.proxyPort=3128" > /root/.gradle/gradle.properties

# gradlew를 이용한 프로젝트 필드
RUN ./gradlew clean build

# DATABASE_URL을 환경 변수로 삽입
ENV DATABASE_URL=jdbc:mariadb://mariadb/krampoline

# 빌드 결과 jar 파일을 실행
CMD ["java", "-jar", "-Dspring.profiles.active=prod", "/home/gradle/project/build/libs/kakao-1.0.jar"]

출처 : https://github.com/EdenKim-dev/krampoline_step3_v2

 

GitHub - EdenKim-dev/krampoline_step3_v2

Contribute to EdenKim-dev/krampoline_step3_v2 development by creating an account on GitHub.

github.com

 

 

구름 프로젝트를 듣고있는데

크램폴린ide 라는 환경을 이용해야 했다.

 

나중에 안 사실인데, 크램폴린 ide를 사용해서 빌드 할 필요는 없지만
우여곡절 끝에 알아낸 사실들을 다 정리 해보려고 한다.

 

일단 기본 크램폴린의 패키지 다운로드 속도는 너무 느리다.

나는 처음에 너무 느려서 네트워크 오류인줄 알았다.

 

우선 터미널을 열어서 

이 경로로 가주자

(cd /etc/apt 하면 된다)

거기서  sudo vim sources.list 해주자

그러면 소스트리가 쫙 나올텐데

 

그 소스트리를 쭉 드래그 하던지, 아니면 한줄한줄 지우던지
(d를 누르면 지워진다)

 

한다음에 이 코드를 붙여넣기하자

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://mirror.kakao.com/ubuntu/ bionic main restricted
# deb-src http://mirror.kakao.com/ubuntu/ bionic main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://mirror.kakao.com/ubuntu/ bionic-updates main restricted
# deb-src http://mirror.kakao.com/ubuntu/ bionic-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://mirror.kakao.com/ubuntu/ bionic universe
# deb-src http://mirror.kakao.com/ubuntu/ bionic universe
deb http://mirror.kakao.com/ubuntu/ bionic-updates universe
# deb-src http://mirror.kakao.com/ubuntu/ bionic-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://mirror.kakao.com/ubuntu/ bionic multiverse
# deb-src http://mirror.kakao.com/ubuntu/ bionic multiverse
deb http://mirror.kakao.com/ubuntu/ bionic-updates multiverse
# deb-src http://mirror.kakao.com/ubuntu/ bionic-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://mirror.kakao.com/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src http://mirror.kakao.com/ubuntu/ bionic-backports main restricted universe multiverse

## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu bionic partner
# deb-src http://archive.canonical.com/ubuntu bionic partner

deb http://security.ubuntu.com/ubuntu/ bionic-security main restricted
# deb-src http://security.ubuntu.com/ubuntu/ bionic-security main restricted
deb http://security.ubuntu.com/ubuntu/ bionic-security universe
# deb-src http://security.ubuntu.com/ubuntu/ bionic-security universe
deb http://security.ubuntu.com/ubuntu/ bionic-security multiverse
# deb-src http://security.ubuntu.com/ubuntu/ bionic-security multiverse

 

 

그 다음에 esc누르면

 

이런 상태가 될텐데 그대로 wq 쳐서 저장하고 나오자

 

그런다음에 sudo apt update해서 잘되는지 확인

 

+ Recent posts