Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 7 additions & 30 deletions .github/workflows/dev-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -108,14 +108,11 @@ jobs:
scp -i deploy_key.pem \
-o StrictHostKeyChecking=no \
./docker-compose.dev.yml \
./docs/infra-config/config.alloy \
./docs/infra-config/nginx.dev.conf \
${{ secrets.DEV_USERNAME }}@${{ secrets.DEV_HOST }}:/home/${{ secrets.DEV_USERNAME }}/solid-connection-dev/

# --- 서버에서 Docker Pull 및 재시작 ---
- name: Run docker compose and apply nginx config
- name: Run deployment on server
run: |
# GITHUB_TOKEN을 이용해 서버에서 로그인 (App Token 불필요)
ssh -i deploy_key.pem \
-o StrictHostKeyChecking=no \
${{ secrets.DEV_USERNAME }}@${{ secrets.DEV_HOST }} \
Expand All @@ -127,38 +124,18 @@ jobs:
export IMAGE_TAG_ONLY="${{ needs.build-and-push.outputs.image_tag }}"
export FULL_IMAGE_NAME="ghcr.io/${OWNER_LOWERCASE}/solid-connection-dev:${IMAGE_TAG_ONLY}"

# 2. 서버가 GHCR에 로그인 (GITHUB_TOKEN 사용)
# App Token 대신 현재 워크플로우의 임시 토큰을 넘겨줍니다.
# 2. GHCR 로그인 & Pull
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin

# 3. Docker Pull
echo "Pulling new image: $FULL_IMAGE_NAME"
docker pull $FULL_IMAGE_NAME

# 4. alloy 설정 및 Nginx 설정 적용
cd /home/${{ secrets.DEV_USERNAME }}/solid-connection-dev

mkdir -p ./docs/infra-config

if [ -d "./docs/infra-config/config.alloy" ]; then
echo "Removing directory created by Docker..."
rm -rf ./docs/infra-config/config.alloy
fi

mv -f ./config.alloy ./docs/infra-config/config.alloy

mkdir -p ./nginx
mv ./nginx.dev.conf ./nginx/default.conf
sudo cp ./nginx/default.conf /etc/nginx/conf.d/default.conf
sudo nginx -t
sudo nginx -s reload

# 5. Docker Compose 재시작
# 3. Spring Boot 앱 재시작
echo "Restarting Docker Compose with tag: $IMAGE_TAG_ONLY"
docker compose -f docker-compose.dev.yml down
IMAGE_TAG=$IMAGE_TAG_ONLY docker compose -f docker-compose.dev.yml up -d
cd /home/${{ secrets.DEV_USERNAME }}/solid-connection-dev
docker compose -f docker-compose.dev.yml down || true
OWNER_LOWERCASE=$OWNER_LOWERCASE IMAGE_TAG=$IMAGE_TAG_ONLY docker compose -f docker-compose.dev.yml up -d

# 6. 정리 작업
# 4. 정리 작업
echo "Pruning dangling images..."
docker image prune -f

Expand Down
29 changes: 4 additions & 25 deletions .github/workflows/prod-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -124,8 +124,6 @@ jobs:
scp -i deploy_key.pem \
-o StrictHostKeyChecking=no \
./docker-compose.prod.yml \
./docs/infra-config/config.alloy \
./docs/infra-config/nginx.prod.conf \
${{ secrets.USERNAME }}@${{ secrets.HOST }}:/home/${{ secrets.USERNAME }}/solid-connection-prod/

# --- 서버에서 Docker Pull 및 재시작 ---
Expand All @@ -142,35 +140,16 @@ jobs:
export IMAGE_TAG_ONLY="${{ needs.build-and-push.outputs.image_tag }}"
export FULL_IMAGE_NAME="ghcr.io/${OWNER_LOWERCASE}/solid-connection-server:${IMAGE_TAG_ONLY}"

# 2. 서버가 GHCR에 로그인 (GITHUB_TOKEN 사용)
# 2. GHCR 로그인 & Pull
# App Token 대신 현재 워크플로우의 임시 토큰을 사용합니다.
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin

# 3. docker pull
echo "Pulling new image: $FULL_IMAGE_NAME"
docker pull $FULL_IMAGE_NAME

# 4. alloy 설정 및 Nginx 설정 적용
cd /home/${{ secrets.USERNAME }}/solid-connection-prod

mkdir -p ./docs/infra-config

if [ -d "./docs/infra-config/config.alloy" ]; then
echo "Removing directory created by Docker..."
rm -rf ./docs/infra-config/config.alloy
fi

mv -f ./config.alloy ./docs/infra-config/config.alloy

mkdir -p ./nginx
mv ./nginx.prod.conf ./nginx/default.conf
sudo cp ./nginx/default.conf /etc/nginx/conf.d/default.conf
sudo nginx -t
sudo nginx -s reload

# 5. Docker Compose 재시작
# 3. Spring Boot 앱 재시작
echo "Restarting Docker Compose with tag: $IMAGE_TAG_ONLY"
docker compose -f docker-compose.prod.yml down
cd /home/${{ secrets.USERNAME }}/solid-connection-prod
docker compose -f docker-compose.prod.yml down || true
OWNER_LOWERCASE=$OWNER_LOWERCASE IMAGE_TAG=$IMAGE_TAG_ONLY docker compose -f docker-compose.prod.yml up -d

# 6. 정리
Expand Down
36 changes: 3 additions & 33 deletions docker-compose.dev.yml
Original file line number Diff line number Diff line change
@@ -1,44 +1,14 @@
version: '3.8'

services:
redis:
image: redis:latest
container_name: redis
ports:
- "6379:6379"

redis-exporter:
image: oliver006/redis_exporter
container_name: redis-exporter
ports:
- "9121:9121"
environment:
REDIS_ADDR: "redis:6379"
depends_on:
- redis

solid-connection-dev:
image: ghcr.io/${OWNER_LOWERCASE}/solid-connection-dev:${IMAGE_TAG:-latest}
container_name: solid-connection-dev
ports:
- "8080:8080"
- "8081:8081"
network_mode: "host"
environment:
- SPRING_PROFILES_ACTIVE=dev
- SPRING_DATA_REDIS_HOST=redis
- SPRING_DATA_REDIS_HOST=127.0.0.1
- SPRING_DATA_REDIS_PORT=6379
volumes:
- ./logs:/var/log/spring
depends_on:
- redis

alloy:
image: grafana/alloy:latest
container_name: alloy
ports:
- "12345:12345"
volumes:
- ./logs:/var/log/spring
- ./docs/infra-config/config.alloy:/etc/alloy/config.alloy:ro
environment:
- ALLOY_ENV=dev
restart: always
36 changes: 3 additions & 33 deletions docker-compose.prod.yml
Original file line number Diff line number Diff line change
@@ -1,44 +1,14 @@
version: '3.8'

services:
redis:
image: redis:latest
container_name: redis
ports:
- "6379:6379"

redis-exporter:
image: oliver006/redis_exporter
container_name: redis-exporter
ports:
- "9121:9121"
environment:
REDIS_ADDR: "redis:6379"
depends_on:
- redis

solid-connection-server:
image: ghcr.io/${OWNER_LOWERCASE}/solid-connection-server:${IMAGE_TAG:-latest}
container_name: solid-connection-server
ports:
- "8080:8080"
- "8081:8081"
network_mode: "host"
environment:
- SPRING_PROFILES_ACTIVE=prod
- SPRING_DATA_REDIS_HOST=redis
- SPRING_DATA_REDIS_HOST=127.0.0.1
- SPRING_DATA_REDIS_PORT=6379
volumes:
- ./logs:/var/log/spring
depends_on:
- redis

alloy:
image: grafana/alloy:latest
container_name: alloy
ports:
- "12345:12345"
volumes:
- ./logs:/var/log/spring
- ./docs/infra-config/config.alloy:/etc/alloy/config.alloy:ro
environment:
- ALLOY_ENV=production
restart: always
Loading