diff --git a/DOCKER.md b/DOCKER.md new file mode 100644 index 00000000..6fdfd144 --- /dev/null +++ b/DOCKER.md @@ -0,0 +1,388 @@ +# 🐳 Docker κ°€μ΄λ“œ - PLM μ†”λ£¨μ…˜ (ERP-node) + +이 λ¬Έμ„œλŠ” PLM μ†”λ£¨μ…˜μ˜ Docker ν™˜κ²½ μ„€μ • 및 μ‚¬μš©λ²•μ„ μ„€λͺ…ν•©λ‹ˆλ‹€. + +## πŸ“‹ κ°œμš” + +**기술 μŠ€νƒ:** + +- **λ°±μ—”λ“œ**: Node.js + TypeScript + Prisma + PostgreSQL +- **ν”„λ‘ νŠΈμ—”λ“œ**: Next.js + TypeScript + Tailwind CSS +- **μ»¨ν…Œμ΄λ„ˆ**: Docker + Docker Compose + +**ν™˜κ²½:** + +- **개발**: Mac (λ³Όλ₯¨ 마운트 + Hot Reload) +- **운영**: Linux μ„œλ²„ (μ΅œμ ν™”λœ ν”„λ‘œλ•μ…˜ λΉŒλ“œ) + +--- + +## πŸ”§ 개발 ν™˜κ²½ (Mac) + +### λΉ λ₯Έ μ‹œμž‘ + +```bash +# 전체 μ„œλΉ„μŠ€ μ‹œμž‘ (병렬 λΉŒλ“œ - κ°€μž₯ 빠름!) +./start-all-parallel.sh +``` + +### κ°œλ³„ μ„œλΉ„μŠ€ μ‹œμž‘ + +```bash +# λ°±μ—”λ“œλ§Œ μ‹œμž‘ +./start-backend.sh + +# ν”„λ‘ νŠΈμ—”λ“œλ§Œ μ‹œμž‘ +./start-frontend.sh +``` + +### 개발용 Docker Compose νŒŒμΌλ“€ + +- **`docker-compose.backend.mac.yml`** - Mac 개발용 λ°±μ—”λ“œ + + - λ³Όλ₯¨ 마운트: `./backend-node:/app` (Hot Reload) + - Dockerfile: `backend-node/Dockerfile.dev` + - 포트: `8080` + +- **`docker-compose.frontend.mac.yml`** - Mac 개발용 ν”„λ‘ νŠΈμ—”λ“œ + - λ³Όλ₯¨ 마운트: `./frontend:/app` (Hot Reload) + - Dockerfile: `frontend/Dockerfile.dev` + - 포트: `3000` + +### 개발 ν™˜κ²½ νŠΉμ§• + +- βœ… **Hot Reload**: μ½”λ“œ λ³€κ²½ μ‹œ μžλ™ 반영 +- βœ… **λ³Όλ₯¨ 마운트**: μ‹€μ‹œκ°„ 개발 +- βœ… **디버그 λͺ¨λ“œ**: 상세 둜그 좜λ ₯ +- βœ… **λΉ λ₯Έ μž¬μ‹œμž‘**: Docker μž¬λΉŒλ“œ λΆˆν•„μš” + +### πŸ”₯ Hot Reload 상세 κ°€μ΄λ“œ + +#### βœ… **λ°”λ‘œ λ°˜μ˜λ˜λŠ” 것듀 (μ¦‰μ‹œ Hot Reload)** + +**λ°±μ—”λ“œ (Node.js + TypeScript):** + +```bash +backend-node/src/controllers/*.ts # API 컨트둀러 μˆ˜μ • +backend-node/src/services/*.ts # λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 μˆ˜μ • +backend-node/src/routes/*.ts # λΌμš°ν„° μ„€μ • μˆ˜μ • +backend-node/src/middleware/*.ts # 미듀웨어 μˆ˜μ • +backend-node/src/utils/*.ts # μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜ μˆ˜μ • +backend-node/src/types/*.ts # νƒ€μž… μ •μ˜ μˆ˜μ • +backend-node/src/config/*.ts # μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„€μ • +``` + +β†’ **반영 μ‹œκ°„**: 1-2초 (nodemon μžλ™ μž¬μ‹œμž‘) + +**ν”„λ‘ νŠΈμ—”λ“œ (Next.js + TypeScript):** + +```bash +frontend/components/**/*.tsx # React μ»΄ν¬λ„ŒνŠΈ μˆ˜μ • +frontend/app/**/*.tsx # νŽ˜μ΄μ§€ μ»΄ν¬λ„ŒνŠΈ μˆ˜μ • +frontend/lib/**/*.ts # μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜ μˆ˜μ • +frontend/hooks/*.ts # μ»€μŠ€ν…€ ν›… μˆ˜μ • +frontend/types/*.ts # νƒ€μž… μ •μ˜ μˆ˜μ • +frontend/constants/*.ts # μƒμˆ˜ μ •μ˜ μˆ˜μ • +CSS/SCSS 파일 μˆ˜μ • # μŠ€νƒ€μΌ λ³€κ²½ +``` + +β†’ **반영 μ‹œκ°„**: μ¦‰μ‹œ (Fast Refresh) + +#### ❌ **Docker μž¬μ‹œμž‘μ΄ ν•„μš”ν•œ 것듀** + +**μ˜μ‘΄μ„± λ³€κ²½:** + +```bash +package.json μˆ˜μ • # μƒˆ νŒ¨ν‚€μ§€ μΆ”κ°€/제거 +npm install / npm uninstall # νŒ¨ν‚€μ§€ μ„€μΉ˜/제거 +package-lock.json λ³€κ²½ # μ˜μ‘΄μ„± 잠금 파일 +``` + +**Prisma κ΄€λ ¨:** + +```bash +backend-node/prisma/schema.prisma # DB μŠ€ν‚€λ§ˆ λ³€κ²½ +npx prisma migrate # λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ μ‹€ν–‰ +npx prisma generate # ν΄λΌμ΄μ–ΈνŠΈ μž¬μƒμ„± +``` + +**μ„€μ • 파일:** + +```bash +next.config.mjs # Next.js μ„€μ • +tsconfig.json # TypeScript μ„€μ • +tailwind.config.js # Tailwind CSS μ„€μ • +.env / .env.local # ν™˜κ²½ λ³€μˆ˜ +eslint.config.mjs # ESLint μ„€μ • +``` + +**Docker κ΄€λ ¨:** + +```bash +Dockerfile / Dockerfile.dev # 도컀 파일 μˆ˜μ • +docker-compose.*.yml # Docker Compose μ„€μ • +.dockerignore # Docker λ¬΄μ‹œ 파일 +``` + +#### πŸ”„ **μž¬μ‹œμž‘ 방법** + +**νŠΉμ • μ„œλΉ„μŠ€λ§Œ μž¬μ‹œμž‘:** + +```bash +# λ°±μ—”λ“œλ§Œ μž¬μ‹œμž‘ +docker-compose -f docker-compose.backend.mac.yml restart backend + +# ν”„λ‘ νŠΈμ—”λ“œλ§Œ μž¬μ‹œμž‘ +docker-compose -f docker-compose.frontend.mac.yml restart frontend +``` + +**전체 μž¬λΉŒλ“œ:** + +```bash +# μ˜μ‘΄μ„± λ³€κ²½ μ‹œ (rebuild ν•„μš”) +docker-compose -f docker-compose.backend.mac.yml up --build -d +docker-compose -f docker-compose.frontend.mac.yml up --build -d +``` + +--- + +## πŸš€ 운영 ν™˜κ²½ (Linux) + +### 운영 μ„œλ²„ 배포 + +```bash +# Linux μ„œλ²„μ—μ„œ μ‹€ν–‰ +./start-all-separated-linux.sh +``` + +### κ°œλ³„ μ„œλΉ„μŠ€ μ‹œμž‘ (운영용) + +```bash +# λ°±μ—”λ“œλ§Œ μ‹œμž‘ (Linux) +./start-backend-linux.sh + +# ν”„λ‘ νŠΈμ—”λ“œλ§Œ μ‹œμž‘ (Linux) +./start-frontend-linux.sh +``` + +### 운영용 Docker Compose νŒŒμΌλ“€ + +- **`docker-compose.backend.prod.yml`** - 운영용 λ°±μ—”λ“œ + + - Dockerfile: `backend-node/Dockerfile` (ν”„λ‘œλ•μ…˜ μ΅œμ ν™”) + - 포트: `8080` + - ν™˜κ²½: `NODE_ENV=production` + +- **`docker-compose.frontend.prod.yml`** - 운영용 ν”„λ‘ νŠΈμ—”λ“œ + - Dockerfile: `frontend/Dockerfile` (ν”„λ‘œλ•μ…˜ μ΅œμ ν™”) + - 포트: `3000` + - ν™˜κ²½: μ΅œμ ν™”λœ λΉŒλ“œ + +### 운영 ν™˜κ²½ νŠΉμ§• + +- βœ… **μ΅œμ ν™”λœ λΉŒλ“œ**: ν”„λ‘œλ•μ…˜μš© 이미지 +- βœ… **λ³΄μ•ˆ κ°•ν™”**: 운영 ν™˜κ²½ μ„€μ • +- βœ… **μ„±λŠ₯ μ΅œμ ν™”**: 이미지 크기 μ΅œμ†Œν™” +- βœ… **μ•ˆμ •μ„±**: ν”„λ‘œλ•μ…˜ λͺ¨λ“œ + +--- + +## πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰 + +``` +ERP-node/ +β”œβ”€β”€ πŸ”§ 개발용 (Mac) +β”‚ β”œβ”€β”€ start-all-parallel.sh # 병렬 μ‹œμž‘ (μΆ”μ²œ) +β”‚ β”œβ”€β”€ start-backend.sh # λ°±μ—”λ“œλ§Œ +β”‚ β”œβ”€β”€ start-frontend.sh # ν”„λ‘ νŠΈμ—”λ“œλ§Œ +β”‚ β”œβ”€β”€ docker-compose.backend.mac.yml # Mac 개발용 λ°±μ—”λ“œ +β”‚ └── docker-compose.frontend.mac.yml# Mac 개발용 ν”„λ‘ νŠΈμ—”λ“œ +β”‚ +β”œβ”€β”€ πŸš€ 운영용 (Linux) +β”‚ β”œβ”€β”€ start-all-separated-linux.sh # Linux 운영용 +β”‚ β”œβ”€β”€ start-backend-linux.sh # λ°±μ—”λ“œλ§Œ (Linux) +β”‚ β”œβ”€β”€ start-frontend-linux.sh # ν”„λ‘ νŠΈμ—”λ“œλ§Œ (Linux) +β”‚ β”œβ”€β”€ docker-compose.backend.prod.yml# 운영용 λ°±μ—”λ“œ +β”‚ └── docker-compose.frontend.prod.yml# 운영용 ν”„λ‘ νŠΈμ—”λ“œ +β”‚ +β”œβ”€β”€ πŸ“ λ°±μ—”λ“œ +β”‚ β”œβ”€β”€ backend-node/ +β”‚ β”‚ β”œβ”€β”€ Dockerfile # ν”„λ‘œλ•μ…˜μš© +β”‚ β”‚ └── Dockerfile.dev # 개발용 +β”‚ └── src/, prisma/, package.json... +β”‚ +β”œβ”€β”€ πŸ“ ν”„λ‘ νŠΈμ—”λ“œ +β”‚ β”œβ”€β”€ frontend/ +β”‚ β”‚ β”œβ”€β”€ Dockerfile # ν”„λ‘œλ•μ…˜μš© +β”‚ β”‚ └── Dockerfile.dev # 개발용 +β”‚ └── app/, components/, hooks/... +β”‚ +└── πŸ—‚οΈ 기타 + β”œβ”€β”€ db/00-create-roles.sh # DB μ΄ˆκΈ°ν™” + └── README.md, DOCKER.md... +``` + +--- + +## 🌐 접속 정보 + +### 개발 ν™˜κ²½ + +- **ν”„λ‘ νŠΈμ—”λ“œ**: http://localhost:3000 +- **λ°±μ—”λ“œ API**: http://localhost:8080 +- **전체 μ•±**: http://localhost:9771 (ν”„λ‘μ‹œ μ„€μ • μ‹œ) + +### 운영 ν™˜κ²½ + +- **μ„œλ²„ IP에 따라 닀름** (Linux μ„œλ²„ μ„€μ • 확인) + +--- + +## πŸ› οΈ μ£Όμš” λͺ…λ Ήμ–΄ + +### Docker μ»¨ν…Œμ΄λ„ˆ 관리 + +```bash +# μ‹€ν–‰ 쀑인 μ»¨ν…Œμ΄λ„ˆ 확인 +docker ps + +# λͺ¨λ“  μ»¨ν…Œμ΄λ„ˆ 쀑지 +docker stop $(docker ps -q) + +# μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μ»¨ν…Œμ΄λ„ˆ/이미지 정리 +docker system prune -f +``` + +### 둜그 확인 + +```bash +# λ°±μ—”λ“œ 둜그 +docker logs pms-backend-mac -f # 개발용 +docker logs pms-backend-prod -f # 운영용 + +# ν”„λ‘ νŠΈμ—”λ“œ 둜그 +docker logs pms-frontend-mac -f # 개발용 +docker logs pms-frontend-prod -f # 운영용 +``` + +### μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€ 접속 + +```bash +# λ°±μ—”λ“œ μ»¨ν…Œμ΄λ„ˆ 접속 +docker exec -it pms-backend-mac bash # 개발용 +docker exec -it pms-backend-prod bash # 운영용 + +# ν”„λ‘ νŠΈμ—”λ“œ μ»¨ν…Œμ΄λ„ˆ 접속 +docker exec -it pms-frontend-mac sh # 개발용 +docker exec -it pms-frontend-prod sh # 운영용 +``` + +--- + +## 🚨 νŠΈλŸ¬λΈ”μŠˆνŒ… + +### 자주 λ°œμƒν•˜λŠ” λ¬Έμ œλ“€ + +#### 1. 포트 좩돌 + +```bash +# 포트 μ‚¬μš© 쀑인 ν”„λ‘œμ„ΈμŠ€ 확인 +lsof -i :8080 +lsof -i :3000 + +# ν”„λ‘œμ„ΈμŠ€ μ’…λ£Œ +kill -9 +``` + +#### 2. Docker λΉŒλ“œ 였λ₯˜ + +```bash +# Docker μΊμ‹œ 클리어 ν›„ μž¬λΉŒλ“œ +docker builder prune -f +./start-all-parallel.sh +``` + +#### 3. λ³Όλ₯¨ 마운트 문제 (κ°œλ°œν™˜κ²½) + +```bash +# Docker Desktop μ„€μ •μ—μ„œ 파일 곡유 확인 +# Docker Desktop > Settings > Resources > File Sharing +``` + +#### 4. λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° 였λ₯˜ + +```bash +# λ°μ΄ν„°λ² μ΄μŠ€ μ΄ˆκΈ°ν™” +./db/00-create-roles.sh + +# PostgreSQL μ—°κ²° 확인 +docker exec -it psql -U postgres +``` + +### Warning λ©”μ‹œμ§€λ“€ (λ¬΄μ‹œν•΄λ„ 됨) + +``` +WARN: the attribute `version` is obsolete +Network Error (μΌμ‹œμ ) +``` + +이런 λ©”μ‹œμ§€λ“€μ€ Docker Compose 버전 차이둜 λ°œμƒν•˜λ©°, κΈ°λŠ₯μ—λŠ” 영ν–₯ μ—†μŠ΅λ‹ˆλ‹€. + +--- + +## πŸ“ˆ μ„±λŠ₯ μ΅œμ ν™” + +### 개발 ν™˜κ²½ μ΅œμ ν™” + +- βœ… **병렬 λΉŒλ“œ**: `start-all-parallel.sh` μ‚¬μš© +- βœ… **Docker μΊμ‹œ**: `--no-cache` 제거됨 +- βœ… **npm μ΅œμ ν™”**: `--prefer-offline --no-audit` 적용 + +### 운영 ν™˜κ²½ μ΅œμ ν™” + +- βœ… **λ©€ν‹° μŠ€ν…Œμ΄μ§€ λΉŒλ“œ**: Dockerfile μ΅œμ ν™” +- βœ… **이미지 크기 μ΅œμ†Œν™”**: Alpine Linux 기반 +- βœ… **μ˜μ‘΄μ„± μΊμ‹œ**: λ ˆμ΄μ–΄ 캐싱 ν™œμš© + +--- + +## πŸ”„ μ—…λ°μ΄νŠΈ κ°€μ΄λ“œ + +### 개발 ν™˜κ²½ μ—…λ°μ΄νŠΈ + +```bash +# μ½”λ“œ λ³€κ²½ μ‹œ (Hot Reload μžλ™ 반영) +# 별도 μž‘μ—… λΆˆν•„μš” + +# μ˜μ‘΄μ„± λ³€κ²½ μ‹œ +docker-compose -f docker-compose.backend.mac.yml up --build -d +``` + +### 운영 ν™˜κ²½ μ—…λ°μ΄νŠΈ + +```bash +# μƒˆλ‘œμš΄ 버전 배포 +./start-all-separated-linux.sh +``` + +--- + +## πŸ“ž 지원 + +**문제 λ°œμƒ μ‹œ:** + +1. 이 λ¬Έμ„œμ˜ νŠΈλŸ¬λΈ”μŠˆνŒ… μ„Ήμ…˜ 확인 +2. Docker 둜그 확인 (`docker logs `) +3. κ°œλ°œνŒ€μ— 문의 + +**ν”„λ‘œμ νŠΈ κ΄€λ ¨:** + +- Node.js λ°±μ—”λ“œ: `backend-node/` 디렉토리 +- Next.js ν”„λ‘ νŠΈμ—”λ“œ: `frontend/` 디렉토리 +- λ°μ΄ν„°λ² μ΄μŠ€: PostgreSQL (JNDI μ„€μ •) + +--- + +**버전**: 1.0.0 +**λ§ˆμ§€λ§‰ μ—…λ°μ΄νŠΈ**: 2024λ…„ 12μ›” 28일 +**μž‘μ„±μž**: PLM κ°œλ°œνŒ€