HospitalRun医院管理
步骤一:环境准备
HospitalRun 的 Docker 部署涉及多个组件:Nginx(Web 服务器和反向代理)、CouchDB(主数据库)、ElasticSearch(搜索)、Logstash(日志处理)、Node.js(后端服务)。
确保服务器满足:
- 操作系统:Ubuntu LTS(14.04 或更高版本)
- 内存:建议至少 4GB(ElasticSearch 是内存大户)
- 磁盘:至少 10GB 可用空间
- 软件:git、docker、docker-compose 已安装
验证:
git --version
docker --version
docker compose version步骤二:克隆仓库
cd /opt
git clone https://github.com/HospitalRun/hospitalrun-server.git
cd hospitalrun-server如果 GitHub 仓库已被归档但仍可访问,克隆应该能成功。如果克隆失败,说明仓库已被完全移除,此时只能寻找镜像或放弃部署。
步骤三:配置 docker-compose.yml
打开 docker-compose.yml 文件,需要修改以下关键配置-3:
SSL 配置:找到 DOMAIN_NAME 参数,将 www.example.com 替换为你实际使用的域名。
如果你没有域名或想使用自签名证书,将 SSL_TYPE 改为 self,然后将证书文件放在:
- data/nginx/cert/ssl.crt
- data/nginx/cert/ssl.key
你需要手动创建 data/nginx/cert 目录。
端口配置:默认 Nginx 使用宿主机 80 端口。如果 80 端口被占用,修改 docker-compose.yml 中的 "80:80" 为 "其他端口:80"。
步骤四:启动服务
docker-compose up --build首次启动需要下载镜像并构建,可能需要 10 分钟或更久,取决于网络速度。
等待所有容器启动完成。检查状态:
docker-compose ps确认所有服务的 State 为 Up。
步骤五:访问系统
在浏览器中打开:
http://localhost/默认登录凭据:
- 用户名:hradmin
- 密码:test
登录后立即修改密码。
步骤六:验证部署
登录后,建议做以下验证:
检查各模块是否正常:尝试创建一个测试患者,查看患者档案页面是否正常渲染。
验证离线功能(如果部署了桌面版):断开网络,确认系统仍能正常录入数据。
检查数据库连接:CouchDB 是系统的核心。可以通过 docker-compose logs 查看 CouchDB 容器是否有错误。
后续维护
查看日志:
docker-compose logs -f
docker-compose logs -f [容器名]停止服务:
docker-compose down重启服务:
docker-compose restart备份数据:HospitalRun 的所有数据保存在 data 文件夹中,包括 Nginx 的证书、CouchDB 数据和 Elasticsearch 数据。直接备份整个 data 目录即可。
严重警告:删除 data 文件夹将丢失所有数据,包括已安装的 SSL 证书-3。
常见问题
问题:端口 80 被占用,启动失败?
错误信息类似 Bind for 0.0.0.0:80: unexpected error Permission denied。解决方案:修改 docker-compose.yml 中的端口映射,例如改为 "8080:80",然后访问 http://localhost:8080。
问题:Nginx 容器启动后立即退出?
通常是因为 SSL 配置错误。如果是 auto 模式,Let‘s Encrypt 证书生成失败;如果是 self 模式,证书文件未正确放置在 data/nginx/cert/ 目录中。查看容器日志获取具体错误信息。
问题:ElasticSearch 占用内存过高?
ElasticSearch 默认可能尝试使用大量内存。可以在 docker-compose.yml 中为 ElasticSearch 容器设置 ES_JAVA_OPTS=-Xms512m -Xmx512m 限制内存使用。
问题:如何从 v1.x 升级到 v2?
不建议升级。v2 在归档前仍处于“heavy development”状态,且架构与 v1 差异较大。项目归档后更不存在官方升级路径。对于已部署的 v1.x,保持现状并做好隔离是最务实的选择。
问题:项目归档后还能使用吗?
技术上可以——归档只是停止了更新,已发布的 Docker 镜像和代码仍然存在。但你需要自行承担:安全漏洞无法修复、依赖过时导致的问题无法解决、遇到 bug 无处求助的风险。如果用于非关键场景或教学目的,可以尝试;如果用于真实医疗数据,强烈不建议。