Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
5ecc73e
fix : workflows/deploy-prod.yml 활성화
Jun 26, 2025
a9281b5
fix : 프론트 운영환경에서 소셜로그인 redirection url을 백엔드 운영서버에 맞게 변경
Jun 26, 2025
5bbf804
fix : update deploy-prod.yml secret key
Jun 26, 2025
a1011b6
feat : 운영환경 배포방식을 도커 기반으로 변경
Jun 26, 2025
eb292c4
fix : docker-compose 를 docker compose 로 수정
Jun 26, 2025
e0e1e61
fix(deploy-prod.yml) : docker 에서 직접 빌드하도록 변경 및 디렉토리 생성 자동화
Jun 26, 2025
e301f5d
fix(deploy-prod.yml) : git 저장소가 없으면 clone 하는 스크립트 추가
Jun 26, 2025
dbca440
chore(deploy-prod.yml) : 실제 코드주소 기입
Jun 26, 2025
5ef6b2d
fix(deploy-prod.yml) : clone 방식을 https 에서 SSH 로 변경
Jun 26, 2025
c67a4b0
chore(deploy-prod.yml) : 도커컴포즈시 sudo 명령어로 실행
Jun 26, 2025
8bc2a40
chore(docker-compose.yml) : 불필요한 환경변수 NODE_ENV 제거
Jun 26, 2025
926f1cd
chore(docker-compose.yml) : 환경변수 이름 수정
Jun 26, 2025
7274598
fix : 소셜로그인 redirection URL 을 NEXT_PUBLIC_API_BASE_URL 으로 변수화
Jun 26, 2025
19ad73a
chore(deploy-prod.yml) 안쓰는 도커이미지 컨테이너 정리 코드 추가
Jun 26, 2025
e8f0d4f
chore(deploy-prod.yml) : 도커 청소를 더 빡세게 시킴
Jun 26, 2025
eb3e241
fix : 운영 env 를 도커컴포즈 주입이 아닌 시크릿키 통해 만드는 쪽으로 변경
Jun 26, 2025
51d2ae4
fix(deploy-prod.yml) : env 코드 수정
Jun 26, 2025
2611d09
chore(deploy-prod.yml) : EOF
Jun 26, 2025
96e1924
fix(docker-compose.yml) env_file 추가
Jun 26, 2025
1a79a0b
fix(Dockerfile) : 빌드시점에 추가
Jun 26, 2025
df06013
fix(Dockerfile) : 런타임 시점에도 env 변수 넣어보기
Jun 26, 2025
06650a3
fix(docker-compose.yml) : 혹시몰라 도커컴포즈 런타임 시점에도 env 변수 넣어보기
Jun 26, 2025
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
64 changes: 64 additions & 0 deletions .github/workflows/deploy-prod.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
name: Front Production Server (main)

on:
push:
branches:
- main # main 브랜치에 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_PROD_SSH_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan -H ${{ secrets.LIGHTSAIL_PROD_HOST }} >> ~/.ssh/known_hosts
echo "SSH 설정 완료"

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

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

# 디렉토리 없으면 생성
if [ ! -d "$HOME/front/study-platform-client-prod" ]; then
mkdir -p "$HOME/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/main
echo "Git fetch & reset 완료"
fi

git fetch origin
git checkout main
git pull origin main

echo ".env 파일 생성"
echo "NEXT_PUBLIC_API_BASE_URL=${{ secrets.NEXT_PUBLIC_API_PROD_BASE_URL }}" > .env
echo "NEXT_PUBLIC_GTM_ID=${{ secrets.NEXT_PUBLIC_GTM_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
42 changes: 0 additions & 42 deletions .github/workflows/deploy-prod.yml.disabled

This file was deleted.

33 changes: 33 additions & 0 deletions Dockerfile
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"]
14 changes: 14 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# 운영환경(main branch)에서 사용하는 docker-compose.yml

version: '3.8'

services:
frontend:
build:
context: .
dockerfile: Dockerfile
ports:
- '3000:3000'
env_file:
- .env
restart: unless-stopped
4 changes: 2 additions & 2 deletions src/features/auth/ui/login-modal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ export default function LoginModal({

// TODO : 실제 백엔드에서 제공하는 URL로 교체필요
const NAVER_LOGIN_URL = '';
const KAKAO_LOGIN_URL = `https://kauth.kakao.com/oauth/authorize?client_id=3194796599a4325c0223d154319351a4&redirect_uri=https://test-api.zeroone.it.kr/api/v1/auth/kakao/redirect-uri&response_type=code&state=${state}`;
const GOOGLE_LOGIN_URL = `https://accounts.google.com/o/oauth2/v2/auth?scope=openid%20profile&access_type=offline&prompt=consent&include_granted_scopes=true&response_type=code&redirect_uri=https://test-api.zeroone.it.kr/api/v1/auth/google/redirect-uri&client_id=616205933420-b45d510q23togkaqo069j8igmsjhp9v0.apps.googleusercontent.com&state=${state}`;
const KAKAO_LOGIN_URL = `https://kauth.kakao.com/oauth/authorize?client_id=3194796599a4325c0223d154319351a4&redirect_uri=${process.env.NEXT_PUBLIC_API_BASE_URL}/api/v1/auth/kakao/redirect-uri&response_type=code&state=${state}`;
const GOOGLE_LOGIN_URL = `https://accounts.google.com/o/oauth2/v2/auth?scope=openid%20profile&access_type=offline&prompt=consent&include_granted_scopes=true&response_type=code&redirect_uri=${process.env.NEXT_PUBLIC_API_BASE_URL}/api/v1/auth/google/redirect-uri&client_id=616205933420-b45d510q23togkaqo069j8igmsjhp9v0.apps.googleusercontent.com&state=${state}`;

return (
<Modal.Root open={open} onOpenChange={onClose}>
Expand Down