오빗(obit) API 서버를 NAS Docker에서 실행하려면 Dockerfile이 반드시 필요합니다.
아래 문서는 Dockerfile을 처음 만드는 사람도 그대로 따라 하면 성공할 수 있도록 단계별로 정리한 마크다운 가이드입니다.


📌 1. Dockerfile이란?

Dockerfile은 도커 이미지(컨테이너 실행용 템플릿)를 만드는 레시피 파일입니다.

  • Node.js 버전 지정
  • 프로젝트 소스 복사
  • 필요한 라이브러리 설치
  • 서버 실행 명령 정의

이 모든 과정을 Dockerfile 하나로 자동화합니다.


📌 2. 오빗 API용 기본 Dockerfile 템플릿

아래 Dockerfile은 오빗(obit-api)을 NAS에서 실행하기 위한 표준 구성입니다.

# 1) Node.js 공식 이미지 사용
FROM node:20-alpine

# 2) 작업 디렉토리 생성
WORKDIR /app

# 3) package.json, package-lock.json만 먼저 복사
COPY package*.json ./

# 4) 의존성 설치
RUN npm install

# 5) 전체 소스 복사
COPY . .

# 6) 서버 포트 명시
EXPOSE 4000

# 7) 서버 실행
CMD ["npm", "start"]

📌 3. NAS에서 Dockerfile로 이미지 빌드하는 방법

3-1. 빌드할 파일 준비

NAS에서 사용할 폴더 구조:

/volume1/docker/obit-api/
  ├─ Dockerfile
  ├─ package.json
  ├─ package-lock.json
  ├─ server.js
  ├─ controllers/
  ├─ routes/
  ├─ db.js
  └─ .env  (로컬에서 복사)

📌 .env 파일도 꼭 함께 업로드해야 합니다
( DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE 포함 )


📌 4. NAS에서 Docker 이미지 만들기

SSH 접속 후 아래 명령 실행:

cd /volume1/docker/obit-api
sudo docker build -t obit-api .

빌드 성공 메시지 예시

Successfully built abcd1234
Successfully tagged obit-api:latest

📌 5. NAS에서 Docker 실행하기

sudo docker run -d   --name obit-api   -p 4000:4000   --env-file .env   obit-api

📌 6. 정상 작동 테스트

브라우저에서:

http://NAS-IP:4000/health

응답:

{"status":"ok"}

성공!


📌 7. 자주 발생하는 오류 & 해결

❌ Error: Cannot find module

→ Dockerfile에서 프로젝트 파일을 COPY하지 않아서 발생
COPY . . 포함되어 있는지 확인

❌ DB 연결 오류

→ .env DB 정보 체크 → MariaDB 컨테이너가 실행 중인지 docker ps로 확인

❌ 포트 충돌

→ 이미 4000 포트를 다른 컨테이너가 사용 중
→ 다른 포트로 변경:

-p 5000:4000

📌 8. 완전 자동 배포 구성 (옵션)

원하면 Git → NAS 자동 배포(Pull + Rebuild) 방식도 만들 수 있습니다.

예:

git pull → docker build → docker stop → docker rm → docker run 재시작