diff --git a/backend-node/src/controllers/fileController.ts b/backend-node/src/controllers/fileController.ts index 09bae070..b0746677 100644 --- a/backend-node/src/controllers/fileController.ts +++ b/backend-node/src/controllers/fileController.ts @@ -10,9 +10,22 @@ const prisma = new PrismaClient(); // 업로드 디렉토리 설정 (회사별로 분리) const baseUploadDir = path.join(process.cwd(), "uploads"); -if (!fs.existsSync(baseUploadDir)) { - fs.mkdirSync(baseUploadDir, { recursive: true }); -} + +// 디렉토리 생성 함수 (에러 핸들링 포함) +const ensureUploadDir = () => { + try { + if (!fs.existsSync(baseUploadDir)) { + fs.mkdirSync(baseUploadDir, { recursive: true }); + } + } catch (error) { + console.warn( + `업로드 디렉토리 생성 실패: ${error}. 기존 디렉토리를 사용합니다.` + ); + } +}; + +// 초기화 시 디렉토리 확인 +ensureUploadDir(); // 회사별 + 날짜별 디렉토리 생성 함수 const getCompanyUploadDir = (companyCode: string, dateFolder?: string) => { diff --git a/docker/prod/backend.Dockerfile b/docker/prod/backend.Dockerfile index 17add9b1..2c95bece 100644 --- a/docker/prod/backend.Dockerfile +++ b/docker/prod/backend.Dockerfile @@ -43,8 +43,8 @@ COPY --from=build /app/dist ./dist # Copy package files COPY package*.json ./ -# Create logs directory and set permissions -RUN mkdir -p logs && chown -R appuser:appgroup logs && chmod -R 755 logs +# Create logs and uploads directories and set permissions +RUN mkdir -p logs uploads && chown -R appuser:appgroup logs uploads && chmod -R 755 logs uploads EXPOSE 8080 USER appuser diff --git a/scripts/prod/fix-backend-permissions.sh b/scripts/prod/fix-backend-permissions.sh new file mode 100755 index 00000000..16a661ea --- /dev/null +++ b/scripts/prod/fix-backend-permissions.sh @@ -0,0 +1,70 @@ +#!/bin/bash + +echo "============================================" +echo "백엔드 권한 문제 긴급 수정" +echo "============================================" + +echo "" +echo "🔧 백엔드 컨테이너 권한 문제를 수정합니다..." +echo "" + +# 1. 기존 백엔드 컨테이너 중지 및 제거 +echo "1. 기존 백엔드 컨테이너 중지 중..." +docker-compose -f docker/prod/docker-compose.backend.prod.yml down -v --remove-orphans 2>/dev/null || true + +# 강제로 컨테이너 제거 +docker stop pms-backend-prod 2>/dev/null || true +docker rm pms-backend-prod 2>/dev/null || true + +# 2. 기존 이미지 제거 (캐시 무효화) +echo "2. 기존 백엔드 이미지 제거 중..." +docker rmi $(docker images | grep -E "(pms-backend|erp-node.*backend)" | awk '{print $3}') 2>/dev/null || true + +# 3. 새로운 이미지 빌드 +echo "3. 수정된 백엔드 이미지 빌드 중..." +docker-compose -f docker/prod/docker-compose.backend.prod.yml build --no-cache --pull + +if [ $? -ne 0 ]; then + echo "❌ 백엔드 빌드 실패" + exit 1 +fi + +# 4. 백엔드 컨테이너 시작 +echo "4. 백엔드 컨테이너 시작 중..." +docker-compose -f docker/prod/docker-compose.backend.prod.yml up -d + +# 5. 잠시 대기 후 상태 확인 +echo "5. 백엔드 서비스 안정화 대기 중... (30초)" +sleep 30 + +# 6. 상태 확인 +echo "6. 백엔드 컨테이너 상태 확인:" +docker-compose -f docker/prod/docker-compose.backend.prod.yml ps + +echo "" +echo "백엔드 최근 로그:" +docker-compose -f docker/prod/docker-compose.backend.prod.yml logs --tail=15 + +# 7. 헬스체크 +echo "" +echo "7. 헬스체크 수행 중..." +for i in {1..10}; do + if curl -s http://localhost:8080/health >/dev/null 2>&1; then + echo " ✅ 백엔드 서비스 정상 복구!" + echo "" + echo "🎉 수정 완료! 백엔드가 정상적으로 실행 중입니다." + exit 0 + else + echo " ⏳ 백엔드 응답 대기 중... ($i/10)" + sleep 3 + fi +done + +echo " ❌ 여전히 문제가 있습니다. 로그를 확인해주세요:" +docker-compose -f docker/prod/docker-compose.backend.prod.yml logs --tail=20 + +echo "" +echo "🔧 추가 디버깅 명령어:" +echo " 실시간 로그: docker-compose -f docker/prod/docker-compose.backend.prod.yml logs -f" +echo " 컨테이너 접속: docker exec -it pms-backend-prod bash" +echo " 권한 확인: docker exec -it pms-backend-prod ls -la /app/"