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
59 changes: 42 additions & 17 deletions .github/workflows/deploy-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: Front Test Server (Develop)
on:
push:
branches:
- develop
- develop # develop 브랜치에 push가 발생하면 실행

jobs:
deploy:
Expand All @@ -15,7 +15,6 @@ jobs:

- name: Setup SSH
run: |
echo "SSH 비밀키 설정 진행 중"
mkdir -p ~/.ssh
echo "${{ secrets.LIGHTSAIL_SSH_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
Expand All @@ -24,18 +23,44 @@ jobs:

- name: Deploy to server
run: |
echo "서버에 SSH 접속 중"
ssh -i ~/.ssh/id_ed25519 ${{ secrets.LIGHTSAIL_USER }}@${{ secrets.LIGHTSAIL_HOST }} "
cd ~/study-platform-client && \
git fetch origin && \
git checkout develop && \
git pull origin develop && \
echo 'NEXT_PUBLIC_API_BASE_URL=${{ secrets.NEXT_PUBLIC_API_BASE_URL }}' > .env && \
echo 'NEXT_PUBLIC_GTM_ID=${{ secrets.NEXT_PUBLIC_GTM_ID }}' >> .env && \
echo 'NEXT_PUBLIC_KAKAO_CLIENT_ID=${{ secrets.NEXT_PUBLIC_KAKAO_CLIENT_ID }}' >> .env && \
echo 'NEXT_PUBLIC_GOOGLE_CLIENT_ID=${{ secrets.NEXT_PUBLIC_GOOGLE_CLIENT_ID }}' >> .env && \
yarn install && \
yarn build && \
pm2 delete front-server || true && \
pm2 start ecosystem.config.js
"
ssh -i ~/.ssh/id_ed25519 ${{ secrets.LIGHTSAIL_USER }}@${{ secrets.LIGHTSAIL_HOST }} << EOF

# 용량 확보를 위해 도커 컨테이너, 이미지 먼저 정리
echo "사용하지 않는 컨테이너, 이미지, 네트워크 정리 중 (볼륨제외)..."
sudo docker system prune -a -f

# 디렉토리 없으면 생성
if [ ! -d "/home/ubuntu/front/study-platform-client-dev" ]; then
mkdir -p "/home/ubuntu/front/study-platform-client-dev"
echo "디렉토리 생성 완료"
fi

cd ~/front/study-platform-client-dev

# git 저장소 없으면 clone, 있으면 fetch + reset (덮어쓰기)
if [ ! -d ".git" ]; then
git clone git@github.com:code-zero-to-one/study-platform-client.git .
echo "Git clone 완료"
else
git fetch origin
git reset --hard origin/develop
echo "Git fetch & reset 완료"
fi

git fetch origin
git checkout develop
git pull origin develop

echo ".env 파일 생성"
echo "NEXT_PUBLIC_API_BASE_URL=${{ secrets.NEXT_PUBLIC_API_BASE_URL }}" > .env
echo "NEXT_PUBLIC_GTM_ID=${{ secrets.NEXT_PUBLIC_GTM_ID }}" >> .env
echo "NEXT_PUBLIC_KAKAO_CLIENT_ID=${{ secrets.NEXT_PUBLIC_KAKAO_CLIENT_ID }}" >> .env
echo "NEXT_PUBLIC_GOOGLE_CLIENT_ID=${{ secrets.NEXT_PUBLIC_GOOGLE_CLIENT_ID }}" >> .env

echo "도커 컴포즈 재시작"
sudo docker stop frontend-dev
sudo docker rm frontend-dev
sudo docker compose -f docker-compose.dev.yml up -d --build

echo "운영 서버 배포 완료"
EOF
66 changes: 66 additions & 0 deletions .github/workflows/deploy-dev.yml.diabled
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: Front Test Server (Develop)

on:
push:
branches:
- develop # develop 브랜치에 push가 발생하면 실행

jobs:
deploy:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v3

- name: Setup SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.LIGHTSAIL_SSH_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan -H ${{ secrets.LIGHTSAIL_HOST }} >> ~/.ssh/known_hosts
echo "SSH 설정 완료"

- name: Deploy to server
run: |
ssh -i ~/.ssh/id_ed25519 ${{ secrets.LIGHTSAIL_USER }}@${{ secrets.LIGHTSAIL_HOST }} << EOF

# 용량 확보를 위해 도커 컨테이너, 이미지 먼저 정리
echo "사용하지 않는 컨테이너, 이미지, 네트워크 정리 중 (볼륨제외)..."
sudo docker system prune -a -f

# 디렉토리 없으면 생성
if [ ! -d "$HOME/ubuntu/front/study-platform-client-prod" ]; then
mkdir -p "$HOME/ubuntu/front/study-platform-client-prod"
echo "디렉토리 생성 완료"
fi

cd ~/front/study-platform-client-prod

# git 저장소 없으면 clone, 있으면 fetch + reset (덮어쓰기)
if [ ! -d ".git" ]; then
git clone git@github.com:code-zero-to-one/study-platform-client.git .
echo "Git clone 완료"
else
git fetch origin
git reset --hard origin/develop
echo "Git fetch & reset 완료"
fi

git fetch origin
git checkout develop
git pull origin develop

echo ".env 파일 생성"
echo "NEXT_PUBLIC_API_BASE_URL=${{ secrets.NEXT_PUBLIC_API_BASE_URL }}" > .env
echo "NEXT_PUBLIC_GTM_ID=${{ secrets.NEXT_PUBLIC_GTM_ID }}" >> .env
echo "NEXT_PUBLIC_KAKAO_CLIENT_ID=${{ secrets.NEXT_PUBLIC_KAKAO_CLIENT_ID }}" >> .env
echo "NEXT_PUBLIC_GOOGLE_CLIENT_ID=${{ secrets.NEXT_PUBLIC_GOOGLE_CLIENT_ID }}" >> .env

echo "도커 컴포즈 재시작"
sudo docker stop study-platform-client-prod-frontend-1
sudo docker rm study-platform-client-prod-frontend-1
sudo docker compose up -d --build

echo "운영 서버 배포 완료"
EOF
10 changes: 5 additions & 5 deletions .github/workflows/deploy-prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ jobs:
sudo docker system prune -a -f

# 디렉토리 없으면 생성
if [ ! -d "$HOME/front/study-platform-client-prod" ]; then
mkdir -p "$HOME/front/study-platform-client-prod"
if [ ! -d "/home/ubuntu/front/study-platform-client-prod" ]; then
mkdir -p "/home/ubuntu/front/study-platform-client-prod"
echo "디렉토리 생성 완료"
fi

Expand All @@ -58,9 +58,9 @@ jobs:
echo "NEXT_PUBLIC_GOOGLE_CLIENT_ID=${{ secrets.NEXT_PUBLIC_PROD_GOOGLE_CLIENT_ID }}" >> .env

echo "도커 컴포즈 재시작"
sudo docker stop study-platform-client-prod-frontend-1
sudo docker rm study-platform-client-prod-frontend-1
sudo docker compose up -d --build
sudo docker stop frontend-prod
sudo docker rm frontend-prod
sudo docker compose -f docker-compose.prod.yml up -d --build

echo "운영 서버 배포 완료"
EOF
33 changes: 33 additions & 0 deletions Dockerfile.dev
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# 운영환경(main branch)에서 사용하는 Dockerfile

# 1단계: build
FROM node:18-alpine AS builder
WORKDIR /app

COPY . .

# 빌드시점에 .env 파일 복사
COPY .env .env

RUN yarn install && yarn build

# 2단계: production
FROM node:18-alpine AS runner
WORKDIR /app

ENV NODE_ENV=production

COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
COPY --from=builder /app/package.json ./package.json
COPY --from=builder /app/yarn.lock ./yarn.lock

# 런타임시점에도 .env 파일 복사
COPY --from=builder /app/.env .env

# devDependencies는 설치하지 않고 dependencies만 설치
RUN yarn install --production

EXPOSE 3000

CMD ["yarn", "start"]
33 changes: 33 additions & 0 deletions Dockerfile.prod
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# 운영환경(main branch)에서 사용하는 Dockerfile

# 1단계: build
FROM node:18-alpine AS builder
WORKDIR /app

COPY . .

# 빌드시점에 .env 파일 복사
COPY .env .env

RUN yarn install && yarn build

# 2단계: production
FROM node:18-alpine AS runner
WORKDIR /app

ENV NODE_ENV=production

COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
COPY --from=builder /app/package.json ./package.json
COPY --from=builder /app/yarn.lock ./yarn.lock

# 런타임시점에도 .env 파일 복사
COPY --from=builder /app/.env .env

# devDependencies는 설치하지 않고 dependencies만 설치
RUN yarn install --production

EXPOSE 3000

CMD ["yarn", "start"]
3 changes: 2 additions & 1 deletion docker-compose.yml → docker-compose.dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ version: '3.8'

services:
frontend:
container_name: frontend-dev
build:
context: .
dockerfile: Dockerfile
dockerfile: Dockerfile.dev
ports:
- '3000:3000'
env_file:
Expand Down
15 changes: 15 additions & 0 deletions docker-compose.prod.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# 운영환경(main branch)에서 사용하는 docker-compose.yml

version: '3.8'

services:
frontend:
container_name: frontend-prod
build:
context: .
dockerfile: Dockerfile.prod
ports:
- '3000:3000'
env_file:
- .env
restart: unless-stopped
13 changes: 11 additions & 2 deletions src/shared/tanstack-query/axios.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,23 @@ axiosInstance.interceptors.request.use(
if (accessToken) {
config.headers.Authorization = `Bearer ${accessToken}`;
}

console.log("------------------------")
console.log("✅ 요청주소", config.url);
console.log("✅ 요청 Bearer", config.headers.Authorization);
console.log("✅ 요청내용", config);
return config;
},
(error) => Promise.reject(error),
);

axiosInstance.interceptors.response.use(
(response) => response,
(response) => {
console.log("------------------------")
console.log("✅ 응답주소", response.request.responseURL);
console.log("✅ 응답로그", response);
return response;
},

async (error) => {
console.log('에러 확인', error);
console.log('에러 상태코드:', error.response?.status);
Expand Down
Loading