docs: Update CLAUDE.md with CI/CD workflow documentation
- Add CI/CD auto-deployment flow diagram - Add 'Claude Code 작업 규칙' section (no direct server edits) - Update deployment commands to use CI/CD - Add DB schema change process with ALTER TABLE examples - Document deploy.sh promote/rollback/status commands - Add change history for CI/CD implementation
This commit is contained in:
138
CLAUDE.md
138
CLAUDE.md
@@ -70,34 +70,55 @@ ssh server2 "docker stop autonet-frontend 2>/dev/null; docker rm autonet-fronten
|
||||
| **스테이징** | https://staging.autonetsellcar.com | 테스트용 (먼저 배포) |
|
||||
| **프로덕션** | https://autonetsellcar.com | 실서비스 (테스트 후 배포) |
|
||||
|
||||
### 배포 순서 (반드시 준수!)
|
||||
### CI/CD 자동 배포 흐름 (2025-01-04 적용)
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 1. 개발 PC에서 코드 수정 │
|
||||
│ 1. 로컬 PC에서 코드 수정 │
|
||||
│ D:\Workspace\claudeCode\AutonetSellCar.com\ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
↓
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 2. Git 커밋 및 푸시 │
|
||||
│ 2. Git 커밋 및 푸시 → ★ 스테이징 자동 배포! │
|
||||
│ git add . │
|
||||
│ git commit -m "변경 내용" │
|
||||
│ git push staging main │
|
||||
│ → post-receive hook이 자동으로 스테이징 빌드/배포 │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
↓
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 3. 스테이징 서버 배포 │
|
||||
│ - /opt/autonet/staging/frontend 에서 빌드 │
|
||||
│ - https://staging.autonetsellcar.com 에서 테스트 │
|
||||
│ 3. 스테이징 테스트 │
|
||||
│ https://staging.autonetsellcar.com 에서 충분히 테스트 │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
↓
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 4. 스테이징에서 충분히 테스트 후 → 프로덕션 배포 │
|
||||
│ - /opt/autonet/production/frontend 에서 빌드 │
|
||||
│ - https://autonetsellcar.com 확인 │
|
||||
│ 4. 프로덕션 배포 (deploy.sh promote) │
|
||||
│ ssh server2 "/opt/autonet/scripts/deploy.sh promote" │
|
||||
│ → 스테이징 소스를 프로덕션으로 복사 및 빌드/배포 │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### ⚠️ Claude Code 작업 규칙 (중요!)
|
||||
|
||||
**반드시 CI/CD 프로세스를 따르세요:**
|
||||
|
||||
1. **로컬에서만 코드 수정** - 서버 파일 직접 수정 금지!
|
||||
2. **git push staging main** - 스테이징 자동 배포
|
||||
3. **테스트 후 promote** - 프로덕션 배포
|
||||
4. **DB 스키마 변경 시** - ALTER TABLE 명령어 별도 실행 필요 (아래 참조)
|
||||
|
||||
```bash
|
||||
# ❌ 잘못된 방식 (절대 금지!)
|
||||
ssh server2 "vim /opt/autonet/production/backend/app/main.py" # 서버 직접 수정
|
||||
scp backend/app/main.py server2:/opt/autonet/production/backend/app/ # 수동 복사
|
||||
|
||||
# ✅ 올바른 방식
|
||||
# 1. 로컬에서 수정
|
||||
# 2. git add . && git commit -m "변경 내용" && git push staging main
|
||||
# 3. 스테이징 테스트
|
||||
# 4. ssh server2 "/opt/autonet/scripts/deploy.sh promote"
|
||||
```
|
||||
|
||||
### Git 저장소 정보
|
||||
|
||||
| 항목 | 값 |
|
||||
@@ -106,30 +127,36 @@ ssh server2 "docker stop autonet-frontend 2>/dev/null; docker rm autonet-fronten
|
||||
| 브랜치 | `main` |
|
||||
| 원격 이름 | `staging` |
|
||||
|
||||
### 스테이징 배포 명령어
|
||||
### CI/CD 배포 명령어
|
||||
|
||||
```bash
|
||||
# 1. 소스 동기화
|
||||
scp -r frontend/src damon@192.168.0.202:/opt/autonet/staging/frontend/
|
||||
# ★ 스테이징 배포 (자동) - git push만 하면 됨!
|
||||
git add .
|
||||
git commit -m "변경 내용 설명"
|
||||
git push staging main
|
||||
# → post-receive hook이 자동으로:
|
||||
# 1. /opt/autonet/staging/ 에 소스 체크아웃
|
||||
# 2. docker compose로 frontend/backend 빌드 및 재시작
|
||||
|
||||
# 2. .env.production 설정
|
||||
ssh server2 "echo 'NEXT_PUBLIC_API_URL=https://staging.autonetsellcar.com' > /opt/autonet/staging/frontend/.env.production"
|
||||
# ★ 프로덕션 배포 (수동 promote)
|
||||
ssh server2 "/opt/autonet/scripts/deploy.sh promote"
|
||||
# → staging 소스를 production으로 복사 후 빌드/배포
|
||||
|
||||
# 3. Docker 빌드 및 재시작
|
||||
ssh server2 "cd /opt/autonet/staging/frontend && docker build --no-cache -t staging-frontend . && docker stop autonet-frontend-staging; docker rm autonet-frontend-staging; docker run -d --name autonet-frontend-staging --restart unless-stopped -p 3001:3000 staging-frontend"
|
||||
# 상태 확인
|
||||
ssh server2 "/opt/autonet/scripts/deploy.sh status"
|
||||
|
||||
# 롤백 (문제 발생 시)
|
||||
ssh server2 "/opt/autonet/scripts/deploy.sh rollback"
|
||||
```
|
||||
|
||||
### 프로덕션 배포 명령어
|
||||
### 수동 배포 (비상시에만 사용)
|
||||
|
||||
```bash
|
||||
# 1. 소스 동기화
|
||||
scp -r frontend/src damon@192.168.0.202:/opt/autonet/production/frontend/
|
||||
# 스테이징 수동 빌드
|
||||
ssh server2 "cd /opt/autonet/staging && docker compose -f docker-compose.staging.yml build --no-cache && docker compose -f docker-compose.staging.yml up -d"
|
||||
|
||||
# 2. .env.production 설정 (HTTPS 필수!)
|
||||
ssh server2 "echo 'NEXT_PUBLIC_API_URL=https://autonetsellcar.com' > /opt/autonet/production/frontend/.env.production"
|
||||
|
||||
# 3. Docker 빌드 및 재시작
|
||||
ssh server2 "cd /opt/autonet/production/frontend && docker build --no-cache -t production-frontend . && docker stop autonet-frontend; docker rm autonet-frontend; docker run -d --name autonet-frontend --restart unless-stopped -p 3000:3000 production-frontend"
|
||||
# 프로덕션 수동 빌드
|
||||
ssh server2 "cd /opt/autonet/production && docker compose -f docker-compose.production.yml build --no-cache && docker compose -f docker-compose.production.yml up -d"
|
||||
```
|
||||
|
||||
---
|
||||
@@ -156,16 +183,22 @@ DB_NAME=autonet_staging # Production은 autonet
|
||||
- Frontend: `NEXT_PUBLIC_API_URL=https://staging.autonetsellcar.com` (build arg)
|
||||
- Backend: `.env` 파일을 볼륨 마운트로 연결
|
||||
|
||||
### 소스 코드 동기화
|
||||
### 소스 코드 동기화 (CI/CD로 자동화됨)
|
||||
|
||||
**⚠️ 중요**: Staging 디렉토리는 Git 저장소가 아님! Production과 수동 동기화 필요
|
||||
**✅ CI/CD 적용 후**: `git push staging main`만 하면 자동으로 스테이징에 배포됩니다.
|
||||
|
||||
```bash
|
||||
# Production → Staging 소스 동기화
|
||||
ssh damon@192.168.0.202 "rsync -av --exclude='node_modules' --exclude='.next' /opt/autonet/production/frontend/ /opt/autonet/staging/frontend/"
|
||||
# 스테이징 배포 (자동)
|
||||
git push staging main # post-receive hook이 자동으로 staging에 체크아웃 및 빌드
|
||||
|
||||
# Staging Frontend 재빌드
|
||||
ssh damon@192.168.0.202 "cd /opt/autonet/staging && docker compose -f docker-compose.staging.yml build --no-cache frontend-staging && docker compose -f docker-compose.staging.yml up -d frontend-staging"
|
||||
# 프로덕션 배포 (promote 명령)
|
||||
ssh server2 "/opt/autonet/scripts/deploy.sh promote" # staging → production 복사 및 빌드
|
||||
```
|
||||
|
||||
**수동 동기화 (비상시에만)**:
|
||||
```bash
|
||||
# Production → Staging 소스 동기화 (일반적으로 필요 없음)
|
||||
ssh damon@192.168.0.202 "rsync -av --exclude='node_modules' --exclude='.next' /opt/autonet/production/frontend/ /opt/autonet/staging/frontend/"
|
||||
```
|
||||
|
||||
### Staging DB 초기 데이터 복사
|
||||
@@ -176,6 +209,48 @@ PGPASSWORD='roskfl@1122' pg_dump -h 192.168.0.201 -U admin -d autonet --data-onl
|
||||
PGPASSWORD='roskfl@1122' psql -h 192.168.0.201 -U admin -d autonet_staging
|
||||
```
|
||||
|
||||
### ⚠️ DB 스키마 변경 시 (중요!)
|
||||
|
||||
**SQLAlchemy 모델 변경만으로는 DB가 자동 업데이트되지 않습니다!**
|
||||
|
||||
코드에서 새 컬럼을 추가하면, 반드시 수동으로 ALTER TABLE을 실행해야 합니다:
|
||||
|
||||
```bash
|
||||
# 1. 먼저 Staging DB에 적용하여 테스트
|
||||
ssh server1 "docker exec -it postgres-primary psql -U admin -d autonet_staging -c \"
|
||||
ALTER TABLE users ADD COLUMN IF NOT EXISTS new_column VARCHAR(255) DEFAULT '';
|
||||
\""
|
||||
|
||||
# 2. 테스트 후 Production DB에 적용
|
||||
ssh server1 "docker exec -it postgres-primary psql -U admin -d autonet -c \"
|
||||
ALTER TABLE users ADD COLUMN IF NOT EXISTS new_column VARCHAR(255) DEFAULT '';
|
||||
\""
|
||||
```
|
||||
|
||||
**DB 스키마 변경 체크리스트**:
|
||||
1. `backend/app/models/` 에서 모델 수정
|
||||
2. Staging DB에 ALTER TABLE 실행
|
||||
3. git push staging main (코드 배포)
|
||||
4. Staging에서 테스트
|
||||
5. Production DB에 ALTER TABLE 실행
|
||||
6. deploy.sh promote (프로덕션 배포)
|
||||
|
||||
**최근 추가된 컬럼 예시** (2025-01-04):
|
||||
```sql
|
||||
-- users 테이블
|
||||
ALTER TABLE users ADD COLUMN IF NOT EXISTS cash_cc_balance FLOAT DEFAULT 0;
|
||||
|
||||
-- system_settings 테이블
|
||||
ALTER TABLE system_settings ADD COLUMN IF NOT EXISTS marketing_enabled BOOLEAN DEFAULT false;
|
||||
ALTER TABLE system_settings ADD COLUMN IF NOT EXISTS marketing_telegram_enabled BOOLEAN DEFAULT false;
|
||||
ALTER TABLE system_settings ADD COLUMN IF NOT EXISTS marketing_telegram_bot_token VARCHAR(255) DEFAULT '';
|
||||
ALTER TABLE system_settings ADD COLUMN IF NOT EXISTS marketing_telegram_channel_id VARCHAR(255) DEFAULT '';
|
||||
ALTER TABLE system_settings ADD COLUMN IF NOT EXISTS marketing_telegram_message_template TEXT DEFAULT '';
|
||||
ALTER TABLE system_settings ADD COLUMN IF NOT EXISTS marketing_facebook_enabled BOOLEAN DEFAULT false;
|
||||
ALTER TABLE system_settings ADD COLUMN IF NOT EXISTS marketing_instagram_enabled BOOLEAN DEFAULT false;
|
||||
ALTER TABLE system_settings ADD COLUMN IF NOT EXISTS marketing_auto_post_on_banner BOOLEAN DEFAULT false;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 1. 프로젝트 구조
|
||||
@@ -834,6 +909,9 @@ Import 시 자동 번역 (Azure API)
|
||||
|
||||
| 날짜 | 변경 내용 |
|
||||
|------|----------|
|
||||
| 2025-01-04 | **CI/CD 자동 배포 시스템 구축**: git push → 스테이징 자동 배포, deploy.sh promote → 프로덕션 배포 |
|
||||
| 2025-01-04 | **docker-compose 통합**: 개별 docker run 대신 docker-compose.staging.yml/production.yml 사용 |
|
||||
| 2025-01-04 | **CLAUDE.md CI/CD 워크플로우 문서화**: 서버 직접 수정 금지, DB 스키마 변경 프로세스 추가 |
|
||||
| 2025-01-03 | **Staging DB 분리**: `autonet_staging` DB 생성, Production/Staging 환경 완전 분리 |
|
||||
| 2025-01-03 | **My Vehicles 기능**: 직접 구매 차량을 My Request 페이지에 표시 |
|
||||
| 2024-12-31 | **Admin Settings 기능 추가**: Show Dealer Comment 토글, Korean Domestic + Export Customs 금액 설정 |
|
||||
|
||||
Reference in New Issue
Block a user