version: '3' | |
services: | |
girder: | |
image: dsarchive/dsa_common | |
build: ../.. | |
# Instead of privileged mode, fuse can use: | |
# devices: | |
# - /dev/fuse:/dev/fuse | |
# security_opt: | |
# - apparmor:unconfined | |
# cap_add: | |
# - SYS_ADMIN | |
# but these may be somewhat host specific, so we default to privileged. If | |
# the docker daemon is being run with --no-new-privileges, fuse may not | |
# work. | |
# See also https://github.com/docker/for-linux/issues/321 for possible | |
# methods to avoid both privileged mode and cap_add SYS_ADMIN. | |
privileged: true | |
# Set DSA_USER to a user id that is part of the docker group (e.g., | |
# `DSA_USER=$(id -u):$(id -g)`). This makes files in assetstores and logs | |
# owned by that user and provides permissions to manage docker | |
environment: | |
DSA_USER: ${DSA_USER:-} | |
DSA_PROVISION_YAML: ${DSA_PROVISION_YAML:-/opt/digital_slide_archive/devops/dsa/provision.yaml} | |
restart: unless-stopped | |
# Set DSA_PORT to expose the interface on another port (default 8080). | |
ports: | |
- "${DSA_PORT:-8080}:8080" | |
volumes: | |
# Needed to use slicer_cli_web to run docker containers | |
- /var/run/docker.sock:/var/run/docker.sock | |
# Default assetstore | |
- ./assetstore:/assetstore | |
# Location of girder.cfg | |
- ./girder.cfg:/etc/girder.cfg | |
# Location of provision.py | |
- ./provision.py:/opt/digital_slide_archive/devops/dsa/provision.py | |
- ./provision.yaml:/opt/digital_slide_archive/devops/dsa/provision.yaml | |
- ./start_girder.sh:/opt/digital_slide_archive/devops/dsa/start_girder.sh | |
# Location to store logs | |
- ./logs:/logs | |
# For local development, uncomment the set of mounts associated with the | |
# local source files. Adding the editable egg directories first allows | |
# allow mounting source files from the host without breaking the internal | |
# data. | |
# - /opt/girder/girder.egg-info | |
# - /opt/girder/clients/python/girder_client.egg-info | |
# - ../../../girder:/opt/girder | |
# - /opt/girder_worker/girder_worker.egg-info | |
# - ../../../../girder_worker:/opt/girder_worker | |
# - /opt/girder_worker_utils/girder_worker_utils.egg-info | |
# - ../../../../girder_worker_utils:/opt/girder_worker_utils | |
# - /opt/HistomicsUI/histomicsui.egg-info | |
# - ../../../HistomicsUI:/opt/HistomicsUI | |
# - /opt/slicer_cli_web/girder_slicer_cli_web.egg-info | |
# - ../../../slicer_cli_web:/opt/slicer_cli_web | |
# - /opt/large_image/girder_annotation/girder_large_image_annotation.egg-info | |
# - /opt/large_image/girder/girder_large_image.egg-info | |
# - /opt/large_image/sources/bioformats/large_image_source_bioformats.egg-info | |
# - /opt/large_image/sources/openslide/large_image_source_openslide.egg-info | |
# - /opt/large_image/sources/ometiff/large_image_source_ometiff.egg-info | |
# - /opt/large_image/sources/pil/large_image_source_pil.egg-info | |
# - /opt/large_image/sources/test/large_image_source_test.egg-info | |
# - /opt/large_image/sources/dummy/large_image_source_dummy.egg-info | |
# - /opt/large_image/sources/tiff/large_image_source_tiff.egg-info | |
# - /opt/large_image/sources/mapnik/large_image_source_mapnik.egg-info | |
# - /opt/large_image/sources/openjpeg/large_image_source_openjpeg.egg-info | |
# - /opt/large_image/sources/gdal/large_image_source_gdal.egg-info | |
# - /opt/large_image/sources/nd2/large_image_source_nd2.egg-info | |
# - /opt/large_image/large_image.egg-info | |
# - /opt/large_image/utilities/converter/large_image_converter.egg-info | |
# - /opt/large_image/utilities/tasks/large_image_tasks.egg-info | |
# - ../../../large_image:/opt/large_image | |
# Add additional mounts here to get access to existing files on your | |
# system. Also add them to the worker container to reduce copying. | |
depends_on: | |
- mongodb | |
- memcached | |
- rabbitmq | |
command: /opt/digital_slide_archive/devops/dsa/start_girder.sh | |
mongodb: | |
image: "mongo:latest" | |
# Set DSA_USER to your user id (e.g., `DSA_USER=$(id -u):$(id -g)`) | |
# so that database files are owned by yourself. | |
user: ${DSA_USER:-PLEASE SET DSA_USER} | |
restart: unless-stopped | |
# Limiting maxConns reduces the amount of shared memory demanded by | |
# mongo. Remove this limit or increase the host vm.max_map_count value. | |
command: --maxConns 1000 | |
volumes: | |
# Location to store database files | |
- ./db:/data/db | |
# Uncomment to allow access to the database from outside of the docker | |
# network. | |
# ports: | |
# - "27017" | |
logging: | |
options: | |
max-size: "10M" | |
max-file: "5" | |
memcached: | |
image: memcached | |
command: -m 4096 --max-item-size 8M | |
restart: unless-stopped | |
# Uncomment to allow access to memcached from outside of the docker network | |
# ports: | |
# - "11211" | |
logging: | |
options: | |
max-size: "10M" | |
max-file: "5" | |
rabbitmq: | |
image: "rabbitmq:latest" | |
restart: unless-stopped | |
# Uncomment to allow access to rabbitmq from outside of the docker network | |
# ports: | |
# - "5672" | |
environment: | |
RABBITMQ_DEFAULT_USER: ${RABBITMQ_DEFAULT_USER:-} | |
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_DEFAULT_PASS:-} | |
volumes: | |
- ./rabbitmq.advanced.config:/etc/rabbitmq/advanced.config:ro | |
logging: | |
options: | |
max-size: "10M" | |
max-file: "5" | |
worker: | |
image: dsarchive/dsa_common | |
build: ../.. | |
# Set DSA_USER to a user id that is part of the docker group (e.g., | |
# `DSA_USER=$(id -u):$(id -g)`). This provides permissions to manage | |
# docker | |
environment: | |
DSA_USER: ${DSA_USER:-} | |
DSA_WORKER_CONCURRENCY: ${DSA_WORKER_CONCURRENCY:-2} | |
DSA_PROVISION_YAML: ${DSA_PROVISION_YAML:-/opt/digital_slide_archive/devops/dsa/provision.yaml} | |
TMPDIR: | |
restart: unless-stopped | |
volumes: | |
# Needed to use slicer_cli_web to run docker containers | |
- /var/run/docker.sock:/var/run/docker.sock | |
# Modify the worker.local.cfg to specify a different rabbitmq server and | |
# then enable this mount. On the rabbitmq server, make sure you add a | |
# non-guest default user and use that both in the worker and in the main | |
# girder settings. | |
# - ./worker.local.cfg:/opt/girder_worker/girder_worker/worker.local.cfg | |
# Allow overriding the start command | |
- ./start_worker.sh:/opt/digital_slide_archive/devops/dsa/start_worker.sh | |
# Needed to allow transferring data to slicer_cli_web docker containers | |
- ${TMPDIR:-/tmp}:${TMPDIR:-/tmp} | |
# Add additional mounts here to get access to existing files on your | |
# system if they have the same path as on the girder container. | |
depends_on: | |
- rabbitmq | |
command: /opt/digital_slide_archive/devops/dsa/start_worker.sh | |
logging: | |
options: | |
max-size: "10M" | |
max-file: "5" | |