Files
AutonetSellCar/DEPLOYMENT_CHECKLIST.md
2025-12-30 16:09:06 +09:00

5.9 KiB

AutonetSellCar 배포 체크리스트

환경 정보

항목 서버4 (개발) 서버2 (운영)
IP 192.168.0.204 192.168.0.202
OS Windows Ubuntu 22.04
Frontend 포트 3000 3000 (운영), 3001 (스테이징)
Backend 포트 8000 8000 (운영), 8001 (스테이징)

1. 서버2 디렉토리 구조

/opt/autonet/
├── git/autonet.git/        # Git bare repository
├── staging/                # 스테이징 코드
├── production/             # 운영 코드
│   ├── frontend/
│   │   ├── Dockerfile
│   │   ├── .env.production   # ★ NEXT_PUBLIC_API_URL 설정
│   │   └── ...
│   ├── backend/
│   │   ├── Dockerfile
│   │   ├── autonet.db        # ★ 데이터베이스
│   │   └── uploads/          # ★ 이미지 파일
│   └── docker-compose.production.yml
├── releases/               # 롤백용 아카이브
├── scripts/                # 배포 스크립트
└── logs/                   # 로그

2. 핵심 설정 파일

2.1 Frontend 환경변수 (.env.production)

파일 위치: /opt/autonet/production/frontend/.env.production

NEXT_PUBLIC_API_URL=http://192.168.0.202:8000

⚠️ 중요: Next.js는 빌드 시점NEXT_PUBLIC_* 변수를 코드에 포함시킵니다.

  • 런타임에 환경변수를 바꿔도 적용 안됨
  • 환경변수 변경 후 반드시 이미지 재빌드 필요

2.2 Dockerfile (Frontend)

파일 위치: /opt/autonet/production/frontend/Dockerfile

빌드 시 환경변수 적용을 위해 다음이 포함되어야 함:

# builder 단계에서
ARG NEXT_PUBLIC_API_URL=http://192.168.0.202:8000
ENV NEXT_PUBLIC_API_URL=$NEXT_PUBLIC_API_URL

2.3 docker-compose.production.yml

version: '3.8'
services:
  frontend:
    build: ./frontend
    container_name: autonet-frontend
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
    depends_on:
      - backend

  backend:
    build: ./backend
    container_name: autonet-backend
    ports:
      - "8000:8000"
    volumes:
      - ./backend/uploads:/app/uploads      # ★ 이미지 영속화
      - ./backend/autonet.db:/app/autonet.db  # ★ DB 영속화

3. 데이터 이전 체크리스트

3.1 데이터베이스 (autonet.db)

단계 명령어 확인
서버4에서 복사 scp backend/autonet.db damon@192.168.0.202:/tmp/ [ ]
서버2 컨테이너에 복사 docker cp /tmp/autonet.db autonet-backend:/app/ [ ]
파일 확인 docker exec autonet-backend ls -la /app/autonet.db [ ]
백엔드 재시작 docker restart autonet-backend [ ]

3.2 업로드 이미지 (uploads/)

단계 명령어 확인
서버4에서 압축 tar -cvf uploads.tar uploads [ ]
서버2로 복사 scp uploads.tar damon@192.168.0.202:/tmp/ [ ]
압축 해제 cd /tmp && tar -xvf uploads.tar [ ]
컨테이너에 복사 docker cp /tmp/uploads/. autonet-backend:/app/uploads/ [ ]
파일 확인 docker exec autonet-backend ls -la /app/uploads/ [ ]

4. 이미지 URL 문제 디버깅

4.1 현재 문제

브라우저에서 이미지 요청 URL이 http://localhost:8000/...으로 되어 있음. → 다른 PC에서 접속하면 localhost가 그 PC를 가리키므로 이미지 안 보임.

4.2 올바른 이미지 URL

http://192.168.0.202:8000/uploads/cars/39/image_0.jpg

4.3 원인 분석

  1. api.ts에서 API_BASE_URL 설정 확인

    • 파일: frontend/src/lib/api.ts
    • NEXT_PUBLIC_API_URL 환경변수 사용 여부
  2. 이미지 URL 생성 로직 확인

    • 이미지 URL이 어디서 생성되는지
    • 백엔드에서 전체 URL 반환? vs 프론트엔드에서 조합?
  3. 빌드 시점 환경변수 확인

    • .env.production 파일 존재 여부
    • Dockerfile에서 ARG/ENV 설정 여부

5. 디버깅 명령어

5.1 프론트엔드 환경변수 확인

# 컨테이너 환경변수
docker exec autonet-frontend printenv | grep API

# .env.production 파일 내용
cat /opt/autonet/production/frontend/.env.production

5.2 백엔드 API 테스트

# 이미지 직접 접근 테스트
curl -I http://192.168.0.202:8000/uploads/cars/39/image_0.jpg

# API 응답에서 이미지 URL 확인
curl http://192.168.0.202:8000/api/cars/39 | jq '.images'

5.3 컨테이너 상태 확인

docker ps -a
docker logs autonet-frontend --tail 20
docker logs autonet-backend --tail 20

6. 재빌드 절차

6.1 Frontend 재빌드 (환경변수 변경 시)

cd /opt/autonet/production

# 1. 컨테이너 중지/삭제
docker rm -f autonet-frontend

# 2. 이미지 삭제
docker rmi production_frontend

# 3. .env.production 확인
cat frontend/.env.production

# 4. 재빌드
docker build --no-cache -t production_frontend ./frontend

# 5. 실행
docker run -d \
  --name autonet-frontend \
  --network autonet-production-network \
  -p 3000:3000 \
  production_frontend

# 6. 확인
docker ps | grep frontend
docker logs autonet-frontend --tail 10

7. 현재 상태 점검 명령어

서버2에서 순서대로 실행:

# 1. 컨테이너 상태
docker ps -a

# 2. 프론트엔드 환경변수
docker exec autonet-frontend printenv | grep -E "(API|NODE)"

# 3. .env.production 파일
cat /opt/autonet/production/frontend/.env.production

# 4. Dockerfile 환경변수 설정
grep -A2 "ARG NEXT_PUBLIC" /opt/autonet/production/frontend/Dockerfile
grep "ENV NEXT_PUBLIC" /opt/autonet/production/frontend/Dockerfile

# 5. 백엔드 이미지 파일 존재 확인
docker exec autonet-backend ls /app/uploads/cars/ | head -5

# 6. 백엔드 이미지 직접 접근 테스트
curl -I http://localhost:8000/uploads/cars/39/image_0.jpg