feat(deploy): Complete PostgreSQL migration and Docker image build

Summary:
- PostgreSQL database migration to RDS completed (90MB SQL, 11 schemas)
- Frontend Nginx Docker image built and pushed to ACR (v1.0, ~50MB)
- Python microservice Docker image built and pushed to ACR (v1.0, 1.12GB)
- Created 3 deployment documentation files

Docker Configuration Files:
- frontend-v2/Dockerfile: Multi-stage build with nginx:alpine
- frontend-v2/.dockerignore: Optimize build context
- frontend-v2/nginx.conf: SPA routing and API proxy
- frontend-v2/docker-entrypoint.sh: Dynamic env injection
- extraction_service/Dockerfile: Multi-stage build with Aliyun Debian mirror
- extraction_service/.dockerignore: Optimize build context
- extraction_service/requirements-prod.txt: Production dependencies (removed Nougat)

Deployment Documentation:
- docs/05-部署文档/00-部署进度总览.md: One-stop deployment status overview
- docs/05-部署文档/07-前端Nginx-SAE部署操作手册.md: Frontend deployment guide
- docs/05-部署文档/08-PostgreSQL数据库部署操作手册.md: Database deployment guide
- docs/00-系统总体设计/00-系统当前状态与开发指南.md: Updated with deployment status

Database Migration:
- RDS instance: pgm-2zex1m2y3r23hdn5 (2C4G, PostgreSQL 15.0)
- Database: ai_clinical_research
- Schemas: 11 business schemas migrated successfully
- Data: 3 users, 2 projects, 1204 literatures verified
- Backup: rds_init_20251224_154529.sql (90MB)

Docker Images:
- Frontend: crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/ai-clinical_frontend-nginx:v1.0
- Python: crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/python-extraction:v1.0

Key Achievements:
- Resolved Docker Hub network issues (using generic tags)
- Fixed 30 TypeScript compilation errors
- Removed Nougat OCR to reduce image size by 1.5GB
- Used Aliyun Debian mirror to resolve apt-get network issues
- Implemented multi-stage builds for optimization

Next Steps:
- Deploy Python microservice to SAE
- Build Node.js backend Docker image
- Deploy Node.js backend to SAE
- Deploy frontend Nginx to SAE
- End-to-end verification testing

Status: Docker images ready, SAE deployment pending
This commit is contained in:
2025-12-24 18:21:55 +08:00
parent 5fa7b0bbe1
commit b64896a307
134 changed files with 4185 additions and 53 deletions

View File

@@ -0,0 +1,48 @@
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
venv/
env/
ENV/
.venv
# 测试
.pytest_cache/
.coverage
htmlcov/
*.log
# IDE
.vscode/
.idea/
*.swp
*.swo
# 文档
*.md
docs/
# Git
.git/
.gitignore
# 环境变量
.env
.env.local
# 临时文件
*.tmp
temp/
tmp/
uploads/
# 模型缓存 (避免打包Nougat模型)
.cache/
models/
*.pth
*.pt
*.onnx

View File

@@ -0,0 +1,56 @@
# ========================================
# 多阶段构建Python微服务
# ========================================
# -------------------- 阶段1: 构建阶段 --------------------
FROM python:3-slim AS builder
# 设置工作目录
WORKDIR /app
# 替换为阿里云镜像源(为将来可能的构建依赖做准备)
RUN sed -i 's|http://deb.debian.org|http://mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources \
&& sed -i 's|http://security.debian.org|http://mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources
# 复制依赖文件
COPY requirements-prod.txt .
# 安装Python依赖到临时目录使用预编译wheel无需编译依赖
RUN pip install --no-cache-dir --user -r requirements-prod.txt
# -------------------- 阶段2: 运行阶段 --------------------
FROM python:3-slim
# 设置工作目录
WORKDIR /app
# 替换为阿里云镜像源并安装运行时依赖
RUN sed -i 's|http://deb.debian.org|http://mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources \
&& sed -i 's|http://security.debian.org|http://mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
libgl1 \
libglib2.0-0 \
libgomp1 \
&& rm -rf /var/lib/apt/lists/*
# 从构建阶段复制Python包
COPY --from=builder /root/.local /root/.local
# 复制应用代码
COPY . .
# 设置Python路径
ENV PATH=/root/.local/bin:$PATH
ENV PYTHONUNBUFFERED=1
# 暴露端口
EXPOSE 8000
# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
CMD python -c "import requests; requests.get('http://localhost:8000/api/health', timeout=5)"
# 启动命令
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "2"]

View File

@@ -31,4 +31,6 @@ __version__ = '1.0.0'

View File

@@ -164,4 +164,6 @@ def get_missing_summary(df: pd.DataFrame) -> dict:

View File

@@ -124,4 +124,6 @@ def apply_filter(

View File

@@ -289,3 +289,5 @@ def get_unpivot_preview(

View File

@@ -0,0 +1,43 @@
# ========================================
# 生产环境依赖 (移除Nougat和重量级依赖)
# ========================================
# Web框架
fastapi==0.104.1
uvicorn[standard]==0.24.0
python-multipart==0.0.6
# 数据处理 (DC工具必需)
pandas>=2.0.0
numpy>=1.24.0
polars>=0.19.0
# PDF处理 (核心轻量级库)
PyMuPDF>=1.24.0
pdfplumber==0.10.3
# Docx处理
mammoth==1.6.0
python-docx==1.1.0
# 语言检测
langdetect==1.0.9
# 编码检测
chardet==5.2.0
# 工具
python-dotenv==1.0.0
pydantic>=2.10.0
# 日志
loguru==0.7.2
# 测试工具
requests==2.31.0
# ========================================
# 注意:生产环境已移除以下重量级依赖
# - nougat-ocr==0.1.17 (约1.5GB)
# - albumentations==1.3.1 (Nougat依赖)
# ========================================

View File

@@ -296,6 +296,8 @@ if __name__ == "__main__":

View File

@@ -62,6 +62,8 @@ except Exception as e:

View File

@@ -42,6 +42,8 @@ except Exception as e: