$ sudo -i
# sysctl -w vm.swappiness=1
# echo 'vm.swappiness=1' >> /etc/sysctl.conf (чтобы сохранить после перезагрузки)
# exit
$ sudo -i
# sysctl -w vm.max_map_count=262144
# echo 'vm.max_map_count=262144' >> /etc/sysctl.conf (чтобы сохранить после перезагрузки)
# exit
Если вы монтируете локальный каталог или файл, они должны быть доступны для чтения пользователем elasticsearch. Кроме того, этот пользователь должен иметь право на запись в каталоги config, data и log (Elasticsearch требует доступ на запись в каталог config, чтобы иметь возможность сгенерировать keystore). Хорошая стратегия — предоставить групповой доступ с gid 0 для локального каталога.
Например, чтобы подготовить локальный каталог для хранения данных через bind-mount:
$ sudo mkdir -p /var/local/dcm4chee-arc/esdatadir
$ sudo chmod g+rwx /var/local/dcm4chee-arc/esdatadir
$ sudo chgrp 0 /var/local/dcm4chee-arc/esdatadir
Вам необходимо примонтировать файл или родительский каталог, заданный переменной окружения HASH_FILE, к тому или иному тому или каталогу хоста, чтобы избежать создания нового дерева хэшей при каждом пересоздании контейнера. Файл (или родительский каталог) должен быть доступен для записи пользователем logstash контейнера (uid=1000). Напр., для монтирования файла:
$ sudo mkdir -p /var/local/dcm4chee-arc/logstash
$ sudo touch /var/local/dcm4chee-arc/logstash/filter-hashtree
$ sudo chown 1000:1000 /var/local/dcm4chee-arc/logstash/filter-hashtree
или для монтирования родительского каталога
$ sudo mkdir -p /var/local/dcm4chee-arc/logstash
$ sudo chown 1000:1000 /var/local/dcm4chee-arc/logstash
Продолжите, используя Docker Command Line или Docker Compose:
$ docker network create dcm4chee_default
Запустите контейнер с Elasticsearch в созданной сети, напр.:
$ docker run --network=dcm4chee_default --name elasticsearch \
-e ES_JAVA_OPTS="-Xms1024m -Xmx1024m" \
-e discovery.type=single-node \
-e xpack.security.enabled=false \
-p 9200:9200 \
-p 9300:9300 \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v /var/local/dcm4chee-arc/esdatadir:/usr/share/elasticsearch/data \
-d docker.elastic.co/elasticsearch/elasticsearch:8.15.1
-e ES_JAVA_OPTS="-Xms1024m -Xmx1024m" — задаёт размер heap JVM, используемый Elasticsearch.
-e discovery.type=single-node — устанавливает тип discovery в single-node; иначе Elasticsearch не запустится
из-за непройденных Bootstrap Checks
при старте.
-e xpack.security.enabled=false — отключает функции безопасности, иначе Logstash не сможет подключиться
к Elasticsearch по обычному http.
-p 9200:9200 \
-p 9300:9300 \
публикует REST-порт (9200) и порт межузлового взаимодействия (9300) Elasticsearch с контейнера на хост,
чтобы позволить внешним приложениям получать доступ к Elasticsearch. Это не требуется для работы Архива, поскольку
контейнеры Logstash и Kibana подключаются к Elasticsearch через созданную bridge-сеть.
Bind-mount -v /etc/localtime:/etc/localtime:ro и -v /etc/timezone:/etc/timezone:ro дублирует
ваш часовой пояс хоста внутри контейнера. Иначе часовой пояс контейнера — UTC. Внимание: если на
вашем хосте нет /etc/timezone, необходимо создать его (напр.: $ echo "Europe/Vienna" > /etc/timezone) перед
запуском контейнера, иначе контейнер не запустится.
Bind-mount -v /var/local/dcm4chee-arc/esdatadir:/usr/share/elasticsearch/data обеспечивает хранение
данных в указанном каталоге хоста. Каталог инициализируется при первом запуске контейнера, если он ещё не
присутствует в указанном каталоге хоста. Это гарантирует, что данные не теряются при удалении и повторном создании
контейнера Elasticsearch.
Дополнительно см. переменные окружения Elasticsearch
Запустите контейнер с Kibana в созданной сети, напр.:
$ docker run --network=dcm4chee_default --name kibana \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-d docker.elastic.co/kibana/kibana:8.15.1
Вы можете разрешить доступ к Kibana из любого веб-браузера без аутентификации пользователя, опубликовав http-порт Kibana
с контейнера на хост через -p 5601:5601.
Иначе веб-браузеры должны получать доступ к Kibana через Keycloak Proxy, который обеспечивает аутентификацию пользователя в Keycloak и перенаправляет HTTP-запросы от авторизованных пользователей к Kibana через созданную bridge-сеть.
Bind-mount -v /etc/localtime:/etc/localtime:ro и -v /etc/timezone:/etc/timezone:ro дублирует
ваш часовой пояс хоста внутри контейнера. Иначе часовой пояс контейнера — UTC. Внимание: если на
вашем хосте нет /etc/timezone, необходимо создать его (напр.: $ echo "Europe/Vienna" > /etc/timezone) перед
запуском контейнера, иначе контейнер не запустится.
Дополнительно см. переменные окружения Kibana
Запустите контейнер с Logstash в созданной сети, напр.:
$ docker run --network=dcm4chee_default --name logstash \
-p 12201:12201/udp \
-p 8514:8514/udp \
-p 8514:8514 \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v /var/local/dcm4chee-arc/logstash/filter-hashtree:/usr/share/logstash/data/filter-hashtree \
-d dcm4che/logstash-dcm4chee:8.15.1-18
-p 12201:12201/udp \
-p 8514:8514/udp \
-p 8514:8514 \
публикует настроенный порт GELF Logger (12201) и Syslog (8514) Logstash с контейнера на хост,
чтобы позволить внешним приложениям также подключаться к этим портам. Публикация порта GELF Logger также требуется,
если другие контейнеры настроили GELF Logging Driver
для отправки логов в Logstash. Keycloak и приложение Архива подключаются к Logstash через созданную bridge-сеть,
поэтому они не зависят от того, опубликованы ли эти порты на docker-хост.
Bind-mount -v /etc/localtime:/etc/localtime:ro и -v /etc/timezone:/etc/timezone:ro дублирует
ваш часовой пояс хоста внутри контейнера. Иначе часовой пояс контейнера — UTC. Внимание: если на
вашем хосте нет /etc/timezone, необходимо создать его (напр.: $ echo "Europe/Vienna" > /etc/timezone) перед
запуском контейнера, иначе контейнер не запустится.
Bind-mount /var/local/dcm4chee-arc/logstash/filter-hashtree:/usr/share/logstash/data/filter-hashtree обеспечивает
хранение файла с отпечатком последнего сообщения аудита — настраивается переменной окружения HASH_FILE
со значением по умолчанию /usr/share/logstash/data/filter-hashtree — вне контейнера, чтобы избежать создания нового дерева хэшей
при каждом пересоздании контейнера. Внимание: файл уже должен существовать и должен быть доступен для записи
пользователем logstash контейнера (uid=1000).
Дополнительно см. переменные окружения Logstash
Запустите контейнер с LDAP-сервером в созданной сети, напр.:
$ docker run --network=dcm4chee_default --name ldap \
--log-driver gelf \
--log-opt gelf-address=udp://<docker-host>:12201 \
--log-opt tag=slapd \
-p 389:389 \
-e SYSLOG_HOST=logstash \
-e SYSLOG_PORT=8514 \
-e SYSLOG_PROTOCOL=TLS \
-v /var/local/dcm4chee-arc/ldap:/var/lib/openldap/openldap-data \
-v /var/local/dcm4chee-arc/slapd.d:/etc/openldap/slapd.d \
-d dcm4che/slapd-dcm4chee:2.6.10-34.3
который отличается от Run minimum set of archive services on a single host
следующим:
- --log-driver gelf, --log-opt gelf-address=udp://<docker-host>:12201, --log-opt tag=slapd —
настраивает GELF Logging Driver для контейнера.
- -e SYSLOG_HOST=logstash, -e SYSLOG_PORT=8514, -e SYSLOG_PROTOCOL=TLS — указывает направлять логи
контейнера LDAP-сервера и логи аудита из приложений Keycloak и Архива в контейнер Logstash,
используя TLS (по умолчанию: UDP).
Дополнительно см. переменные окружения Slapd
Запустите контейнер с MariaDB Server в созданной сети, напр.:
$ docker run --network=dcm4chee_network --name mariadb \
--log-driver gelf \
--log-opt gelf-address=udp://<docker-host>:12201 \
--log-opt tag=mariadb \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=secret \
-e MYSQL_DATABASE=keycloak \
-e MYSQL_USER=keycloak \
-e MYSQL_PASSWORD=keycloak \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v /var/local/dcm4chee-arc/mysql:/var/lib/mysql \
-d mariadb:10.11.4
который отличается от Run secured archive services on a single host
следующим:
- --log-driver gelf, --log-opt gelf-address=udp://<docker-host>:12201, --log-opt tag=mariadb —
настраивает GELF Logging Driver для контейнера.
Запустите контейнер с предварительно настроенным сервером аутентификации Keycloak в созданной сети, напр.:
$ docker run --network=dcm4chee_default --name keycloak \
--log-driver gelf \
--log-opt gelf-address=udp://<docker-host>:12201 \
--log-opt tag=keycloak \
-p 8843:8843 \
-e KC_HTTPS_PORT=8843 \
-e KC_HOSTNAME=https://<docker-host>:8843 \
-e KC_HOSTNAME_BACKCHANNEL_DYNAMIC=true \
-e KC_BOOTSTRAP_ADMIN_USERNAME=admin \
-e KC_BOOTSTRAP_ADMIN_PASSWORD=changeit \
-e KC_DB=mariadb \
-e KC_DB_URL_DATABASE=keycloak \
-e KC_DB_URL_HOST=mariadb \
-e KC_DB_USERNAME=keycloak \
-e KC_DB_PASSWORD=keycloak \
-e KC_LOG=file,gelf \
-e KC_LOG_GELF_HOST=logstash \
-e ARCHIVE_HOST=<docker-host> \
-e KIBANA_CLIENT_ID=kibana \
-e KIBANA_CLIENT_SECRET=<kibana-client-secret> \
-e KIBANA_REDIRECT_URL=https://<docker-host>:8643/oauth2/callback/* \
-e KEYCLOAK_WAIT_FOR=ldap:389 mariadb:3306 logstash:8514 \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v /var/local/dcm4chee-arc/keycloak:/opt/keycloak/data \
-d dcm4che/keycloak:26.0.6
который отличается от Run secured archive services on a single host
следующим:
- --log-driver gelf, --log-opt gelf-address=udp://<docker-host>:12201 , --log-opt tag=keycloak —
настраивает GELF Logging Driver для контейнера.
- -e KC_LOG=file,gelf и -e KC_LOG_GELF_HOST=logstash — включает Quarkus GELF Logger
для отправки системных логов в Logstash.
- -e KIBANA_CLIENT_ID=kibana — задаёт ID клиента Keycloak для защиты UI Kibana.
- -e KIBANA_CLIENT_SECRET=<kibana-client-secret> — задаёт client secret для клиента kibana типа Confidential.
То же значение должно использоваться при запуске контейнера oauth2-proxy, описанном ниже.
- -e KIBANA_REDIRECT_URL=https://<docker-host>:8643/oauth2/callback/* — задаёт Redirect URL клиента Keycloak для защиты UI Kibana.
- -e KEYCLOAK_WAIT_FOR="ldap:389 mariadb:3306 logstash:8514" — задерживает запуск Keycloak до тех пор, пока OpenLDAP, MariaDB
и Logstash не начнут прослушивать указанные порты.
Дополнительно см. переменные окружения Keycloak
Запустите контейнер с сервером базы данных в созданной сети, напр.:
$ docker run --network=dcm4chee_default --name db \
--log-driver gelf \
--log-opt gelf-address=udp://<docker-host>:12201 \
--log-opt tag=postgres \
-p 5432:5432 \
-e POSTGRES_DB=pacsdb \
-e POSTGRES_USER=pacs \
-e POSTGRES_PASSWORD=pacs \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v /var/local/dcm4chee-arc/db:/var/lib/postgresql/data \
-d dcm4che/postgres-dcm4chee:17.4-34
который отличается от Run secured archive services on a single host
следующим:
- --log-driver gelf, --log-opt gelf-address=udp://<docker-host>:12201, --log-opt tag=postgres —
настраивает GELF Logging Driver для контейнера.
Дополнительно см. переменные окружения PostgreSQL
Запустите контейнер с Wildfly и развёрнутым приложением dcm4che Archive 5 в созданной сети, напр.:
$ docker run --network=dcm4chee_default --name arc \
--log-driver gelf \
--log-opt gelf-address=udp://<docker-host>:12201 \
--log-opt tag=dcm4chee-arc \
-p 8080:8080 \
-p 8443:8443 \
-p 9990:9990 \
-p 9993:9993 \
-p 2762:2762 \
-p 2575:2575 \
-p 12575:12575 \
-p 11112:11112 \
-e LOGSTASH_HOST=logstash \
-e POSTGRES_DB=pacsdb \
-e POSTGRES_USER=pacs \
-e POSTGRES_PASSWORD=pacs \
-e AUTH_SERVER_URL=https://keycloak:8843 \
-e UI_AUTH_SERVER_URL=https://<docker-host>:8843 \
-e WILDFLY_WAIT_FOR="ldap:389 db:5432 keycloak:8843 logstash:8514" \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v /var/local/dcm4chee-arc/wildfly:/opt/wildfly/standalone \
-d dcm4che/dcm4chee-arc-psql:5.34.3-secure
который отличается от Run secured archive services on a single host
следующим:
- --log-driver gelf, --log-opt gelf-address=udp://<docker-host>:12201, --log-opt tag=dcm4chee-arc —
настраивает GELF Logging Driver для контейнера.
- -e LOGSTASH_HOST=logstash — настраивает GELF Logger на
отправку системных логов в Logstash.
- -e WILDFLY_WAIT_FOR="ldap:389 db:5432 keycloak:8843 logstash:8514" — задерживает запуск Wildfly до тех пор, пока OpenLDAP slapd,
PostgreSQL, Keycloak и Logstash не начнут прослушивать указанные порты.
Дополнительно см. переменные окружения Архива
Войдите с пользователем/паролем root/changeit в Realm Admin Console Keycloak по адресу
https://<docker-host>:8843/admin/dcm4che/console — необходимо заменить \dcm4che через переменную окружения REALM_NAME для
контейнеров Keycloak, Keycloak Proxy и Архива, вам также необходимо заменить dcm4che на это значение в
URL.
Docker-образ Keycloak dcm4che/keycloak:26.0.6 и новее создаёт OIDC-клиент для OAuth2-Proxy для
защиты Kibana при первом запуске, настраиваемый через переменные окружения
KIBANA_CLIENT_ID,
KIBANA_CLIENT_SECRET и
KIBANA_REDIRECT_URL:

с Audience Token Mapper audience:

и Client Credential changeit:

который вы можете/должны Regenerate Secret и скопировать новое значение, чтобы передать его как переменную окружения
OAUTH2_PROXY_CLIENT_SECRET контейнеру OAuth2 Proxy на следующем шаге.
Запустите контейнер с OAuth2 Proxy для защиты Kibana в созданной сети, напр.:
$ docker run --network=dcm4chee_default --name oauth2-proxy \
-p 8643:8643 \
-e OAUTH2_PROXY_HTTPS_ADDRESS=0.0.0.0:8643 \
-e OAUTH2_PROXY_PROVIDER=keycloak-oidc \
-e OAUTH2_PROXY_SKIP_PROVIDER_BUTTON="true" \
-e OAUTH2_PROXY_UPSTREAMS=http://kibana:5601 \
-e OAUTH2_PROXY_OIDC_ISSUER_URL=https://<docker-host>:8843/realms/dcm4che \
-e OAUTH2_PROXY_REDIRECT_URL=https://<docker-host>:8643/oauth2/callback \
-e OAUTH2_PROXY_ALLOWED_ROLES=auditlog \
-e OAUTH2_PROXY_CLIENT_ID=kibana \
-e OAUTH2_PROXY_CLIENT_SECRET=<kibana-client-secret> \
-e OAUTH2_PROXY_EMAIL_DOMAINS="*" \
-e OAUTH2_PROXY_OIDC_EMAIL_CLAIM="preferred_username" \
-e OAUTH2_PROXY_INSECURE_OIDC_ALLOW_UNVERIFIED_EMAIL="true" \
-e OAUTH2_PROXY_COOKIE_SECRET=T0F1dGhLaWJhbmFUZXN0cw== \
-e OAUTH2_PROXY_SSL_INSECURE_SKIP_VERIFY="true" \
-e OAUTH2_PROXY_TLS_CERT_FILE=/etc/certs/cert.pem \
-e OAUTH2_PROXY_TLS_KEY_FILE=/etc/certs/key.pem \
-e OAUTH2_PROXY_CUSTOM_TEMPLATES_DIR=/templates \
-d dcm4che/oauth2-proxy:7.7.1 \
Примечание:
- OAUTH2_PROXY_OIDC_ISSUER_URL: "https://<docker-host>:8843/realms/dcm4che" применяется только для Keycloak v18.0+
и если используется значение по умолчанию KC_HTTP_RELATIVE_PATH.
- Если используются более старые версии Keycloak или если KC_HTTP_RELATIVE_PATH
установлен в /auth для Keycloak v18.0+, то OAUTH2_PROXY_OIDC_ISSUER_URL: "https://<docker-host>:8843/auth/realms/dcm4che"
- `-p 8643:8643` — публикует https-порт (`8643`) OAuth2-Proxy с контейнера на хост, чтобы
разрешить подключения от внешних https-клиентов к OAuth2-Proxy, который должен совпадать с
- `-e OAUTH2_PROXY_HTTPS_ADDRESS=0.0.0.0:8643` — портом, который должен прослушиваться, и с портом
- `-e OAUTH2_PROXY_PROVIDER=kibana-oidc` — задаёт OAuth-провайдера.
- `-e OAUTH2_PROXY_SKIP_PROVIDER_BUTTON` опционален. Если установлен в `true`, пропускает страницу входа с указанием
`Sign-on with Keycloak` и напрямую отображает страницу входа Keycloak.
- `-e OAUTH2_PROXY_UPSTREAMS=http://kibana:5601` — задаёт https URL Kibana как upstream-эндпоинт
- `-e OAUTH2_PROXY_OIDC_ISSUER_URL=https://<docker-host>:8843/realms/dcm4che` — задаёт URL издателя OpenID Connect,
в котором порт (`8843`) ссылается на `KC_HTTPS_PORT`, использованный при запуске контейнера keycloak
- `-e OAUTH2_PROXY_REDIRECT_URL=https://<docker-host>:8643/oauth2/callback` — URL перенаправления для
callback URL сервера аутентификации Keycloak — необходимо заменить _\<docker-host>_ на имя хоста docker-хоста, которое должно
разрешаться вашим DNS-сервером.
- `-e OAUTH2_PROXY_ALLOWED_ROLES=auditlog` — (keycloak-oidc) ограничивает вход членами этих ролей (можно указывать несколько раз)
- `-e OAUTH2_PROXY_CLIENT_ID=kibana` — задаёт Client ID, используемый для аутентификации на сервере Keycloak,
- `-e OAUTH2_PROXY_CLIENT_SECRET=<kibana-client-secret>` — задаёт Client Secret, используемый для аутентификации
на сервере аутентификации Keycloak для клиента _kibana_ типа _Confidential_. Значение должно совпадать с тем, что использовалось
при запуске контейнера _keycloak_.
- `-e OAUTH2_PROXY_EMAIL_DOMAINS="*"` как `*` — аутентифицировать любой email.
- `-e OAUTH2_PROXY_OIDC_EMAIL_CLAIM="preferred_username"` — какой claim OIDC содержит email пользователя (по умолчанию "email")
- `-e OAUTH2_PROXY_INSECURE_OIDC_ALLOW_UNVERIFIED_EMAIL="true"` — не завершать работу ошибкой, если адрес email в id_token не проверен
- `-e OAUTH2_PROXY_COOKIE_SECRET=T0F1dGhLaWJhbmFUZXN0cw==` — задаёт seed-строку для защищённых cookies (опционально в base64)
- `-e OAUTH2_PROXY_SSL_INSECURE_SKIP_VERIFY=true` как `true` — пропускает проверку сертификатов, предоставляемых при использовании HTTPS
- `-e OAUTH2_PROXY_CUSTOM_TEMPLATES_DIR` задаёт расположение каталога пользовательских шаблонов, содержащего настроенную
страницу ошибки запрета доступа, отображаемую неавторизованным пользователям при аутентификации. Примечание: в OAuth2 proxy пока нет механизма
для настройки только одного из шаблонов (т.е. sign_in или error). Поэтому, если требуется настроить только один, оба шаблона
всё равно необходимо предоставить.
- `-e OAUTH2_PROXY_TLS_CERT_FILE` и `OAUTH2_PROXY_TLS_KEY_FILE` задают пути к TLS-сертификату и приватному ключу в
формате [Privacy-Enhanced Mail (PEM)](https://en.wikipedia.org/wiki/Privacy-Enhanced_Mail) для использования поддержки TLS.
Чтобы избежать предупреждений безопасности веб-браузеров при подключении к Kibana через OAuth2 Proxy, замените сертификат, предоставленный в
`/etc/certs/cert.pem` docker-образа:

сертификатом, чьи _Common Name_ и/или _Subject Alt Name_ совпадают с именем хоста и который подписан
доверенным издателем; примонтируйте PEM-файлы с сертификатом и соответствующим приватным ключом и скорректируйте
`OAUTH2_PROXY_TLS_CERT_FILE` и `OAUTH2_PROXY_TLS_KEY_FILE`, чтобы они ссылались на их пути внутри контейнера.
```
$ docker run --rm dcm4che/oauth2-proxy:7.7.1 help
```
покажет все доступные переменные окружения и опции команд. См. также [OAuth2 Proxy](https://oauth2-proxy.github.io/oauth2-proxy/docs/configuration/overview/)
а также [Keycloak OIDC Auth Provider](https://oauth2-proxy.github.io/oauth2-proxy/docs/configuration/oauth_provider#keycloak-oidc-auth-provider)
[Keycloak](https://www.keycloak.org) для дополнительной информации о параметрах конфигурации OAuth2 Proxy.
Дополнительно см. [переменные окружения OAuth2-Proxy](https://github.com/dcm4che-dockerfiles/oauth2-proxy#readme)
$ docker stop elasticsearch kibana logstash ldap mariadb keycloak oauth2-proxy db arc
и запустить все 9 контейнеров снова командой:
$ docker start elasticsearch kibana logstash ldap mariadb keycloak oauth2-proxy db arc
```
$ docker rm -v elasticsearch kibana logstash ldap mariadb keycloak oauth2-proxy db arc
```
Вы можете удалить созданную bridge-сеть командой
$ docker network rm dcm4chee_default
В качестве альтернативы Docker Command Line можно использовать Docker Compose для запуска всех 8 контейнеров:
docker-compose.yml (напр.):yaml
version: "3"
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.15.1
environment:
ES_JAVA_OPTS: -Xms1024m -Xmx1024m
discovery.type: single-node
xpack.security.enabled: "false"
logging:
driver: json-file
options:
max-size: "10m"
ports:
- "9200:9200"
- "9300:9300"
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /var/local/dcm4chee-arc/esdatadir:/usr/share/elasticsearch/data
kibana:
image: docker.elastic.co/kibana/kibana:8.15.1
logging:
driver: json-file
options:
max-size: "10m"
depends_on:
- elasticsearch
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
logstash:
image: dcm4che/logstash-dcm4chee:8.15.1-18
logging:
driver: json-file
options:
max-size: "10m"
ports:
- "12201:12201/udp"
- "8514:8514/udp"
- "8514:8514"
depends_on:
- elasticsearch
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /var/local/dcm4chee-arc/logstash/filter-hashtree:/usr/share/logstash/data/filter-hashtree
ldap:
image: dcm4che/slapd-dcm4chee:2.6.10-34.3
logging:
driver: gelf
options:
gelf-address: "udp://<docker-host>:12201"
tag: slapd
ports:
- "389:389"
- "636:636"
environment:
SYSLOG_HOST: logstash
SYSLOG_PORT: 8514
SYSLOG_PROTOCOL: TLS
STORAGE_DIR: /storage/fs1
volumes:
- /var/local/dcm4chee-arc/ldap:/var/lib/openldap/openldap-data
- /var/local/dcm4chee-arc/slapd.d:/etc/openldap/slapd.d
mariadb:
image: mariadb:10.11.4
logging:
driver: gelf
options:
gelf-address: "udp://<docker-host>:12201"
tag: mariadb
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: keycloak
MYSQL_USER: keycloak
MYSQL_PASSWORD: keycloak
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /var/local/dcm4chee-arc/mysql:/var/lib/mysql
keycloak:
image: dcm4che/keycloak:26.0.6
logging:
driver: gelf
options:
gelf-address: "udp://<docker-host>:12201"
tag: keycloak
ports:
- "8843:8843"
environment:
KC_HTTPS_PORT: 8843
KC_HOSTNAME: https://<docker-host>:8843
KC_HOSTNAME_BACKCHANNEL_DYNAMIC: 'true'
KC_BOOTSTRAP_ADMIN_USERNAME: admin
KC_BOOTSTRAP_ADMIN_PASSWORD: changeit
KC_DB: mariadb
KC_DB_URL_DATABASE: keycloak
KC_DB_URL_HOST: mariadb
KC_DB_USERNAME: keycloak
KC_DB_PASSWORD: keycloak
KC_LOG: file,gelf
KC_LOG_GELF_HOST: logstash
ARCHIVE_HOST: <docker-host>
KIBANA_CLIENT_ID: kibana
KIBANA_CLIENT_SECRET: <kibana-client-secret>
KIBANA_REDIRECT_URL: https://<docker-host>:8643/oauth2/callback/*
KEYCLOAK_WAIT_FOR: ldap:389 mariadb:3306 logstash:8514
depends_on:
- ldap
- mariadb
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /var/local/dcm4chee-arc/keycloak:/opt/keycloak/data
oauth2-proxy:
image: dcm4che/oauth2-proxy:7.7.1
ports:
- "8643:8643"
restart: on-failure
environment:
OAUTH2_PROXY_HTTPS_ADDRESS: 0.0.0.0:8643
OAUTH2_PROXY_PROVIDER: keycloak-oidc
OAUTH2_PROXY_SKIP_PROVIDER_BUTTON: "true"
OAUTH2_PROXY_UPSTREAMS: "http://kibana:5601"
OAUTH2_PROXY_OIDC_ISSUER_URL: "https://<docker-host>:8843/realms/dcm4che"
OAUTH2_PROXY_REDIRECT_URL: "https://<docker-host>:8643/oauth2/callback"
OAUTH2_PROXY_ALLOWED_ROLES: auditlog
OAUTH2_PROXY_CLIENT_ID: kibana
OAUTH2_PROXY_CLIENT_SECRET: <kibana-client-secret>
OAUTH2_PROXY_EMAIL_DOMAINS: "*"
OAUTH2_PROXY_OIDC_EMAIL_CLAIM: "sub"
OAUTH2_PROXY_INSECURE_OIDC_ALLOW_UNVERIFIED_EMAIL: "true"
OAUTH2_PROXY_COOKIE_SECRET: T0F1dGhLaWJhbmFUZXN0cw==
OAUTH2_PROXY_SSL_INSECURE_SKIP_VERIFY: "true"
OAUTH2_PROXY_TLS_CERT_FILE: /etc/certs/cert.pem
OAUTH2_PROXY_TLS_KEY_FILE: /etc/certs/key.pem
OAUTH2_PROXY_CUSTOM_TEMPLATES_DIR: /templates
depends_on:
- keycloak
db:
image: dcm4che/postgres-dcm4chee:17.4-34
logging:
driver: gelf
options:
gelf-address: "udp://<docker-host>:12201"
tag: postgres
ports:
- "5432:5432"
environment:
POSTGRES_DB: pacsdb
POSTGRES_USER: pacs
POSTGRES_PASSWORD: pacs
depends_on:
- logstash
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /var/local/dcm4chee-arc/db:/var/lib/postgresql/data
arc:
image: dcm4che/dcm4chee-arc-psql:5.34.3-secure
logging:
driver: gelf
options:
gelf-address: "udp://<docker-host>:12201"
tag: dcm4chee-arc
ports:
- "8080:8080"
- "8443:8443"
- "9990:9990"
- "9993:9993"
- "11112:11112"
- "2762:2762"
- "2575:2575"
- "12575:12575"
environment:
LOGSTASH_HOST: logstash
POSTGRES_DB: pacsdb
POSTGRES_USER: pacs
POSTGRES_PASSWORD: pacs
AUTH_SERVER_URL: https://keycloak:8843
UI_AUTH_SERVER_URL: https://<docker-host>:8843
WILDFLY_CHOWN: /storage
WILDFLY_WAIT_FOR: ldap:389 db:5432 keycloak:8843 logstash:8514
depends_on:
- ldap
- keycloak
- db
- logstash
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /var/local/dcm4chee-arc/wildfly:/opt/wildfly/standalone
- /var/local/dcm4chee-arc/storage:/storage
вам необходимо заменить \
Доступные переменные окружения для контейнеров: - Slapd - PostgreSQL - Archive - Keycloak - MariaDB - Logstash - OAuth2-Proxy - Kibana - Elasticsearch
Примечание:
- OAUTH2_PROXY_OIDC_ISSUER_URL: "https://<docker-host>:8843/realms/dcm4che" применяется только для Keycloak v18.0+
и если используется значение по умолчанию KC_HTTP_RELATIVE_PATH.
- Если используются более старые версии Keycloak или если KC_HTTP_RELATIVE_PATH
установлен в /auth для Keycloak v18.0+, то OAUTH2_PROXY_OIDC_ISSUER_URL: "https://<docker-host>:8843/auth/realms/dcm4che"
- Если возникают сложности с запуском сервиса архива из-за
There is insufficient memory for the Java Runtime Environment to continue. Cannot create GC thread. Out of system resources.
добавьте следующую опцию к сервису arc
security_opt:
- seccomp:unconfined
console
$ docker-compose -p dcm4chee up -d
Creating network "dcm4chee_default" with the default driver
Creating dcm4chee_elasticsearch_1 ... done
Creating dcm4chee_logstash_1 ... done
Creating dcm4chee_ldap_1 ... done
Creating dcm4chee_mariadb_1 ... done
Creating dcm4chee_db_1 ... done
Creating dcm4chee_kibana_1 ... done
Creating dcm4chee_keycloak_1 ... done
Creating dcm4chee_arc_1 ... done
Creating dcm4chee_oauth2-proxy_1 ... done
в каталоге, содержащем docker-compose.yml.
Если вы настроили клиент для OAuth2 Proxy с `Access Type: confidential`, необходимо скорректировать значение
переменной окружения `OAUTH2_PROXY_CLIENT_SECRET` сервиса `oauth2-proxy` в `docker-compose.yml`, чтобы
оно совпадало с фактическим значением на вкладке `Credentials` для OIDC-клиента в Realm Admin Console Keycloak,
и пересоздать и перезапустить контейнер OAuth2 Proxy командой
```console
$ docker-compose -p dcm4chee up -d
dcm4chee_elasticsearch_1 is up-to-date
dcm4chee_kibana_1 is up-to-date
dcm4chee_logstash_1 is up-to-date
dcm4chee_ldap_1 is up-to-date
dcm4chee_mariadb_1 is up-to-date
dcm4chee_db_1 is up-to-date
dcm4chee_keycloak_1 is up-to-date
Recreating dcm4chee_oauth2-proxy_1 ...
Recreating dcm4chee_oauth2-proxy_1 ... done
```
в каталоге, содержащем `docker-compose.yml`.
```console
$ docker-compose -p dcm4chee stop
Stopping dcm4chee_arc_1 ... done
Stopping dcm4chee_oauth2-proxy_1 ... done
Stopping dcm4chee_keycloak_1 ... done
Stopping dcm4chee_kibana_1 ... done
Stopping dcm4chee_logstash_1 ... done
Stopping dcm4chee_elasticsearch_1 ... done
Stopping dcm4chee_mariadb_1 ... done
Stopping dcm4chee_db_1 ... done
Stopping dcm4chee_ldap_1 ... done
```
и запустить все 8 контейнеров снова командой:
console
$ docker-compose -p dcm4chee start
Starting db ... done
Starting elasticsearch ... done
Starting kibana ... done
Starting ldap ... done
Starting mariadb ... done
Starting logstash ... done
Starting keycloak ... done
Starting oauth2-proxy ... done
Starting arc ... done
```console
$ docker-compose -p dcm4chee down
Stopping dcm4chee_arc_1 ... done
Stopping dcm4chee_oauth2-proxy_1 ... done
Stopping dcm4chee_keycloak_1 ... done
Stopping dcm4chee_kibana_1 ... done
Stopping dcm4chee_logstash_1 ... done
Stopping dcm4chee_elasticsearch_1 ... done
Stopping dcm4chee_mariadb_1 ... done
Stopping dcm4chee_db_1 ... done
Stopping dcm4chee_ldap_1 ... done
Removing dcm4chee_arc_1 ... done
Removing dcm4chee_oauth2-proxy_1 ... done
Removing dcm4chee_keycloak_1 ... done
Removing dcm4chee_kibana_1 ... done
Removing dcm4chee_logstash_1 ... done
Removing dcm4chee_elasticsearch_1 ... done
Removing dcm4chee_mariadb_1 ... done
Removing dcm4chee_db_1 ... done
Removing dcm4chee_ldap_1 ... done
Removing network dcm4chee_default
```