AutoMedinfo/DEPLOYMENT.md

407 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 医学信息支持系统 - 部署说明
## 环境要求
### 开发环境
- **JDK**: 17 或更高版本
- **Node.js**: 18 或更高版本
- **Maven**: 3.8 或更高版本
- **MySQL**: 8.0 或更高版本
### 生产环境
- **Docker**: 20.10 或更高版本
- **Docker Compose**: 2.0 或更高版本
## 快速开始使用Docker
### 1. 克隆项目
```bash
git clone <repository-url>
cd 文献流程
```
### 2. 配置环境变量
复制环境变量示例文件并修改配置:
```bash
cp .env.example .env
```
编辑 `.env` 文件,配置以下关键信息:
```env
# 数据库密码
MYSQL_ROOT_PASSWORD=your-secure-password
MYSQL_PASSWORD=your-secure-password
# JWT密钥生产环境必须修改
JWT_SECRET=your-very-secure-jwt-secret-key
# Dify API配置
DIFY_API_KEY=your-dify-api-key
# 大模型API配置
LLM_API_KEY=your-llm-api-key
```
### 3. 启动服务
```bash
docker-compose up -d
```
### 4. 访问系统
- **前端地址**: http://localhost
- **后端API**: http://localhost:8080/api
- **默认账号**: admin / admin123
### 5. 查看日志
```bash
# 查看所有服务日志
docker-compose logs -f
# 查看特定服务日志
docker-compose logs -f backend
docker-compose logs -f frontend
```
### 6. 停止服务
```bash
docker-compose down
```
## 本地开发部署
### 后端开发
#### 1. 准备MySQL数据库
```bash
# 启动MySQL
mysql -u root -p
# 执行数据库脚本
source database/schema.sql
source database/sample_data.sql
```
#### 2. 配置application.yml
编辑 `backend/src/main/resources/application.yml`
```yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/medical_info_system
username: your-username
password: your-password
```
#### 3. 启动后端服务
```bash
cd backend
mvn clean install
mvn spring-boot:run
```
后端服务将在 http://localhost:8080 启动。
#### 4. API文档
启动后访问http://localhost:8080/api/swagger-ui.html
### 前端开发
#### 1. 安装依赖
```bash
cd frontend
npm install
```
#### 2. 启动开发服务器
```bash
npm run dev
```
前端开发服务器将在 http://localhost:3000 启动。
#### 3. 构建生产版本
```bash
npm run build
```
构建结果将输出到 `frontend/dist` 目录。
## 生产环境部署
### 方式一使用Docker Compose推荐
1. 按照"快速开始"部分的步骤操作
2. 确保配置正确的环境变量
3. 建议配置反向代理如Nginx并启用HTTPS
### 方式二:手动部署
#### 后端部署
```bash
cd backend
mvn clean package -DskipTests
java -jar target/medical-info-system-1.0.0.jar --spring.profiles.active=prod
```
#### 前端部署
```bash
cd frontend
npm run build
# 将dist目录内容部署到Nginx
cp -r dist/* /usr/share/nginx/html/
```
#### Nginx配置示例
```nginx
server {
listen 80;
server_name your-domain.com;
# 前端静态文件
root /usr/share/nginx/html;
index index.html;
# 前端路由
location / {
try_files $uri $uri/ /index.html;
}
# 后端API代理
location /api/ {
proxy_pass http://localhost:8080/api/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
```
## 配置说明
### 后端配置
主配置文件:`backend/src/main/resources/application.yml`
```yaml
app:
# JWT配置
jwt:
secret: ${JWT_SECRET} # JWT密钥
expiration: 86400000 # 过期时间(毫秒)
# Dify配置
dify:
api-url: ${DIFY_API_URL}
api-key: ${DIFY_API_KEY}
# 大模型配置
llm:
api-url: ${LLM_API_URL}
api-key: ${LLM_API_KEY}
model: ${LLM_MODEL}
# 文献下载配置
literature:
download-path: ${LITERATURE_DOWNLOAD_PATH}
accounts:
pubmed:
username: ${PUBMED_USERNAME}
password: ${PUBMED_PASSWORD}
embase:
username: ${EMBASE_USERNAME}
password: ${EMBASE_PASSWORD}
cnki:
username: ${CNKI_USERNAME}
password: ${CNKI_PASSWORD}
```
### 前端配置
代理配置:`frontend/vite.config.js`
```javascript
export default defineConfig({
server: {
port: 3000,
proxy: {
'/api': {
target: 'http://localhost:8080',
changeOrigin: true
}
}
}
})
```
## 数据库管理
### 备份数据库
```bash
# 使用Docker
docker exec medical-info-mysql mysqldump -u root -p medical_info_system > backup.sql
# 本地MySQL
mysqldump -u root -p medical_info_system > backup.sql
```
### 恢复数据库
```bash
# 使用Docker
docker exec -i medical-info-mysql mysql -u root -p medical_info_system < backup.sql
# 本地MySQL
mysql -u root -p medical_info_system < backup.sql
```
## 监控与日志
### 应用日志
后端日志位置:
- Docker部署`./logs/`
- 本地开发:控制台输出
### Docker容器监控
```bash
# 查看容器状态
docker-compose ps
# 查看资源使用
docker stats
# 查看容器日志
docker-compose logs -f [service-name]
```
## 常见问题
### 1. 数据库连接失败
**问题**: 后端无法连接数据库
**解决方案**:
- 检查MySQL服务是否启动
- 确认数据库用户名和密码是否正确
- 检查防火墙设置
- 如使用Docker确保容器在同一网络中
### 2. 前端无法访问后端API
**问题**: 前端请求后端API时出现跨域错误
**解决方案**:
- 检查后端CORS配置
- 确认API代理配置正确
- 检查后端服务是否正常运行
### 3. 文献下载失败
**问题**: 系统无法下载文献
**解决方案**:
- 检查文献数据库账号配置是否正确
- 确认下载路径是否有写入权限
- 查看后端日志了解具体错误信息
### 4. Dify API调用失败
**问题**: AI功能无法正常使用
**解决方案**:
- 确认Dify API Key配置正确
- 检查网络连接是否正常
- 查看API配额是否用完
## 性能优化
### 数据库优化
```sql
-- 创建必要的索引
CREATE INDEX idx_inquiry_status ON inquiry_requests(status);
CREATE INDEX idx_inquiry_created_at ON inquiry_requests(created_at);
CREATE INDEX idx_literature_inquiry ON literatures(inquiry_request_id);
```
### 应用优化
1. **后端**:
- 启用数据库连接池
- 配置适当的JVM参数
- 使用Redis缓存热点数据
2. **前端**:
- 启用Gzip压缩
- 使用CDN加速静态资源
- 实现路由懒加载
### Docker优化
```yaml
# docker-compose.yml中添加资源限制
services:
backend:
deploy:
resources:
limits:
cpus: '2'
memory: 2G
```
## 安全建议
1. **生产环境必须修改**:
- 数据库密码
- JWT密钥
- 默认管理员密码
2. **启用HTTPS**:
- 配置SSL证书
- 强制HTTPS访问
3. **定期更新**:
- 及时更新依赖包
- 修复安全漏洞
4. **访问控制**:
- 配置防火墙规则
- 限制数据库访问
- 实施IP白名单
## 技术支持
如遇到问题,请:
1. 查看日志文件获取详细错误信息
2. 参考本文档的常见问题部分
3. 联系技术支持团队
## 更新日志
### v1.0.0 (2024-10-26)
- 初始版本发布
- 实现核心功能模块
- 支持Docker部署