# 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 ```