오빗(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 재시작
답글 남기기