diff --git a/journey/troubleshooting/251117_admin_dashboard_standard_deployment_refactoring.md b/journey/troubleshooting/251117_admin_dashboard_standard_deployment_refactoring.md index bb9a8e0..2626b61 100644 --- a/journey/troubleshooting/251117_admin_dashboard_standard_deployment_refactoring.md +++ b/journey/troubleshooting/251117_admin_dashboard_standard_deployment_refactoring.md @@ -49,8 +49,9 @@ admin-dashboard/ **nginx 설정** (`nginx-infra/server-nginx-default`): ```nginx location /admin { - root /home/admin/admin-dashboard/frontend/dist; - try_files $uri $uri/ /index.html; + alias /home/admin/admin-dashboard/frontend/; + try_files $uri $uri/ /admin/index.html; + index index.html; } ``` @@ -89,7 +90,7 @@ localStorage.setItem('auth_token', token) ## 구현 완료 -**커밋**: 진행 중 +**커밋**: 920672a **일시**: 2025-11-17 **브랜치**: main @@ -98,6 +99,8 @@ localStorage.setItem('auth_token', token) - `admin-dashboard/backend/main.py`: frontend 경로 수정 - `admin-dashboard/README.md`: 구조 설명 업데이트 - Git 원격 저장소: `admin-dashboard.git`로 변경 +- `admin-dashboard/.gitea/workflows/deploy.yml`: 배포 스크립트 경로 수정 및 포트 충돌 방지 +- `nginx-infra/server-nginx-default`: `/admin` 404 해결 - `root` → `alias` 변경 및 `try_files` 경로 수정 ## 교훈 @@ -118,3 +121,81 @@ localStorage.setItem('auth_token', token) - 프로젝트 전체에서 표준 JWT 키(`auth_token`) 사용으로 일관성 확보 - Gateway와 frontend 간 토큰 키 불일치 방지 +### CI/CD 배포 스크립트 수정 + +**문제**: 배포 스크립트가 이전 폴더명(`frontend-base`)을 참조하여 배포 실패 + +**해결**: +1. **배포 경로 수정** (`admin-dashboard/.gitea/workflows/deploy.yml`): + - `/home/admin/frontend-base` → `/home/admin/admin-dashboard` + - 백업 경로: `frontend-base.backup.*` → `admin-dashboard.backup.*` + +2. **포트 충돌 방지**: + - 기존 `frontend-base` 컨테이너 강제 제거 + - 포트 8000을 사용하는 모든 컨테이너 중지 및 제거 + ```bash + # 강제로 컨테이너 제거 (포트 충돌 방지) + sudo docker ps -a --filter "name=admin-dashboard" --format "{{.ID}}" | xargs -r sudo docker rm -f || true + # frontend-base 컨테이너도 정리 (이전 이름) + sudo docker ps -a --filter "name=frontend-base" --format "{{.ID}}" | xargs -r sudo docker rm -f || true + # 포트 8000을 사용하는 컨테이너 확인 및 제거 + sudo docker ps --filter "publish=8000" --format "{{.ID}}" | xargs -r sudo docker stop || true + sudo docker ps --filter "publish=8000" --format "{{.ID}}" | xargs -r sudo docker rm -f || true + ``` + +**교훈**: +- 폴더명 변경 시 CI/CD 스크립트도 함께 업데이트 필요 +- 배포 전 기존 컨테이너 완전 정리로 포트 충돌 방지 +- 이전 이름의 컨테이너도 정리하여 혼란 방지 + +### nginx 설정 적용 및 404 해결 + +**문제**: `/admin` 경로에서 404 에러 발생 + +**원인**: +- nginx 설정 파일(`server-nginx-default`)은 수정했으나 실제 적용된 설정(`/etc/nginx/sites-enabled/default`)은 이전 설정 유지 +- `root` 방식과 `alias` 방식의 차이로 인한 경로 불일치 + +**해결**: +1. **설정 파일 동기화**: + ```bash + sudo cp /home/admin/nginx-infra/server-nginx-default /etc/nginx/sites-enabled/default + sudo nginx -t + sudo systemctl reload nginx + ``` + +2. **최종 nginx 설정**: + ```nginx + location /admin { + alias /home/admin/admin-dashboard/frontend/; + try_files $uri $uri/ /admin/index.html; + index index.html; + } + ``` + +**검증**: +```bash +curl -I http://localhost/admin/ # HTTP/1.1 200 OK +``` + +**교훈**: +- 설정 파일 수정 후 반드시 실제 nginx 설정에 적용 필요 +- `root` vs `alias` 차이 이해: `root`는 경로를 합치고, `alias`는 경로를 대체 +- `try_files`의 fallback 경로도 `alias` 사용 시 `/admin/index.html`로 명시 필요 + +### 터미널 bash 문제 해결 + +**문제**: Cursor IDE 터미널에서 명령어 실행 시 오류 발생 + +**증상**: +- `cd` 명령어 실행 실패 +- Git 명령어 실행 시 오류 + +**해결**: +- **Cursor IDE 재시작**: 터미널 설정이 다시 로드되어 문제 해결됨 +- 또는 `Ctrl+Shift+P` → "Developer: Reload Window" + +**교훈**: +- IDE 터미널 문제 발생 시 가장 먼저 IDE 재시작 시도 +- 재시작으로 해결되지 않으면 shell 경로 확인 (`/bin/bash`) +