107 lines
3.1 KiB
Markdown
107 lines
3.1 KiB
Markdown
# IPS Dominio Backend
|
|
|
|
Proyecto Docker Compose con los servicios necesarios para el nodo de dominio IPS (International Patient Summary).
|
|
|
|
## Servicios
|
|
|
|
| Servicio | Imagen / Fuente | Descripción |
|
|
|---|---|---|
|
|
| `hapi-fhir` | `hapiproject/hapi:latest` | Servidor FHIR R4 (implementación Spring Boot) |
|
|
| `hapi-db` | `postgres:14.6` | Base de datos PostgreSQL para HAPI FHIR |
|
|
| `bus-gateway` | `./bus-gateway` | Gateway hacia el Bus de salud (MPI y Document Registry) |
|
|
| `nginx` | `nginx:alpine` | Proxy inverso — punto de entrada HTTP/HTTPS |
|
|
|
|
### Routing nginx
|
|
|
|
| Ruta | Destino |
|
|
|---|---|
|
|
| `/bus-gateway/*` | `bus-gateway:3000` |
|
|
| todo lo demás | `hapi-fhir:8080` |
|
|
|
|
## Requisitos
|
|
|
|
- Docker >= 20.10.8
|
|
- Docker Compose >= 1.29.2
|
|
|
|
## Configuración
|
|
|
|
### 1. Variables de entorno
|
|
|
|
Copia el archivo de ejemplo y completa los valores:
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
```
|
|
|
|
| Variable | Descripción |
|
|
|---|---|
|
|
| `BUS_URL` | URL base del Bus de salud |
|
|
| `BUS_JWT_SECRET` | Secreto compartido para JWT con el Bus |
|
|
| `BUS_ISSUER` | Issuer del token JWT |
|
|
| `MPI_URL` | URL del servicio MPI (default: `BUS_URL`) |
|
|
| `DOCUMENT_REGISTRY_URL` | URL del Document Registry (default: `BUS_URL`) |
|
|
| `MPI_SCOPE` | Scopes OAuth para MPI |
|
|
| `DOCUMENT_REGISTRY_SCOPE` | Scopes OAuth para Document Registry |
|
|
| `BUS_DEBUG` | Habilita logs de requests al Bus (`true` / `false`) |
|
|
| `SPRING_DATASOURCE_URL` | JDBC URL de la BD — debe usar puerto `5433` (`jdbc:postgresql://hapi-db:5433/root`) |
|
|
| `SPRING_DATASOURCE_USERNAME` | Usuario de la base de datos |
|
|
| `SPRING_DATASOURCE_PASSWORD` | Contraseña de la base de datos |
|
|
| `POSTGRES_DB` | Nombre de la base de datos PostgreSQL |
|
|
| `POSTGRES_USER` | Usuario PostgreSQL |
|
|
| `POSTGRES_PASSWORD` | Contraseña PostgreSQL |
|
|
|
|
### 2. Configuración de nginx (HTTP o HTTPS)
|
|
|
|
La variable `NGINX_CONF` en el `.env` selecciona el modo:
|
|
|
|
**HTTP** (por defecto):
|
|
```env
|
|
NGINX_CONF=http
|
|
```
|
|
|
|
**HTTPS** (requiere certificados):
|
|
```env
|
|
NGINX_CONF=https
|
|
SSL_CERT_PATH=./certs/server.crt
|
|
SSL_KEY_PATH=./certs/server.key
|
|
```
|
|
|
|
Los certificados se inyectan como Docker secrets y nginx los lee desde `/run/secrets/ssl_cert` y `/run/secrets/ssl_key`. En modo HTTPS el tráfico HTTP (puerto 80) se redirige automáticamente a HTTPS (443).
|
|
|
|
Los archivos de configuración están en [nginx/http.conf](nginx/http.conf) y [nginx/https.conf](nginx/https.conf).
|
|
|
|
### 3. Configuración HAPI FHIR
|
|
|
|
Los parámetros del servidor FHIR se ajustan en [hapi-config/application.yaml](hapi-config/application.yaml). El servidor usa **Lucene** como backend de búsqueda (índice local, no requiere servicio externo).
|
|
|
|
## Levantar los servicios
|
|
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
|
|
HAPI FHIR tarda aproximadamente **30-40 segundos** en arrancar completamente.
|
|
|
|
## Verificar el despliegue
|
|
|
|
```bash
|
|
# Estado de los contenedores (hapi-db debe aparecer "healthy")
|
|
docker compose ps
|
|
|
|
# CapabilityStatement FHIR a través de nginx
|
|
curl http://localhost/fhir/metadata
|
|
|
|
# Bus Gateway a través de nginx
|
|
curl http://localhost/bus-gateway/health
|
|
```
|
|
|
|
## Detener los servicios
|
|
|
|
```bash
|
|
# Solo detener
|
|
docker compose down
|
|
|
|
# Detener y eliminar volúmenes (borra datos de la BD)
|
|
docker compose down -v
|
|
```
|