Skip to content

Commit 68e7485

Browse files
authored
Merge pull request #113 from prgrms-web-devcourse-final-project/develop
Chore[배포]: .env 파일 변경
2 parents b8934ad + 8c055b5 commit 68e7485

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+46885
-150610
lines changed

.github/workflows/CI-CD_Pipeline.yml

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,13 @@ jobs:
4242
env:
4343
REDIS_PASSWORD: ""
4444

45+
# ✅ Qdrant 서비스 추가
46+
qdrant:
47+
image: qdrant/qdrant:v1.3.1
48+
ports:
49+
- 6333:6333
50+
- 6334:6334
51+
4552
steps:
4653
- uses: actions/checkout@v4
4754
- name: Set up JDK 21
@@ -62,6 +69,13 @@ jobs:
6269
timeout 10s bash -c 'until printf "" 2>>/dev/null >>/dev/tcp/localhost/6379; do sleep 1; done'
6370
echo "Redis is ready!"
6471
72+
# ✅ Qdrant 연결 테스트
73+
- name: Wait for Qdrant
74+
run: |
75+
echo "Waiting for Qdrant to be ready..."
76+
timeout 40s bash -c 'until curl -sSf http://localhost:6333/collections >/dev/null; do sleep 1; done'
77+
echo "Qdrant is ready!"
78+
6579
# ✅ application-test.yml에서 사용하는 모든 환경변수를 .env 파일에 생성
6680
- name: Create test .env file
6781
working-directory: backend
@@ -85,6 +99,10 @@ jobs:
8599
TEST_REDIS_PORT=6379
86100
TEST_REDIS_PASSWORD=
87101
102+
# Qdrant
103+
TEST_QDRANT_HOST=localhost
104+
TEST_QDRANT_PORT=6333
105+
88106
# CI/CD 환경에서는 Embedded Redis 끄기
89107
SPRING_DATA_REDIS_EMBEDDED=false
90108
@@ -228,12 +246,14 @@ jobs:
228246
set -xe
229247
echo "===== 현재 실행 중인 컨테이너 ====="
230248
docker ps -a || true
231-
249+
232250
echo "===== 기존 컨테이너 종료 & 제거 ====="
233251
docker stop app1 2>/dev/null || true
234252
docker rm app1 2>/dev/null || true
235-
# EC2 내부에서 prod.env 파일 생성
236-
cat > /home/ec2-user/prod.env << 'EOF'
253+
254+
# EC2 내부에서 prod.env 파일 생성 (기존 파일 있으면 덮어쓰기)
255+
mkdir -p /home/ec2-user/configs
256+
cat > /home/ec2-user/configs/prod.env << 'EOF'
237257
SPRING_PROFILES_ACTIVE=prod
238258
239259
CUSTOM_JWT_SECRET_KEY=${{ secrets.JWT_SECRET_KEY }}
@@ -243,7 +263,8 @@ jobs:
243263
PROD_DATASOURCE_DRIVER=com.mysql.cj.jdbc.Driver
244264
PROD_DATASOURCE_USERNAME=root
245265
PROD_DATASOURCE_PASSWORD=${{ secrets.DB_PASSWORD }}
246-
PROD_JPA_HIBERNATE_DDL_AUTO=update
266+
# 추후 validate 변경
267+
PROD_JPA_HIBERNATE_DDL_AUTO=update
247268
248269
PROD_REDIS_HOST=redis_1
249270
PROD_REDIS_PORT=6379
@@ -254,23 +275,26 @@ jobs:
254275
send_email_password=${{ secrets.EMAIL_PASSWORD }}
255276
EOF
256277
278+
# 파일 권한 최소화
279+
chmod 600 /home/ec2-user/configs/prod.env
280+
257281
# EC2에서 GHCR 로그인
258282
echo "${{ secrets.GHCR_PAT }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
259283
260284
# 최신 이미지 pull & 컨테이너 실행
261285
docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/${{ env.DOCKER_IMAGE_NAME }}:latest
262-
docker stop app1 2>/dev/null || true
263-
docker rm app1 2>/dev/null || true
264-
docker run --env-file /home/ec2-user/prod.env \
286+
287+
echo "===== 새로운 컨테이너 실행 ====="
288+
docker run --env-file /home/ec2-user/configs/prod.env \
265289
-d --name app1 \
266290
--network common \
291+
--restart unless-stopped \
267292
-p 8080:8080 \
268293
${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/${{ env.DOCKER_IMAGE_NAME }}:latest
269294
echo "===== 새 컨테이너 로그 출력 ====="
270295
sleep 5
271296
docker logs --tail=100 app1 || true
272297
273298
echo "===== 배포 완료 ====="
274-
# dangling image 정리 + .env 삭제
299+
# dangling image 정리
275300
docker rmi $(docker images -f "dangling=true" -q) || true
276-
rm -f /home/ec2-user/prod.env

backend/build.gradle

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ plugins {
66
id("org.jetbrains.kotlin.jvm") version "1.9.25"
77
id("com.google.devtools.ksp") version "1.9.25-1.0.20"
88
}
9+
ext {
10+
springAiVersion = "1.0.2"
11+
}
912

1013
group = 'com.ai.lawyer'
1114
version = '0.0.1-SNAPSHOT'
@@ -65,6 +68,12 @@ dependencies {
6568
implementation("io.github.openfeign.querydsl:querydsl-jpa:7.0")
6669
ksp("io.github.openfeign.querydsl:querydsl-ksp-codegen:7.0")
6770

71+
// AI
72+
implementation 'org.springframework.ai:spring-ai-starter-vector-store-qdrant'
73+
implementation 'org.springframework.ai:spring-ai-starter-model-openai'
74+
implementation 'org.springframework.ai:spring-ai-advisors-vector-store'
75+
implementation 'org.springframework.ai:spring-ai-starter-model-chat-memory-repository-jdbc'
76+
6877
// Testing (테스트)
6978
testImplementation 'org.springframework.boot:spring-boot-starter-test'
7079
testImplementation 'org.springframework.security:spring-security-test'
@@ -76,6 +85,11 @@ dependencies {
7685
exclude group: "commons-logging", module: "commons-logging"
7786
}
7887
}
88+
dependencyManagement {
89+
imports {
90+
mavenBom "org.springframework.ai:spring-ai-bom:$springAiVersion"
91+
}
92+
}
7993

8094
tasks.named('test') {
8195
useJUnitPlatform()

backend/docker-compose.yml

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@ services:
1616
- "${DEV_DATASOURCE_PORT:-3306}:3306"
1717
volumes:
1818
- mysql-data:/var/lib/mysql
19-
command: >
19+
- ./sql:/sql # 호스트 ./sql 폴더를 컨테이너 /sql에 마운트
20+
command: >
2021
--character-set-server=utf8mb4
2122
--collation-server=utf8mb4_0900_ai_ci
2223
--default-time-zone=Asia/Seoul
2324
--skip-log-bin
25+
--lower-case-table-names=1
2426
healthcheck:
2527
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-p${DEV_DATASOURCE_PASSWORD}"]
2628
interval: 10s
@@ -43,6 +45,20 @@ services:
4345
timeout: 5s
4446
retries: 10
4547

48+
qdrant:
49+
image: qdrant/qdrant
50+
container_name: qdrant-new
51+
restart: unless-stopped
52+
ports:
53+
- "6333:6333" # HTTP API
54+
- "6334:6334" # gRPC API
55+
healthcheck:
56+
test: [ "CMD", "curl", "-f", "http://localhost:6333/healthz" ]
57+
interval: 10s
58+
timeout: 5s
59+
retries: 10
60+
4661
volumes:
4762
mysql-data:
48-
redis-data:
63+
redis-data:
64+
qdrant-data:

0 commit comments

Comments
 (0)