<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[PartDB로 재고관리 웹사이트 구축하기]]></title><description><![CDATA[<h1>Part-DB로 전자부품 재고관리 웹사이트 구축하기 (Docker Compose + Nginx Proxy Manager + Let's Encrypt)</h1>
<p dir="auto">전자부품이 많아질수록 어디에 어떤 부품이 있는지 찾기 어려워집니다.</p>
<p dir="auto">저는 저항, 커패시터, IC, 커넥터, 릴레이, MOSFET 등을 관리하기 위해 오픈소스 재고관리 시스템인 <strong>Part-DB</strong>를 구축했습니다.</p>
<p dir="auto">이번 글에서는 Ubuntu 서버에서 Docker Compose를 이용하여 다음 서비스를 한 번에 구성하는 방법을 소개합니다.</p>
<p dir="auto">구성 요소</p>
<ul>
<li>Part-DB</li>
<li>MariaDB</li>
<li>Nginx Proxy Manager</li>
<li>Let's Encrypt SSL</li>
<li>Docker</li>
<li>Docker Compose</li>
</ul>
<p dir="auto">최종 구성도</p>
<pre><code class="language-text">인터넷
    │
    ▼
parts.example.com
    │
    ▼
Nginx Proxy Manager
    │
    ▼
Part-DB
    │
    ▼
MariaDB
</code></pre>
<hr />
<h1>1. 서버 준비</h1>
<p dir="auto">Ubuntu 업데이트</p>
<pre><code class="language-bash">sudo apt update
sudo apt upgrade -y
</code></pre>
<p dir="auto">필수 패키지 설치</p>
<pre><code class="language-bash">sudo apt install -y curl wget git nano
</code></pre>
<hr />
<h1>2. Docker 설치</h1>
<pre><code class="language-bash">curl -fsSL https://get.docker.com | sudo sh
</code></pre>
<p dir="auto">확인</p>
<pre><code class="language-bash">docker --version
</code></pre>
<hr />
<h1>3. Docker Compose 확인</h1>
<pre><code class="language-bash">docker compose version
</code></pre>
<hr />
<h1>4. 작업 폴더 생성</h1>
<pre><code class="language-bash">mkdir -p ~/partdb
cd ~/partdb
</code></pre>
<hr />
<h1>5. docker-compose.yml 작성</h1>
<p dir="auto">아래 파일 하나로 모든 서비스를 구성합니다.</p>
<pre><code class="language-yaml">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
</code></pre>
<hr />
<h1>6. 컨테이너 실행</h1>
<pre><code class="language-bash">docker compose up -d
</code></pre>
<p dir="auto">상태 확인</p>
<pre><code class="language-bash">docker ps
</code></pre>
<p dir="auto">정상 실행되면 다음 컨테이너가 보입니다.</p>
<pre><code class="language-text">npm
partdb
partdb-db
</code></pre>
<hr />
<h1>7. 도메인 설정</h1>
<p dir="auto">예시</p>
<pre><code class="language-text">parts.example.com
</code></pre>
<p dir="auto">DNS에서 A 레코드 생성</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>타입</th>
<th>이름</th>
<th>값</th>
</tr>
</thead>
<tbody>
<tr>
<td>A</td>
<td>parts</td>
<td>서버 공인IP</td>
</tr>
</tbody>
</table>
<p dir="auto">예시</p>
<pre><code class="language-text">parts.example.com → 123.123.123.123
</code></pre>
<p dir="auto">확인</p>
<pre><code class="language-bash">nslookup parts.example.com
</code></pre>
<hr />
<h1>8. Nginx Proxy Manager 접속</h1>
<p dir="auto">브라우저</p>
<pre><code class="language-text">http://서버IP:81
</code></pre>
<p dir="auto">초기 계정</p>
<pre><code class="language-text">Email:
admin@example.com

Password:
changeme
</code></pre>
<p dir="auto">첫 로그인 후 비밀번호 변경</p>
<hr />
<h1>9. Proxy Host 등록</h1>
<p dir="auto">메뉴</p>
<pre><code class="language-text">Hosts
→ Proxy Hosts
→ Add Proxy Host
</code></pre>
<p dir="auto">설정</p>
<pre><code class="language-text">Domain Names:
parts.example.com

Scheme:
http

Forward Hostname:
partdb

Forward Port:
80
</code></pre>
<p dir="auto">체크</p>
<pre><code class="language-text">Block Common Exploits
Websockets Support
</code></pre>
<p dir="auto">저장</p>
<hr />
<h1>10. SSL 인증서 발급</h1>
<p dir="auto">SSL 탭 이동</p>
<pre><code class="language-text">Request a new SSL Certificate
</code></pre>
<p dir="auto">체크</p>
<pre><code class="language-text">Force SSL
HTTP/2 Support
HSTS Enabled
</code></pre>
<p dir="auto">이메일 입력 후 저장</p>
<p dir="auto">몇 초 후 Let's Encrypt 인증서가 자동 발급됩니다.</p>
<hr />
<h1>11. Part-DB 최초 접속</h1>
<p dir="auto">브라우저 접속</p>
<pre><code class="language-text">https://parts.example.com
</code></pre>
<p dir="auto">설치 마법사가 시작됩니다.</p>
<hr />
<h1>12. 관리자 계정 생성</h1>
<p dir="auto">최초 접속 시</p>
<pre><code class="language-text">관리자 계정
이메일
비밀번호
</code></pre>
<p dir="auto">입력 후 완료</p>
<hr />
<h1>13. 한국어 설정</h1>
<p dir="auto">우측 상단</p>
<pre><code class="language-text">Settings
→ Language
→ 한국어
</code></pre>
<p dir="auto">선택</p>
<hr />
<h1>14. 저장 위치 구조 만들기</h1>
<p dir="auto">Part-DB의 강력한 기능은 보관 위치 관리입니다.</p>
<p dir="auto">예시</p>
<pre><code class="language-text">창고
 ├─ 서랍장1
 │   ├─ A1
 │   ├─ A2
 │   └─ A3
 │
 ├─ 서랍장2
 │   ├─ B1
 │   ├─ B2
 │   └─ B3
 │
 └─ 부품함
</code></pre>
<p dir="auto">부품 등록 시 위치를 지정하면 쉽게 찾을 수 있습니다.</p>
<hr />
<h1>15. 부품 등록</h1>
<p dir="auto">예시</p>
<pre><code class="language-text">품명:
STM32G431K8T6

제조사:
STMicroelectronics

수량:
100

보관위치:
서랍장1-A3
</code></pre>
<hr />
<h1>16. 바코드 및 QR 코드 활용</h1>
<p dir="auto">Part-DB는 바코드와 QR코드를 지원합니다.</p>
<p dir="auto">라벨 프린터를 이용하면</p>
<pre><code class="language-text">부품명
부품번호
QR코드
보관위치
</code></pre>
<p dir="auto">를 출력하여 관리할 수 있습니다.</p>
<p dir="auto">스마트폰으로 QR을 스캔하면 바로 해당 부품 페이지가 열립니다.</p>
<hr />
<h1>17. 공급업체 연동</h1>
<p dir="auto">지원되는 공급업체 예시</p>
<pre><code class="language-text">Mouser
DigiKey
LCSC
TME
Farnell
</code></pre>
<p dir="auto">API를 등록하면 부품 정보를 자동으로 가져올 수 있습니다.</p>
<hr />
<h1>18. 백업</h1>
<p dir="auto">MariaDB 백업</p>
<pre><code class="language-bash">docker exec partdb-db mysqldump \
-u root \
-prootpassword \
partdb &gt; partdb.sql
</code></pre>
<p dir="auto">복원</p>
<pre><code class="language-bash">docker exec -i partdb-db mysql \
-u root \
-prootpassword \
partdb &lt; partdb.sql
</code></pre>
<p dir="auto">전체 데이터 백업</p>
<pre><code class="language-bash">tar czvf partdb_backup.tar.gz \
mariadb \
partdb \
npm
</code></pre>
<hr />
<h1>19. 업데이트</h1>
<p dir="auto">이미지 최신화</p>
<pre><code class="language-bash">docker compose pull
</code></pre>
<p dir="auto">재시작</p>
<pre><code class="language-bash">docker compose up -d
</code></pre>
<hr />
<h1>20. 운영 팁</h1>
<p dir="auto">추천 카테고리</p>
<pre><code class="language-text">저항
커패시터
인덕터
다이오드
트랜지스터
MOSFET
IC
MCU
센서
릴레이
커넥터
케이블
전원모듈
PCB
기구부품
</code></pre>
<p dir="auto">추천 저장 위치</p>
<pre><code class="language-text">R-저항
C-커패시터
D-다이오드
Q-트랜지스터
U-IC
J-커넥터
</code></pre>
<hr />
<h1>마무리</h1>
<p dir="auto">Part-DB는 단순한 재고관리 프로그램이 아니라 전자부품 데이터베이스에 가깝습니다.</p>
<p dir="auto">부품 검색, 재고 관리, 위치 관리, 바코드 관리, 공급업체 연동까지 가능하기 때문에 개인 연구실부터 기업 개발팀까지 활용할 수 있습니다.</p>
<p dir="auto">Docker Compose와 Nginx Proxy Manager를 이용하면 설치도 매우 간단하며, Let's Encrypt SSL 인증서까지 무료로 적용할 수 있습니다.</p>
<p dir="auto">부품이 늘어나기 시작했다면 엑셀 대신 Part-DB를 사용해보시기 바랍니다.</p>
]]></description><link>http://bb.mirimonhub.com/topic/5/partdb로-재고관리-웹사이트-구축하기</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Jul 2026 18:26:56 GMT</lastBuildDate><atom:link href="http://bb.mirimonhub.com/topic/5.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 18 Jun 2026 11:38:47 GMT</pubDate><ttl>60</ttl></channel></rss>