Skip to content

1oT-organization/itty-infra

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

36 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

CI/CD ๋ฌธ์„œ

๋‚ ์งœ: 2024๋…„ 4์›” 16์ผ ์ƒํƒœ: ์ง„ํ–‰ ์ค‘

1. Backend

1.1. BackEnd Server Docker ์ด๋ฏธ์ง€ ์ƒ์„ฑ

1.1.1. build.gradle ์— Jasypt ์˜์กด์„ฑ ์ถ”๊ฐ€

๐Ÿšจ jasypt 3.0.5 ๋ณด๋‹ค ์ด์ „ ๋ฒ„์ „์—์„œ๋Š” ๋นŒ๋“œ ์ปค๋งจ๋“œ๊ฐ€ ์ž˜ ์ž‘๋™ํ•˜์ง€ ์•Š์•„ ํ˜„์žฌ ์ตœ์‹  ๋ฒ„์ „์ธ 3.0.5 ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค.
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5'

tasks.named('test') {
	useJUnitPlatform()
	systemProperty 'jasypt.encryptor.password', findProperty("jasypt.encryptor.password")
}

1.1.2. Dockerfile์— jasypt ๊ด€๋ จ ๋‚ด์šฉ ์ถ”๊ฐ€

FROM openjdk:17-alpine
COPY build/libs/*.jar app.jar

ENTRYPOINT ["java", "-jar", "app.jar", "--jasypt.encryptor.password=itty"]

1.1.3. build ํŒŒ์ผ ์ƒ์„ฑ

Untitled

๐Ÿšจ ์„ค์ •ํŒŒ์ผ์ธ application.yml์˜ ๋ฏผ๊ฐ์ •๋ณด๋“ค์„ ์•”ํ˜ธํ™”ํ•˜์—ฌ Github์— ์—…๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•ด Jasypt๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

์ด๋กœ ์ธํ•ด ์•”ํ˜ธํ™”๋œ ๋ฏผ๊ฐ์ •๋ณด๋“ค์„ ๋‹ค์‹œ ๋ณตํ˜ธํ™”ํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์ด ์ธ์‹ํ•˜๋„๋ก ํ”„๋กœ๊ทธ๋žจ ์™ธ๋ถ€์—์„œ ๋ณตํ˜ธํ™” key๋ฅผ ์ „๋‹ฌํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ,

๊ทธ key๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ CLI ํ™˜๊ฒฝ์—์„œ ๋นŒ๋“œํ•˜๋Š” ๋ช…๋ น์— key ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์„ ํƒํ•˜์˜€๋‹ค.

gradle์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ ์‹œ -P ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

./gradlew clean build -P jasypt.encryptor.password=itty
  • clean: ๊ธฐ์กด์— ๋งŒ๋“ค์–ด์ง„ build๋ฅผ ์ง€์šด ํ›„, ์ƒˆ build ํŒŒ์ผ์„ ์ƒ์„ฑ

1.1.4. Docker Hub ๋กœ๊ทธ์ธ

docker login

1.1.5. Docker์— Dockerfile (image) ์ƒ์„ฑํ•˜๊ธฐ

docker build -t eodud3196/backend_server .
  • Docker์— eodud3196/backend_server ๋ผ๋Š” ์ด๋ฆ„์˜ Dockerfile(image)๋ฅผ ์ƒ์„ฑ
  • ์ด๋•Œ [eodud3196]์€ ๋ณธ์ธ์˜ DockerHub ์•„์ด๋””๋กœ ์ž‘์„ฑ
  • ๋งˆ์ง€๋ง‰์— .์„ ๋ถ™์ด๋Š” ์ด์œ : ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— ์กด์žฌํ•˜๋Š” Dockerfile์„ ๊ธฐ์ค€์œผ๋กœ image ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค๋Š” ์˜๋ฏธ

1.1.6. Docker์— image Push(์ด๋ฏธ์ง€ ๋ฐฐํฌ)

docker push eodud3196/backend_server
  • ์ƒ์„ฑํ•œ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ๋„์ปค์— ํ‘ธ์‹œ

1.1.7. manifest ํŒŒ์ผ ์ƒ์„ฑ

1.1.8. kubelet์— deployment ์ ์šฉํ•˜์—ฌ Pod ์ƒ์„ฑ(์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ)

kubectl apply -f itty-project-deployment.yml

1.1.9. Proxy์— service ์ ์šฉ

kubectl apply -f itty-project-service.yml

2. Frontend

npm install
  • ํ•„์š”ํ•œ ๋ชจ๋“  ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๊ณ , ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ์‚ฐ ํ™˜๊ฒฝ์—์„œ ์ œ๋Œ€๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑ
  • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ๋””๋ฒ„๊น…์„ ์œ„ํ•œ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ, ๋ฐฐํฌ ์‹œ์—๋Š” ์ตœ์ ํ™”๋œ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•จ. **npm install**์€ ํ•„์š”ํ•œ ๋ชจ๋“  ํ™˜๊ฒฝ ์„ค์ • ํŒŒ์ผ๊ณผ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์„ค์น˜ํ•˜๋ฉฐ, ์ด๋Š” ๋ฐฐํฌ ๊ณผ์ •์—์„œ ์ฝ”๋“œ๋ฅผ ์ตœ์ ํ™”ํ•˜๊ณ , ํ•„์š”ํ•œ ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜๋„๋ก ํ•จ
  • ์—ฌ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ
npm install axios
  • HTTP ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์ธ API๋ฅผ ์ œ๊ณต
  • ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ๊ด€๋ฆฌ
  • ๋ชจ๋“  ์ฃผ์š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•˜๋ฉฐ, ์˜ค๋ž˜๋œ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ์ž๋™ ๋ณ€ํ™˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณต
  • JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ํŒŒ์‹ฑํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์‘๋‹ต์„ ์ฆ‰์‹œ ๊ฐ์ฒด๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ
npm run dev
  • ๋ฐฐํฌ ๋ฐ›์€ Vue ํŒŒ์ผ ์‹คํ–‰ (Localhost:(ํฌํŠธ๋ฒˆํ˜ธ) ๋กœ ์ง€์ •)

3. Redis

๐Ÿ’ก Spring Security ๋กœ๊ทธ์ธ ํ† ํฐ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ Redis ์„œ๋ฒ„ Kubernetes ์‹คํ–‰ ๊ณผ์ •

3.1. manifest ํŒŒ์ผ ์ƒ์„ฑ

  • redis ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ

  • Kubernetes ์‹คํ–‰์„ ์œ„ํ•œ yml ํŒŒ์ผ ์ž‘์„ฑ

    redis-configmap.yml

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ •์„ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฆฌ์†Œ์Šค

    redis-dep.yml

    redis-svc.yml

      externalIPs:
      - 192.168.0.31
    • service ํŒŒ์ผ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด IP๋ฅผ ์„ค์ •ํ•จ
    • Backend Server์—์„œ 192.168.0.31:6379๋ฅผ ์ด์šฉํ•˜์—ฌ ์„œ๋กœ ํ†ต์‹  ๊ฐ€๋Šฅ ํ•˜๊ฒŒ ์ ์šฉ

3.2. Kubernetes Redis ์‹คํ–‰

kubectl apply -f redis/
  • redis ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ–์—์„œ ์œ„์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ ํ•˜๋ฉด 3๊ฐœ์˜ .yml ํŒŒ์ผ์ด ์‹คํ–‰ ๋จ

4. MariaDB

4.1 Backend ์„œ๋ฒ„์™€ ํ†ต์‹ ์„ ์œ„ํ•œ MariaDB Docker ์ด๋ฏธ์ง€ ์ƒ์„ฑ

4.1.1 Dockerfile ์ƒ์„ฑ

Dockerfile

  • ํ•ด๋‹น ํŒŒ์ผ์€ MariaDB ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•จ.
  • ์ดˆ๊ธฐํ™” ์ž‘์—…์€ ๋นŒ๋” ์Šคํ…Œ์ด์ง€์—์„œ ์ˆ˜ํ–‰๋˜๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ๋กœ ์ดˆ๊ธฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋จ
  • ๋‹ค์Œ ์ดˆ๊ธฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ธฐ๋ณธ MariaDB ์ด๋ฏธ์ง€๋กœ ๋ณต์‚ฌํ•˜์—ฌ ์ตœ์ข… ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑ

setup.sql

  • ํ•ด๋‹น ํŒŒ์ผ์€ itty Database DDL๋ฌธ์œผ๋กœ Docker ์ด๋ฏธ์ง€ ์ดˆ๊ธฐ ์„ธํŒ…ํ•  DB์ด๋‹ค.

4.1.2 Docker์— Dockerfile (image) ์ƒ์„ฑํ•˜๊ธฐ

docker build -t {DB image name}

4.1.3 Docker์— image Push(์ด๋ฏธ์ง€ ๋ฐฐํฌ)

docker push {DB image name}

4.2.1 manifest ํŒŒ์ผ ์ƒ์„ฑ

  • db ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ

  • Kubernetes ์‹คํ–‰์„ ์œ„ํ•œ yml ํŒŒ์ผ ์ž‘์„ฑ

    itty-db-volume.yml

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ •์„ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฆฌ์†Œ์Šค

    itty-db-deployment.yml

    itty-db-service.yml

      externalIPs:
      - 192.168.0.30
    • service ํŒŒ์ผ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด IP๋ฅผ ์„ค์ •ํ•จ
    • Backend Server์—์„œ 192.168.0.30:3306์„ ์ด์šฉํ•˜์—ฌ ์„œ๋กœ ํ†ต์‹  ๊ฐ€๋Šฅ ํ•˜๊ฒŒ ์ ์šฉ

4.2.2 Kubernetes MariaDB์‹คํ–‰

kubectl apply -f db/
  • redis ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ–์—์„œ ์œ„์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ ํ•˜๋ฉด 3๊ฐœ์˜ .yml ํŒŒ์ผ์ด ์‹คํ–‰ ๋จ

5. Prometheus

๐Ÿ’ก Prometheus๋Š” ์‹œ์Šคํ…œ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๊ฒฝ๊ณ  ํˆดํ‚ท์ด๋ฉฐ, ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งคํŠธ๋ฆญ ์ˆ˜์ง‘ ๋ฐ ๋Œ€์‹œ๋ณด๋“œ ๊ตฌ์ถ•์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์‹ค์‹œ๊ฐ„์œผ๋กœ ์‹œ์Šคํ…œ์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ , ๋‹ค์–‘ํ•œ ์ง€ํ‘œ๋ฅผ ์ˆ˜์ง‘ํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ๋ณด์žฅ ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

5.1. manifest ํŒŒ์ผ ์ƒ์„ฑ

  • Prometheus ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ

  • Kubernetes ์‹คํ–‰์„ ์œ„ํ•œ yml ํŒŒ์ผ ์ž‘์„ฑ

    prometheus-configmap.yml

    • ํ˜„์žฌ ์ด ์‹œ์Šคํ…œ์—์„œ๋Š” Backend์™€ Jenkins Server ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ง„ํ–‰ํ•จ.
        scrape_configs:
          - job_name: prometheus
            metrics_path: '/actuator/prometheus'
            static_configs:
              - targets: ['10.1.1.67:8888']       
    
          - job_name: jenkins
            metrics_path: '/prometheus/'
            static_configs:
              - targets: ['083f-183-109-114-170.ngrok-free.app']
            scheme: https
    • Backend ์„œ๋ฒ„๋ฅผ k8s๋กœ ์‹คํ–‰์‹œํ‚จ ํ›„ kubectl describe {backend pods ์ด๋ฆ„}์„ ํ†ตํ•ด IP๋ฅผ ํ™•์ธํ•จ.
    • ํ•ด๋‹น IP๋ฅผ prometheus.static_configs.targes ์ชฝ์— port 8888๋กœ ์ˆ˜์ •ํ•จ.
    • jenkins ์„œ๋ฒ„ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•ด imac์œ„์—์„œ ๋™์ž‘ํ•˜๊ณ  ์žˆ๋Š” jenkins๋ฅผ ngrok์„ ํ†ตํ•ด ์ฃผ์†Œ๋ฅผ Backend์„œ๋ฒ„ targets ์ˆ˜์ •ํ•œ๊ฒƒ ์ฒ˜๋Ÿผ ์ˆ˜์ •ํ•œ๋‹ค.

    prometheus-service.yml

    prometheus-deployment.yml

    • service ํŒŒ์ผ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด IP๋ฅผ ์„ค์ •ํ•จ
    • Backend Server์—์„œ 192.168.0.31:6379๋ฅผ ์ด์šฉํ•˜์—ฌ ์„œ๋กœ ํ†ต์‹  ๊ฐ€๋Šฅ ํ•˜๊ฒŒ ์ ์šฉ

5.2. Kubernetes Prometheus ์‹คํ–‰

kubectl apply -f prometheus/
  • redis ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ–์—์„œ ์œ„์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ ํ•˜๋ฉด 3๊ฐœ์˜ .yml ํŒŒ์ผ์ด ์‹คํ–‰ ๋จ

5.3. ์‹คํ–‰ ํ™•์ธ

  • ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ localhost:30090์„ ์‹คํ–‰ํ•จ.
  • targets์— ๋“ค์–ด๊ฐ€ jenkins, backend๊ฐ€ configmap์—์„œ ์„ค์ •ํ•œ ์ฃผ์†Œ๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•จ

6. Grafana

๐Ÿ’ก ์‹œ๊ณ„์—ด ๋งคํŠธ๋ฆญ ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™” ํ•˜๋Š”๋ฐ ๊ฐ€์žฅ ์ตœ์ ํ™”๋œ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š” ์˜คํ”ˆ์†Œ์Šค ํˆดํ‚ท. Prometheus์—์„œ ์ „๋‹ฌํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋Œ€์‹œ๋ณด๋“œ์— ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•จ์œผ๋กœ์จ, ๊ด€๋ฆฌ์ž๋Š” ์‹ค์‹œ๊ฐ„์œผ๋กœ ์„œ๋น„์Šค์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ณ  ์ด์ƒ ํ˜„์ƒ์„ ์ฆ‰์‹œ ํŒŒ์•… ๊ฐ€๋Šฅ ํ•จ.

6.1. manifest ํŒŒ์ผ ์ƒ์„ฑ

  • grafana ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ

  • Kubernetes ์‹คํ–‰์„ ์œ„ํ•œ yml ํŒŒ์ผ ์ž‘์„ฑ

    grafana-volume.yml

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ •์„ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฆฌ์†Œ์Šค

    grafana-deployment.yml

    grafana-service.yml

6.2. Kubernetes Redis ์‹คํ–‰

kubectl apply -f grafana/
  • redis ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ–์—์„œ ์œ„์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ ํ•˜๋ฉด 3๊ฐœ์˜ .yml ํŒŒ์ผ์ด ์‹คํ–‰ ๋จ

6.3. Dashboards ์ƒ์„ฑ

  • localhost:30000์œผ๋กœ ์ ‘์†ํ•จ.
  • Prometheus์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†ก๋ฐ›๊ธฐ ์œ„ํ•ด data source โ†’ prometheus ํด๋ฆญ

Untitled

  • kubectl describe {prometheus pod ์ด๋ฆ„}์„ ํ†ตํ•ด ์•Œ์•„๋‚ธ ip์ฃผ์†Œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

    • http://{pod ์ฃผ์†Œ}:9090
  • Dashboards ์ƒˆ์„ฑ imports๋ฅผ ํ†ตํ•ด ๋ชจ๋‹ˆํ„ฐ๋ง ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์ƒ์„ฑ ๊ฐ€๋Šฅ ํ•จ.

    Untitled

    • 19004 โ†’ Spring Boot 3.x Statistics
    • 12646 โ†’ Jenkins

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •