个人健康档案管理工具MediKeep

简介

什么是 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 及子目录,并进入目录:

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

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

2. docker-compose.yml

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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. 启动容器

1
2
3
4
# 将 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