Files
AutonetSellCar/DEPLOYMENT.md
AutonetSellCar Deploy c0ceade463 Docs: 변경 이력에 비밀번호 보안 강화 추가
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 19:22:47 +09:00

5.8 KiB

AutonetSellCar.com 배포 가이드

서버 구성

server5 (집 Win11)
    ↓ Remote Desktop
server4 (회사 Win11, 개발서버)
    ↓ SSH / Git Push
server1 (192.168.0.201) - NPM (Nginx Proxy Manager)
server2 (192.168.0.202) - 운영서버 (Docker)
server3 (192.168.0.203) - grantech.kr

배포 흐름

[server4 개발]
    │
    ▼ git push staging main
[server2 스테이징 자동 배포]
    │
    ▼ ssh server2 "/opt/autonet/scripts/deploy.sh promote"
[server2 운영 배포]

일반 배포 (코드만 변경)

# 1. 커밋
git add -A && git commit -m "변경 내용"

# 2. 스테이징 배포 (자동)
git push staging main

# 3. 운영 승격
ssh damon@192.168.0.202 "/opt/autonet/scripts/deploy.sh promote"

DB 스키마 변경 시 (중요!)

SQLite 특성

  • SQLAlchemy 모델에 컬럼 추가해도 DB에 자동 반영 안 됨
  • Docker 재시작해도 DB 볼륨은 유지됨
  • 반드시 수동으로 ALTER TABLE 실행 필요!

새 컬럼 추가 시 체크리스트

□ 1. backend/app/models/*.py - 모델에 컬럼 추가
□ 2. backend/app/schemas/*.py - 스키마에 필드 추가
□ 3. backend/app/api/*.py - API 기본값 설정
□ 4. git commit & push
□ 5. 운영 배포 후 DB에 컬럼 추가 (아래 명령어)
□ 6. 테스트

DB 컬럼 추가 명령어

# 운영서버 DB에 컬럼 추가
ssh damon@192.168.0.202 "docker exec autonet-backend python -c \"
import sqlite3
for db in ['/app/autonet.db', '/app/autonet_data.db']:
    try:
        conn = sqlite3.connect(db)
        conn.execute('ALTER TABLE 테이블명 ADD COLUMN 컬럼명 타입 DEFAULT 기본값')
        conn.commit()
        print(f'{db}: OK')
    except Exception as e:
        print(f'{db}: {e}')
\""

예시: cc_per_banner_view 컬럼 추가

ssh damon@192.168.0.202 "docker exec autonet-backend python -c \"
import sqlite3
for db in ['/app/autonet.db', '/app/autonet_data.db']:
    try:
        conn = sqlite3.connect(db)
        conn.execute('ALTER TABLE system_settings ADD COLUMN cc_per_banner_view REAL DEFAULT 0.1')
        conn.commit()
        print(f'{db}: OK')
    except Exception as e:
        print(f'{db}: {e}')
\""

SQLite 타입 매핑

Python/SQLAlchemy SQLite
Integer INTEGER
Float REAL
String TEXT
Boolean INTEGER (0/1)
DateTime TEXT

롤백

# 직전 버전으로 롤백
ssh damon@192.168.0.202 "/opt/autonet/scripts/deploy.sh rollback"

# 특정 버전으로 롤백
ssh damon@192.168.0.202 "/opt/autonet/scripts/deploy.sh rollback-to 20260101_094303"

# 릴리즈 목록 확인
ssh damon@192.168.0.202 "/opt/autonet/scripts/deploy.sh status"

서버 상태 확인

# 컨테이너 상태
ssh damon@192.168.0.202 "docker ps"

# 백엔드 로그
ssh damon@192.168.0.202 "docker logs autonet-backend --tail 50"

# 프론트엔드 로그
ssh damon@192.168.0.202 "docker logs autonet-frontend --tail 50"

# DB 테이블 확인
ssh damon@192.168.0.202 "docker exec autonet-backend python -c \"
import sqlite3
conn = sqlite3.connect('/app/autonet.db')
cursor = conn.cursor()
cursor.execute('PRAGMA table_info(system_settings)')
for row in cursor.fetchall():
    print(row)
\""

SSH 키 설정 (server4 → server1,2,3)

# 공개키 확인
cat ~/.ssh/id_ed25519.pub

# 각 서버에 등록
# server1,2,3 각각에서:
nano ~/.ssh/authorized_keys
# 공개키 붙여넣기

자주 발생하는 문제

1. "no such column" 에러

  • 원인: 코드에 새 컬럼 추가했지만 DB에는 없음
  • 해결: ALTER TABLE로 컬럼 추가 (위 참고)

2. "Failed to save settings" 에러

  • 원인: 보통 DB 스키마 불일치
  • 확인: docker logs autonet-backend --tail 30
  • 해결: 누락된 컬럼 추가

3. 번역 안 됨

  • 원인: i18n.ts에 해당 단어 번역 없음
  • 해결: CAR_TRANSLATIONS에 번역 추가

4. 배포 후 변경사항 안 보임

  • 프론트엔드: 브라우저 캐시 클리어 (Ctrl+Shift+R)
  • 백엔드: 컨테이너 재시작 확인

.env 파일 관리 (중요!)

운영서버 .env 파일 위치

/opt/autonet/production/backend/.env
/opt/autonet/production/agent/.env (빈 파일)

.env가 없거나 디렉토리로 생성된 경우

증상: 이메일이 안 보내짐, [DEV] 로그 출력

해결:

# .env가 디렉토리로 잘못 생성된 경우
ssh damon@192.168.0.202 "rm -rf /opt/autonet/production/backend/.env"

# 개발서버에서 .env 복사 또는 수동 생성
scp backend/.env damon@192.168.0.202:/opt/autonet/production/backend/.env

# 컨테이너 재시작
ssh damon@192.168.0.202 "cd /opt/autonet/production && docker compose -f docker-compose.production.yml down && docker compose -f docker-compose.production.yml up -d"

필수 환경변수

변수 설명 예시
SMTP_USER Gmail 계정 autonetsellcar@gmail.com
SMTP_PASSWORD 앱 비밀번호 (16자리)
AZURE_TRANSLATOR_KEY Azure 번역 API 키 (API 키)
STRIPE_SECRET_KEY Stripe 결제 키 sk_live_...

변경 이력

날짜 변경 내용 DB 변경
2026-01-01 강력한 비밀번호 정책 및 로그인 보안 강화 users: failed_login_attempts, locked_until, password_reset_required
2026-01-01 삭제된 사용자 재가입 허용 수정 -
2026-01-01 inquiries 테이블 누락 컬럼 추가 inquiries: category, subject 등 8개 컬럼
2026-01-01 운영서버 .env 파일 생성 (SMTP 설정) -
2026-01-01 cc_per_banner_view 설정 추가 system_settings.cc_per_banner_view (REAL)
2026-01-01 마이스터 번역 추가 -

이 문서는 새 세션 시작 시 CLAUDE.md와 함께 반드시 읽어주세요!