Banner

Part-DB元器件管理系统

2026-09-15

说明:Docker 是官方推荐的部署方式,以下教程假设你有一台 Linux 服务器(Ubuntu 22.04/24.04 或 Debian 11/12),已安装 Docker 和 Docker Compose。Part-DB 官方 Docker 镜像为 jbtronics/part-db1,是基于 Apache + PHP-FPM 的经典稳定选择。另有一个实验性的 FrankenPHP 镜像 partdborg/part-db,性能更好但尚在测试阶段。

步骤一:创建项目目录

mkdir -p /opt/part-db
cd /opt/part-db

步骤二:生成 APP_SECRET

Part-DB 要求设置一个唯一的随机密钥,用于加密和会话安全。使用以下命令生成:

openssl rand -hex 32

保存输出的 64 位十六进制字符串,下一步会用到。

步骤三:创建 docker-compose.yml

在 /opt/part-db 目录下创建 docker-compose.yml 文件:

yaml

version: '3.3'

services:
  partdb:
    container_name: partdb
    image: jbtronics/part-db1:latest
    restart: unless-stopped
    ports:
      - "8080:80"
    volumes:
      - ./uploads:/var/www/html/uploads
      - ./public_media:/var/www/html/public/media
      - ./db:/var/www/html/var/db
    environment:
      - APP_ENV=docker
      - APP_SECRET=你刚才生成的64位字符串
      - BASE_CURRENCY=CNY
      - INSTANCE_NAME=我的元器件库
      - ALLOW_ATTACHMENT_DOWNLOADS=0
      - USE_GRAVATAR=0
      - DEFAULT_LANG=zh_CN
      - DEFAULT_TIMEZONE=Asia/Shanghai

关键配置说明:

环境变量作用注意事项
APP_SECRET加密密钥必须替换为步骤二生成的随机值
BASE_CURRENCY基础货币设为 CNY,此值一旦设定无法更改
INSTANCE_NAME实例名称显示在浏览器标题和页面头部
ALLOW_ATTACHMENT_DOWNLOADS附件下载设为 0 防止用户通过 URL 下载服务器任意文件,官方标注为潜在安全问题
USE_GRAVATAR头像服务设为 0 禁用外部 Gravatar
DEFAULT_LANG默认语言设为 zh_CN 启用中文界面
DEFAULT_TIMEZONE时区设为 Asia/Shanghai
注意:环境变量值不要加引号,否则引号会被当作值的一部分导致错误。这是官方文档中明确警告的常见问题-4-15。

步骤四:启动容器

docker compose up -d

等待容器启动完成(约 30 秒),然后检查状态:

docker compose ps
docker compose logs partdb

步骤五:初始化数据库

首次启动后需要创建数据库表结构:

docker exec --user=www-data partdb php bin/console doctrine:migrations:migrate --no-interaction

命令执行时会在输出中显示自动生成的管理员密码,请务必记录下来。

提示:你也可以在 docker-compose.yml 中设置 INITIAL_ADMIN_PW 环境变量来预设管理员密码,避免依赖输出信息。

步骤六:访问系统

浏览器打开 http://你的服务器IP:8080。使用以下默认凭据登录:

  • 用户名:admin
  • 密码:步骤五输出中显示的那个密码

登录后立即修改管理员密码。

后续维护命令

更新到新版本:

cd /opt/part-db
docker compose pull
docker compose up -d
# 执行数据库迁移
docker exec --user=www-data partdb php bin/console doctrine:migrations:migrate --no-interaction

查看日志:

docker compose logs -f partdb

备份数据:你的所有持久化数据都在 /opt/part-db 目录下的 uploads/、public_media/、db/ 三个子目录中,直接备份整个 /opt/part-db 目录即可。注意 uploads/ 目录除了用户上传的附件外,还会存放数据库自动迁移时的备份文件(位于 .automigration-backup 文件夹下)-4。

数据库选择指南

Part-DB 支持三种数据库,选择建议如下:

数据库适用场景优点缺点
SQLite个人、小团队(<5人)零配置、文件级备份不支持原生正则搜索、Unicode 限制(µ 和 μ 被视为不同字符)
MariaDB 10.7+中小团队(5-50人)原生自然排序、性能好需额外配置数据库服务
PostgreSQL大型实例、高并发事务性 DDL、性能优秀支持较新,测试不如其他后端充分
重要:数据库类型一旦选定无法轻易更改,请根据预期规模谨慎选择。

常见问题速查

问题:忘记管理员密码怎么办?
进入容器重置:

docker exec -it --user=www-data partdb php bin/console partdb:users:set-password admin

按提示输入新密码。

问题:想用 MySQL/MariaDB 替代 SQLite?
在
docker-compose.yml 中添加 MariaDB 服务,并设置 DATABASE_URL 环境变量指向数据库连接。注意 serverVersion 参数需根据实际版本填写。

问题:如何启用 HTTPS?
Part-DB 容器本身不处理 TLS。推荐在前面加一层 Nginx 或 Caddy 反向代理,由代理层管理证书。如果使用反向代理,需在环境变量中配置
TRUSTED_PROXIES 和 TRUSTED_HOSTS。

问题:导入 KiCad BOM 失败?
确保 KiCad 导出的 BOM 格式为 CSV,且包含必要的字段。Part-DB 对 KiCad 的 BOM 导入支持在持续完善中,建议使用最新版本。

问题:搜索 µ(微符号)找不到 μ(mu)?
这是 SQLite 的 Unicode 限制所致。如需完整的 Unicode 支持,请使用 MariaDB 或 PostgreSQL。

问题:想要更好的性能?
可以尝试实验性的 FrankenPHP 镜像
partdborg/part-db。该镜像基于 Caddy 和 FrankenPHP 构建,支持 PHP worker 模式,可复用已初始化的 Symfony 内核,初步测试显示请求时间从约 50ms 降低到约 10ms,同时 Caddy 的 TLS 处理也更简便。但该镜像目前标记为实验性,worker 模式尚未经过 Part-DB 的充分测试。


34