• PartDB로 재고관리 웹사이트 구축하기

    Part-DB로 전자부품 재고관리 웹사이트 구축하기 (Docker Compose + Nginx Proxy Manager + Let's Encrypt)

    전자부품이 많아질수록 어디에 어떤 부품이 있는지 찾기 어려워집니다.

    저는 저항, 커패시터, IC, 커넥터, 릴레이, MOSFET 등을 관리하기 위해 오픈소스 재고관리 시스템인 Part-DB를 구축했습니다.

    이번 글에서는 Ubuntu 서버에서 Docker Compose를 이용하여 다음 서비스를 한 번에 구성하는 방법을 소개합니다.

    구성 요소

    • Part-DB
    • MariaDB
    • Nginx Proxy Manager
    • Let's Encrypt SSL
    • Docker
    • Docker Compose

    최종 구성도

    인터넷
        │
        ▼
    parts.example.com
        │
        ▼
    Nginx Proxy Manager
        │
        ▼
    Part-DB
        │
        ▼
    MariaDB
    

    1. 서버 준비

    Ubuntu 업데이트

    sudo apt update
    sudo apt upgrade -y
    

    필수 패키지 설치

    sudo apt install -y curl wget git nano
    

    2. Docker 설치

    curl -fsSL https://get.docker.com | sudo sh
    

    확인

    docker --version
    

    3. Docker Compose 확인

    docker compose version
    

    4. 작업 폴더 생성

    mkdir -p ~/partdb
    cd ~/partdb
    

    5. docker-compose.yml 작성

    아래 파일 하나로 모든 서비스를 구성합니다.

    version: "3.9"
    
    services:
    
      npm:
        image: jc21/nginx-proxy-manager:latest
        container_name: npm
    
        restart: unless-stopped
    
        ports:
          - "80:80"
          - "81:81"
          - "443:443"
    
        volumes:
          - ./npm/data:/data
          - ./npm/letsencrypt:/etc/letsencrypt
    
      mariadb:
        image: mariadb:11
        container_name: partdb-db
    
        restart: unless-stopped
    
        environment:
          MYSQL_ROOT_PASSWORD: rootpassword
          MYSQL_DATABASE: partdb
          MYSQL_USER: partdb
          MYSQL_PASSWORD: partdbpassword
    
        command:
          --character-set-server=utf8mb4
          --collation-server=utf8mb4_unicode_ci
    
        volumes:
          - ./mariadb:/var/lib/mysql
    
      partdb:
        image: jbtronics/part-db1:latest
        container_name: partdb
    
        restart: unless-stopped
    
        depends_on:
          - mariadb
    
        environment:
          DATABASE_URL: mysql://partdb:partdbpassword@mariadb:3306/partdb
    
          APP_ENV: prod
          TRUSTED_PROXIES: 127.0.0.1,REMOTE_ADDR
    
        ports:
          - "8080:80"
    
        volumes:
          - ./partdb/uploads:/var/www/html/uploads
          - ./partdb/public_media:/var/www/html/public/media
    
    networks:
      default:
        name: partdb-network
    

    6. 컨테이너 실행

    docker compose up -d
    

    상태 확인

    docker ps
    

    정상 실행되면 다음 컨테이너가 보입니다.

    npm
    partdb
    partdb-db
    

    7. 도메인 설정

    예시

    parts.example.com
    

    DNS에서 A 레코드 생성

    타입 이름
    A parts 서버 공인IP

    예시

    parts.example.com → 123.123.123.123
    

    확인

    nslookup parts.example.com
    

    8. Nginx Proxy Manager 접속

    브라우저

    http://서버IP:81
    

    초기 계정

    Email:
    admin@example.com
    
    Password:
    changeme
    

    첫 로그인 후 비밀번호 변경


    9. Proxy Host 등록

    메뉴

    Hosts
    → Proxy Hosts
    → Add Proxy Host
    

    설정

    Domain Names:
    parts.example.com
    
    Scheme:
    http
    
    Forward Hostname:
    partdb
    
    Forward Port:
    80
    

    체크

    Block Common Exploits
    Websockets Support
    

    저장


    10. SSL 인증서 발급

    SSL 탭 이동

    Request a new SSL Certificate
    

    체크

    Force SSL
    HTTP/2 Support
    HSTS Enabled
    

    이메일 입력 후 저장

    몇 초 후 Let's Encrypt 인증서가 자동 발급됩니다.


    11. Part-DB 최초 접속

    브라우저 접속

    https://parts.example.com
    

    설치 마법사가 시작됩니다.


    12. 관리자 계정 생성

    최초 접속 시

    관리자 계정
    이메일
    비밀번호
    

    입력 후 완료


    13. 한국어 설정

    우측 상단

    Settings
    → Language
    → 한국어
    

    선택


    14. 저장 위치 구조 만들기

    Part-DB의 강력한 기능은 보관 위치 관리입니다.

    예시

    창고
     ├─ 서랍장1
     │   ├─ A1
     │   ├─ A2
     │   └─ A3
     │
     ├─ 서랍장2
     │   ├─ B1
     │   ├─ B2
     │   └─ B3
     │
     └─ 부품함
    

    부품 등록 시 위치를 지정하면 쉽게 찾을 수 있습니다.


    15. 부품 등록

    예시

    품명:
    STM32G431K8T6
    
    제조사:
    STMicroelectronics
    
    수량:
    100
    
    보관위치:
    서랍장1-A3
    

    16. 바코드 및 QR 코드 활용

    Part-DB는 바코드와 QR코드를 지원합니다.

    라벨 프린터를 이용하면

    부품명
    부품번호
    QR코드
    보관위치
    

    를 출력하여 관리할 수 있습니다.

    스마트폰으로 QR을 스캔하면 바로 해당 부품 페이지가 열립니다.


    17. 공급업체 연동

    지원되는 공급업체 예시

    Mouser
    DigiKey
    LCSC
    TME
    Farnell
    

    API를 등록하면 부품 정보를 자동으로 가져올 수 있습니다.


    18. 백업

    MariaDB 백업

    docker exec partdb-db mysqldump \
    -u root \
    -prootpassword \
    partdb > partdb.sql
    

    복원

    docker exec -i partdb-db mysql \
    -u root \
    -prootpassword \
    partdb < partdb.sql
    

    전체 데이터 백업

    tar czvf partdb_backup.tar.gz \
    mariadb \
    partdb \
    npm
    

    19. 업데이트

    이미지 최신화

    docker compose pull
    

    재시작

    docker compose up -d
    

    20. 운영 팁

    추천 카테고리

    저항
    커패시터
    인덕터
    다이오드
    트랜지스터
    MOSFET
    IC
    MCU
    센서
    릴레이
    커넥터
    케이블
    전원모듈
    PCB
    기구부품
    

    추천 저장 위치

    R-저항
    C-커패시터
    D-다이오드
    Q-트랜지스터
    U-IC
    J-커넥터
    

    마무리

    Part-DB는 단순한 재고관리 프로그램이 아니라 전자부품 데이터베이스에 가깝습니다.

    부품 검색, 재고 관리, 위치 관리, 바코드 관리, 공급업체 연동까지 가능하기 때문에 개인 연구실부터 기업 개발팀까지 활용할 수 있습니다.

    Docker Compose와 Nginx Proxy Manager를 이용하면 설치도 매우 간단하며, Let's Encrypt SSL 인증서까지 무료로 적용할 수 있습니다.

    부품이 늘어나기 시작했다면 엑셀 대신 Part-DB를 사용해보시기 바랍니다.