Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/mjstealey/ohif-orthanc-dimse-docker

OHIF Viewer and Orthanc (core with plugins) defined as docker-compose services
https://github.com/mjstealey/ohif-orthanc-dimse-docker

dimse docker docker-compose nginx ohif-viewer orthanc postgres self-signed-certificate

Last synced: 10 days ago
JSON representation

OHIF Viewer and Orthanc (core with plugins) defined as docker-compose services

Awesome Lists containing this project

README

        

# OHIF Viewer - Orthanc with DIMSE - Nginx reverse proxy

---

**NOTE**: The OHIF Viewer code has changed a fair bit since this repository was originally created and as such the `:latest` tagged Docker reference no longer works with my particular setup at this time. The `docker-compose.yml` file has been updated to reflect the most recent known working versions for each image as they pertain to this particular repository. I do plan to update this at a future date, but wanted to leave things in a working order in the meantime, even if the image references are a bit out of date.

---

Docker Compose implementation of OHIF Viewer using Orthanc with DIMSE and Nginx reverse proxy

- OHIF Viewer: [ohif/viewer:v1.x](https://hub.docker.com/r/ohif/viewer)
- MongoDB: [mongo:4.0.14](https://hub.docker.com/_/mongo)
- Orthanc: [jodogne/orthanc-plugins:1.5.8](https://hub.docker.com/r/jodogne/orthanc-plugins)
- PostgreSQL 11: [postgres:12.1](https://hub.docker.com/_/postgres)
- Nginx: [nginx:1.7.7](https://hub.docker.com/_/nginx/)

This work is intended to be a complete working example of a docker based deployment demonstrating the OHIF Viewer using Orthanc as the image store served using Nginx and self signed SSL certificates. This work should not be considered production as presented, but rather a sane starting point for further implementation of security related features.

- Orthanc docker containers as described at [http://book.orthanc-server.com/users/docker.html](http://book.orthanc-server.com/users/docker.html)
- OHIF Viewer docker containers as described at [https://github.com/OHIF/Viewers](https://github.com/OHIF/Viewers)
- Sample DICOM images downloaded from [https://www.dicomlibrary.com](https://www.dicomlibrary.com)

## TL;DR

Run the services defined in docker-compose.yml and daemonize them.

```
docker-compose up -d
```

Once completed you should see five containers running

```console
$ docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------------------
mongo docker-entrypoint.sh mongod Up 27017/tcp
nginx nginx -g daemon off; Up 0.0.0.0:8443->443/tcp, 0.0.0.0:8080->80/tcp
orthanc Orthanc /etc/orthanc/ Up 4242/tcp, 8042/tcp
postgres docker-entrypoint.sh postgres Up 5432/tcp
viewer pm2-runtime app.json Up 3000/tcp
```
Wait a few moments for the setup scripts to run and go to [https://127.0.0.1:8443/](https://127.0.0.1:8443/) (You may be prompted to manually accept the SSL certificate because it is self signed)

We've not loaded any study images yet, so you should simply see the OHIF Viewer with **No matching results** being displayed.

OHIF Viewer - initial

Next, navigate to [https://127.0.0.1:8443/orthanc](https://127.0.0.1:8443/orthanc) and Sign in

- Username: **orthanc**
- Password: **orthanc**

Once signed in, load the sample data from the `dicom-samples` directory (Upload tab)

Orthanc - select files

Go to [https://127.0.0.1:8443/studylist](https://127.0.0.1:8443/studylist) and double click on the loaded study

OHIF Viewer - interact with study

Enjoy!

**DEPLOYMENT NOTE**

Presently the **orthanc** container does not have any graceful checks for when the **postgres** container is ready to accept connections, so it can potentially fail and restart (along with the nginx container) prior to gaining a successful connection. It would be preferable to start the **postgres** container first, and then start the **orthanc** container once PostgreSQL is ready.

Start the postgres and mongo containers, and wait for postgres to finish it's setup (Look for **_database system is ready to accept connections_** when looking at the output of `docker-compose logs postgres`)

```
docker-compose up -d postgres mongo
```

Once the **postgres** container has finished it's setup, then start **nginx**, **orthanc** and **viewer** containers

```
docker-compose up -d nginx orthanc viewer
```

## Configuration and Usage

### Update `.env` file

The `.env` file defines the Nginx, OHIF Viewer, MongoDB, Orthanc and PostgreSQL parameters that will be used by the Docker containers running your services. The default values are shown below.

```bash
# Nginx configuration
NGINX_DEFAULT_CONF=./nginx/default.conf
NGINX_SSL_CERT=./ssl/ssl_dev.crt
NGINX_SSL_KEY=./ssl/ssl_dev.key

# OHIF Viewer
VIEWER_CONFIG=./config/viewer.json

# MongoDB
MONGO_DATA_MNT=./mongo_data
MONGO_PORT=27017
MONGO_URL=mongodb://mongo:27017/ohif

# Orthanc core with plugins
ORTHANC_CONFIG=./config/orthanc.json
ORTHANC_DB_MNT=./orthanc_db
ORTHANC_DICOM_PORT=4242
ORTHANC_HTTP_PORT=8042

# PostgreSQL database - default values should not be used in production
PGDATA=/var/lib/postgresql/data
POSTGRES_DB=orthanc
POSTGRES_DATA_MNT=./pg_data/data
POSTGRES_PASSWORD=pgpassword
POSTGRES_PORT=5432
POSTGRES_USER=postgres
```

**NOTE**: The default configuration files for Orthanc and OHIF Viewer are in the [config/](config) directory. It is left to the user to update these for their own use. Links to supporting documentation can be found in the References section.

### Run the compose services

Run the services defined in docker-compose.yml and daemonize them. You'll notice that only the `http` and `https` ports have been left exposed to the host. The values for other container ports have been left in the docker-compose.yml file for reference, but have been commented out.

Port defaults for provided example:

- HTTP: `8080` (Nginx config will redirect to the HTTPS port)
- HTTPS: `8443`

The **postgres** and **mongo** containers should be started first

```
docker-compose up -d postgres mongo
```

You should notice two containers running on the host.

```console
$ docker-compose ps
Name Command State Ports
------------------------------------------------------------
mongo docker-entrypoint.sh mongod Up 27017/tcp
postgres docker-entrypoint.sh postgres Up 5432/tcp
```

It will take a few moments for the **postgres** container to complete it's start up scripts, but when completed the container logs should look similar to this:

```console
$ docker-compose logs postgres
...
postgres |
postgres | PostgreSQL init process complete; ready for start up.
postgres |
postgres | 2019-05-21 16:26:58.469 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
postgres | 2019-05-21 16:26:58.470 UTC [1] LOG: listening on IPv6 address "::", port 5432
postgres | 2019-05-21 16:26:58.473 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres | 2019-05-21 16:26:58.561 UTC [62] LOG: database system was shut down at 2019-05-21 16:26:58 UTC
postgres | 2019-05-21 16:26:58.594 UTC [1] LOG: database system is ready to accept connections
```

Next start the **nginx**, **orthanc** and **viewer** containers

```
docker-compose up -d nginx orthanc viewer
```

Once completed you should see five containers running

```console
$ docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------------------
mongo docker-entrypoint.sh mongod Up 27017/tcp
nginx nginx -g daemon off; Up 0.0.0.0:8443->443/tcp, 0.0.0.0:8080->80/tcp
orthanc Orthanc /etc/orthanc/ Up 4242/tcp, 8042/tcp
postgres docker-entrypoint.sh postgres Up 5432/tcp
viewer pm2-runtime app.json Up 3000/tcp
```

### Validate OHIF Viewer in browser

If using the default configuration as defined above, the Studylist will be available at: [https://127.0.0.1:8443/studylist](https://127.0.0.1:8443/studylist) (You may be prompted to manually accept the SSL certificate because it is self signed)

OHIF Viewer - initial

We've not loaded any study images yet, so you should simply see the OHIF Viewer with **No matching results** being displayed.

### Validate Orthanc in browser

Next, navigate to [https://127.0.0.1:8443/orthanc](https://127.0.0.1:8443/orthanc) and Sign in

- Username: **orthanc**
- Password: **orthanc**

Orthanc - login

Once signed in the explorer page should be presented

Orthanc - initial

### Load DICOM study images in Orthanc

A small set of DICOM sample images have been included in the repository for testing purposes.

Click the Upload link in the upper right corner and select files to upload from the [dicom-samples/](dicom-samples) directory.

Orthanc - select files

Start the upload

Orthanc - upload files

From the Orthanc home page, select "All studies", and the uploaded files should be available as **Anonymized - CT1 abdomen**

Orthanc - all studies

Click the study and use the tools to interact with the loaded files

Orthanc - select study

### Work with loaded images in OHIF Viewer

Going back to the OHIF Viewer you should observe the Anonymized study we loaded from Orthanc as an option to interact with: [https://127.0.0.1:8443/studylist](https://127.0.0.1:8443/studylist)

OHIF Viewer - anon study

Double click on the Anonymized study to load and interact with it

OHIF Viewer - interact with study

## Clean up

```
docker-compose stop && docker-compose rm -f
docker volume prune -f
docker network prune -f
rm -rf mongo_data orthanc_db pg_data
```

**NOTE**: The `rm` call from above may likely require sudo level privilege since the directories will be owned by root (or another user that is not your user ID)

## References

- Othanc: [http://book.orthanc-server.com/index.html](http://book.orthanc-server.com/index.html)
- OHIF Viewer: [https://docs.ohif.org](https://docs.ohif.org)
- DICOM Library: [https://www.dicomlibrary.com](https://www.dicomlibrary.com)
- Nginx reverse proxy: [https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/](https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/)