在这里插入图片描述

简介

什么是 MediKeep?

MediKeep 是一个开源的个人健康档案管理工具,基于 React 前端和 FastAPI 后端构建。它可以帮助用户集中管理个人医疗记录、追踪用药情况、生成健康报告,并与医疗机构共享数据。

主要特点

  • 病历管理:集中存储和管理个人医疗记录,包括诊断、检查报告、处方等
  • 用药追踪:记录和管理所有药物信息,包括剂量、服药时间和用药计划
  • 报告生成:内置报告构建器,支持自定义健康报告并导出与医疗机构共享
  • 数据备份:支持通过管理后台或 CLI 工具进行数据备份与恢复
  • SSO 支持:可选集成 GoogleGitHubSSO 登录(OIDC 也支持)
  • 开源免费:基于自定义协议开源,可免费使用和部署

应用场景

  • 个人健康记录管理:将分散在各处的病历、检查报告、处方等集中数字化管理
  • 用药提醒与追踪:记录家庭成员的用药情况,方便按时服药和管理药品库存
  • 就医资料准备:生成结构化的健康报告,快速提供给医生参考
  • 家庭健康管理:一个账号管理全家人的健康档案

总的来说,MediKeep 是一个功能完整的个人健康档案管理平台,适合希望数字化管理自己和家人医疗记录的用户。

安装

在群晖上以 Docker 方式安装。

本文写作时, latest 版本对应为 v0.58.0

docker-compose 安装

MediKeep 采用多容器架构,包含 PostgreSQL 数据库和 FastAPI 应用服务。由于镜像托管在 ghcr.io,建议通过 docker-compose 进行部署。

1. 创建目录

docker 文件夹中创建一个新文件夹 medikeep 及子目录,并进入目录:

# 新建文件夹 medikeep 和 子目录
mkdir -p /volume1/docker/medikeep/{backups,logs,postgres,uploads}

# 进入 medikeep 目录
cd /volume1/docker/medikeep

2. docker-compose.yml

可以从 GitHub 下载官方配置文件自己修改

curl -sO https://raw.githubusercontent.com/afairgiant/MediKeep/main/docker/docker-compose.yml

也可以直接保存老苏修改后的 docker-compose.yml

services:
  # PostgreSQL Database Service
  postgres:
    image: postgres:15.8-alpine
    container_name: medical-records-db
    restart: unless-stopped
    environment:
      POSTGRES_DB: medical_records
      POSTGRES_USER: medapp
      POSTGRES_PASSWORD: medikeep
    volumes:
      - ./postgres:/var/lib/postgresql/data
    #   - ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro
    #  ports:
    #   - '5432:5432'
    healthcheck:
      test:
        [
          'CMD-SHELL',
          'pg_isready -U ${DB_USER:-medapp} -d ${DB_NAME:-medical_records}',
        ]
      interval: 10s
      timeout: 5s
      retries: 5

  # Combined Frontend + Backend Application Service
  medical-records-app:
    image: ghcr.io/afairgiant/medikeep:latest
    container_name: medical-records-app
    restart: unless-stopped
    ports:
      - 8015:8000 # Single port serves both React app and FastAPI
    environment:
      DB_HOST: postgres
      DB_PORT: 5432
      DB_NAME: medical_records
      DB_USER: medapp
      DB_PASSWORD: medikeep
      SECRET_KEY: rR9EbERNMGXTB9PrdRx2qwZbxjvLZHco
      TZ: Asia/Shanghai
      LOG_LEVEL: INFO
      #PUID: ${PUID} # Enable if using bind mounts
      #PGID: ${PGID} # Enable if using bind mounts

      # SSL Configuration - set ENABLE_SSL=true in .env to enable HTTPS - Uncomment if needed
      #ENABLE_SSL: ${ENABLE_SSL:-false}
      # SSO Configuration (Optional) - SSO is disabled by default
      SSO_ENABLED: 'false'
      #SSO_PROVIDER_TYPE: ${SSO_PROVIDER_TYPE:-oidc}
      #SSO_CLIENT_ID: ${SSO_CLIENT_ID:-}
      #SSO_CLIENT_SECRET: ${SSO_CLIENT_SECRET:-}
      #SSO_ISSUER_URL: ${SSO_ISSUER_URL:-}
      #SSO_REDIRECT_URI: ${SSO_REDIRECT_URI:-}
      #SSO_ALLOWED_DOMAINS: ${SSO_ALLOWED_DOMAINS:-[]}

    volumes:
      - ./uploads:/app/uploads
      - ./logs:/app/logs
      - ./backups:/app/backups
      # Uncomment the line below and create certificates if you want HTTPS
      # - ./certs:/app/certs:ro
    depends_on:
      postgres:
        condition: service_healthy
    healthcheck:
      test: ['CMD', 'curl', '-f', 'http://localhost:8000/health']
      interval: 30s
      timeout: 10s
      retries: 3

3. 启动容器

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

docker-compose.yml 环境变量配置说明:

  • postgres 容器
环境变量 值/来源 描述
POSTGRES_DB medical_records 数据库名称
POSTGRES_USER medapp 数据库用户
POSTGRES_PASSWORD medikeep 数据库密码
  • medical-records-app 容器
环境变量 值/来源 描述
DB_HOST postgres 数据库主机
DB_PORT 5432 数据库端口
DB_NAME medical_records 数据库名称
DB_USER medapp 数据库用户
DB_PASSWORD medikeep 数据库密码
SECRET_KEY rR9EbERNMGXTB9PrdRx2qwZbxjvLZHco 应用密钥
TZ Asia/Shanghai 时区设置
LOG_LEVEL INFO 日志级别
PUID ${PUID} 用户ID(可选,bind mount用)
PGID ${PGID} 进程组ID(可选,bind mount用)
ENABLE_SSL ${ENABLE_SSL:-false} SSL启用(注释中,可选)
SSO_ENABLED ‘false’ SSO功能开关
SSO_PROVIDER_TYPE ${SSO_PROVIDER_TYPE:-oidc} SSO提供商类型(可选)
SSO_CLIENT_ID ${SSO_CLIENT_ID:-} SSO客户端ID(可选)
SSO_CLIENT_SECRET ${SSO_CLIENT_SECRET:-} SSO客户端密钥(可选)
SSO_ISSUER_URL ${SSO_ISSUER_URL:-} SSO发行者URL(可选)
SSO_REDIRECT_URI ${SSO_REDIRECT_URI:-} SSO重定向URI(可选)
SSO_ALLOWED_DOMAINS ${SSO_ALLOWED_DOMAINS:-[]} SSO允许域名(可选)

更多的环境变量,可以参考官方的文档:https://github.com/afairgiant/MediKeep/blob/main/docs/developer-guide/04-deployment.md

运行

容器启动后,在浏览器中访问 http://<群晖IP>:8015 即可进入 Web 界面

首次使用登录信息:

  • 用户名admin
  • 密码admin123

首次登录后务必修改默认密码。可以通过设置 ADMIN_DEFAULT_PASSWORD 环境变量来自定义初始管理员密码。

也可以自己创建一个账号

登录之后的主界面

虽然支持多语言,可惜没有中文,就这个一条,估计已经劝退了绝大多数人了

注意事项

  1. 首次部署必须修改密码admin123 是默认密码,存在安全隐患,生产环境务必立即修改。
  2. 数据库密码:务必使用强密码,并妥善保管。密码中特殊字符需要正确转义。
  3. 端口占用:确保本地端口 8015(可自定义)未被占用。可用 netstat -tunlp | grep 8015 检查。
  4. 数据备份:定期通过管理后台或 CLI 进行备份,备份文件存储在 /app/backups,建议映射到外部存储。
  5. SSO 配置:如果启用 SSO,请仔细阅读 SSO 快速入门指南,目前官方支持 GoogleGitHub
  6. 时区设置:建议将 TZ 设置为 Asia/Shanghai,确保日志和计划任务时间正确。
  7. 升级注意:镜像名已从旧的 personal-medical-records-keeper 更名为 medikeep,旧配置需要更新镜像名。

参考文档

afairgiant/MediKeep: Your personal health record keeper - built with React frontend and FastAPI backend
地址:https://github.com/afairgiant/MediKeep

MediKeep Docker Image
地址:https://github.com/afairgiant/MediKeep/pkgs/container/medikeep

MediKeep Wiki - User Guide, Admin Guide, Developer Guide
地址:https://github.com/afairgiant/MediKeep/wiki

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐