Banner

OpenBoxes医疗供应链

2026-09-17

步骤一:环境准备

确保服务器满足:

  • 操作系统:Linux(Ubuntu 22.04/24.04 推荐)
  • 内存:至少 2GB(推荐 4GB,官方成本指南提到 4GB 内存可支撑约 50 并发用户-15)
  • Docker:Docker Engine v24 或更高版本-3
  • Docker Compose:已安装
docker --version
docker compose version

步骤二:创建项目目录

mkdir -p /opt/openboxes
cd /opt/openboxes

步骤三:创建 docker-compose.yml

官方在 openboxes/openboxes-docker 仓库中提供了 Compose 文件模板。以下是一个精简后的配置,将 OpenBoxes 应用和 MySQL 数据库组合在一起:

version: '3.7'

services:
  db:
    image: mysql:8.0
    container_name: openboxes-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: YourStrongRootPassword
      MYSQL_DATABASE: openboxes
      MYSQL_USER: openboxes
      MYSQL_PASSWORD: YourStrongDbPassword
    volumes:
      - ./db_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 10

  openboxes:
    image: ghcr.io/openboxes/openboxes:latest
    container_name: openboxes
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
    ports:
      - "8080:8080"
    environment:
      DATASOURCE_URL: "jdbc:mysql://db:3306/openboxes?useSSL=false&allowPublicKeyRetrieval=true"
      DATASOURCE_USERNAME: openboxes
      DATASOURCE_PASSWORD: YourStrongDbPassword
    volumes:
      - ./openboxes_data:/app/data

关键配置说明:

配置项说明
MYSQL_ROOT_PASSWORD数据库 root 密码,必须修改
MYSQL_PASSWORDOpenBoxes 数据库用户密码,必须修改
DATASOURCE_URLJDBC 连接字符串,db 是服务名
allowPublicKeyRetrieval=trueMySQL 8 连接所需
端口 8080:8080访问端口,可改为其他端口
安全警告:默认密码仅为示例,任何暴露到公网的部署都必须修改所有密码。

步骤四:启动服务

docker compose up -d

首次启动会拉取 OpenBoxes 和 MySQL 镜像,可能需要几分钟。检查状态:

docker compose ps

等待 db 服务变为 healthy,然后查看 OpenBoxes 日志:

docker compose logs -f openboxes

等待看到应用启动完成的消息(通常包含 Grails application running 或类似信息)。

步骤五:访问系统

在浏览器中打开:

http://你的服务器IP:8080/openboxes

默认登录凭据(首次启动自动创建):

  • 用户名:admin
  • 密码:password

登录后立即修改密码。

注意:官方文档说明,首次启动可能需要等待应用完成数据库初始化。如果页面显示错误,等待 30 秒后刷新。

步骤六:初始配置

登录后建议完成:

修改管理员密码:在用户设置中修改。

配置位置(Locations):根据你的仓库结构,创建主仓库、药房、病房等位置。这是使用请领功能的前提。

导入或创建产品目录:可以手动创建,也可以通过 CSV 导入。产品需要设定原子计量单位(如 box、ea、case),系统不支持单位换算,所以这一步要慎重。

设置库存水平(可选):为关键产品设置最小库存和再订货点,系统会自动生成再订货报表。

后续维护命令

查看日志:

docker compose logs -f openboxes
docker compose logs -f db

停止服务:

docker compose down

更新到新版本:

cd /opt/openboxes
docker compose pull
docker compose up -d

备份数据库:

docker compose exec db mysqldump -uopenboxes -popenboxes openboxes > backup-$(date +%Y%m%d).sql

备份数据目录:备份 /opt/openboxes 下的 db_data 和 openboxes_data 目录。

常见问题

问题:访问 8080 端口显示 502 或连接被拒绝?
应用可能还在启动中。查看
docker compose logs -f openboxes,等待应用完全启动。如果持续失败,检查数据库健康状态 docker compose ps。

问题:想用宿主机上的 MySQL 而不是容器?
官方提供了
docker-compose-hostdb.yml 处理这种情况,或者通过设置 DATASOURCE_URL 指向 host.docker.internal:3306 并添加 --add-host host.docker.internal:host-gateway。

问题:如何配置 HTTPS?
OpenBoxes 容器本身不处理 TLS。推荐在前面加 Nginx 或 Caddy 反向代理。AWS 部署方案中建议使用 Route 53 + ACM 证书 + ALB 的组合。

问题:单位换算怎么处理?
OpenBoxes 目前
不支持自动 UoM 换算,也不支持小数单位-11。建议在创建产品时选择最小的实际使用单位作为原子单位(例如,如果最终按盒出库,就用“盒”而不是“箱”),并在产品描述中明确标注单位。

问题:如何模拟“销售订单”?
官方建议的变通方案:创建一个代表客户的新位置,针对你的仓库生成采购订单,然后履行该订单,以此近似销售订单的效果。


9