# 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` ```env NEXT_PUBLIC_API_URL=http://192.168.0.202:8000 ``` ⚠️ **중요**: Next.js는 **빌드 시점**에 `NEXT_PUBLIC_*` 변수를 코드에 포함시킵니다. - 런타임에 환경변수를 바꿔도 적용 안됨 - 환경변수 변경 후 반드시 **이미지 재빌드** 필요 ### 2.2 Dockerfile (Frontend) **파일 위치**: `/opt/autonet/production/frontend/Dockerfile` 빌드 시 환경변수 적용을 위해 다음이 포함되어야 함: ```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 ```yaml 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 프론트엔드 환경변수 확인 ```bash # 컨테이너 환경변수 docker exec autonet-frontend printenv | grep API # .env.production 파일 내용 cat /opt/autonet/production/frontend/.env.production ``` ### 5.2 백엔드 API 테스트 ```bash # 이미지 직접 접근 테스트 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 컨테이너 상태 확인 ```bash docker ps -a docker logs autonet-frontend --tail 20 docker logs autonet-backend --tail 20 ``` --- ## 6. 재빌드 절차 ### 6.1 Frontend 재빌드 (환경변수 변경 시) ```bash 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에서 순서대로 실행: ```bash # 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 ```