← Навигация по документации

Защищённые службы архива с использованием Keycloak в качестве сервера аутентификации и сохранением системных журналов и журналов аудита в Elastic Stack, распределённые по 3 узлам

Убедитесь, что для всех 3 узлов в вашем DNS-сервере есть записи имён хостов.
(Необязательно) Создайте системные группы и пользователей с определёнными ID групп и пользователей, используемыми службами архива
На узле архива (Archive Node)
$ sudo -i
# groupadd -r dcm4chee-arc --gid=1023 && useradd -r -g dcm4chee-arc --uid=1023 dcm4chee-arc
# groupadd -r keycloak-dcm4chee --gid=1029 && useradd -r -g keycloak-dcm4chee --uid=1029 keycloak-dcm4chee
# exit
На узле базы данных (Database Node)
$ sudo -i
# groupadd -r slapd-dcm4chee --gid=1021 && useradd -r -g slapd-dcm4chee --uid=1021 slapd-dcm4chee
# groupadd -r postgres-dcm4chee --gid=999 && useradd -r -g postgres-dcm4chee --uid=999 postgres-dcm4chee
# exit
Системная конфигурация для Elasticsearch на узле Elastic Stack
$ 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, 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
Убедитесь, что у Logstash есть доступ на запись к файлу для сохранения отпечатка последнего аудиторского сообщения

Вам необходимо примонтировать файл или родительский каталог, указанный в переменной окружения 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 Command Line

На узле Elastic Stack

  1. Создайте определённую пользователем мостовую сеть (user-defined bridge network)

    $ docker network create dcm4chee_default

  2. Запустите Elasticsearch, как описано в Run secured archive services and Elastic Stack on a single host
  3. Запустите Kibana, как описано в Run secured archive services and Elastic Stack on a single host
  4. Запустите Logstash, как описано в Run secured archive services and Elastic Stack on a single host

На узле базы данных

  1. Создайте определённую пользователем мостовую сеть

    $ docker network create dcm4chee_default

  2. Запустите сервер OpenLDAP

    Запустите контейнер с LDAP-сервером в созданной сети, например: $ docker run --network=dcm4chee_default --name ldap \ --log-driver gelf \ --log-opt gelf-address=udp://<elk-node>:12201 \ --log-opt tag=slapd -p 389:389 \ -e ARCHIVE_HOST=<arc-host> \ -e SYSLOG_HOST=<elk-node> \ -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 secured archive services and Elastic Stack on a single host наличием --log-opt gelf-address=udp://<elk-node>:12201 и -e SYSLOG_HOST=<elk-node> — вам нужно заменить \ и \ на имена хостов узла архива и узла Elastic Stack.

  3. Запустите сервер PostgreSQL

    Запустите контейнер с сервером базы данных в созданной сети, например: $ docker run --network=dcm4chee_default --name db \ --log-driver gelf \ --log-opt gelf-address=udp://<elk-node>: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 and Elastic Stack on a single host наличием --log-opt gelf-address=udp://<elk-node>:12201 — вам нужно заменить \ на имя хоста узла Elastic Stack.

  4. Запустите сервер MariaDB, используемый сервером аутентификации Keycloak

    Запустите контейнер с сервером MariaDB в созданной сети, например: $ docker run --network=dcm4chee_network --name mariadb \ --log-driver gelf \ --log-opt gelf-address=udp://<elk-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 and Elastic Stack on a single host наличием --log-opt gelf-address=udp://<elk-node>:12201 — вам нужно заменить \ на имя хоста узла Elastic Stack.

На узле архива

  1. Создайте определённую пользователем мостовую сеть

    $ docker network create dcm4chee_default

  2. Запустите сервер аутентификации Keycloak на узле архива

    Запустите контейнер с предварительно настроенным сервером аутентификации Keycloak в созданной сети, например: $ docker run --network=dcm4chee_default --name keycloak \ --log-driver gelf \ --log-opt gelf-address=udp://<elk-node>:12201 \ --log-opt tag=keycloak \ -p 8843:8843 \ -e KC_HTTPS_PORT=8843 \ -e KC_HOSTNAME=https://<arc-node>: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=<db-node> \ -e KC_DB_USERNAME=keycloak \ -e KC_DB_PASSWORD=keycloak \ -e KC_LOG=file,gelf \ -e KC_LOG_GELF_HOST=<elk-node> \ -e ARCHIVE_HOST=<arc-node> \ -e KIBANA_CLIENT_ID=kibana \ -e KIBANA_CLIENT_SECRET=<kibana-client-secret> \ -e KIBANA_REDIRECT_URL=https://<arc-node>:8643/oauth2/callback/* \ -e KEYCLOAK_WAIT_FOR=<db-node>:389 <db-node>:3306 <elk-node>: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 and Elastic Stack on a single host наличием - --log-opt gelf-address=udp://<elk-node>:12201 - -e KC_HOSTNAME=https://<arc-node>:8843 - -e KC_HOSTNAME_BACKCHANNEL_DYNAMIC=true - -e KC_DB_URL_HOST=<db-node> - -e KC_LOG=file,gelf - -e KC_LOG_GELF_HOST=<elk-node> - -e ARCHIVE_HOST=<arc-node> - -e LOGSTASH_HOST=<elk-node> - -e KIBANA_REDIRECT_URL=https://<arc-node>:8643/oauth2/callback/* - -e KEYCLOAK_WAIT_FOR='<db-node>:389 <db-node>:3306 <elk-node>:8514' (вам нужно заменить \, \ и \ на имена хостов узла архива, базы данных и Elastic Stack).

  3. Запустите Wildfly с развёрнутым приложением dcm4che Archive 5

    Запустите контейнер с Wildfly и развёрнутым приложением dcm4che Archive 5 в созданной сети, например: $ docker run --network=dcm4chee_default --name arc \ --log-driver gelf \ --log-opt gelf-address=udp://<elk-node>: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=<elk-node> \ -e POSTGRES_DB=pacsdb \ -e POSTGRES_USER=pacs \ -e POSTGRES_PASSWORD=pacs \ -e AUTH_SERVER_URL=https://<arc-node>:8843 \ -e UI_AUTH_SERVER_URL=https://<arc-node>:8843 \ -e WILDFLY_WAIT_FOR="<db-node>:389 <db-node>:5432 <arc-node>:8843 <elk-node>: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 and Elastic Stack on a single host наличием - --log-opt gelf-address=udp://<elk-node>:12201 - -e LOGSTASH_HOST=<elk-node> - -e AUTH_SERVER_URL=https://<arc-node>:8843 - -e UI_AUTH_SERVER_URL=https://<arc-node>:8843 - -e WILDFLY_WAIT_FOR="<db-node>:389 <db-node>:5432 <arc-node>:8843 <elk-node>:8514" (вам нужно заменить \, \ и \ на имена хостов узла архива, базы данных и Elastic Stack).

  4. Проверьте OIDC-клиента для UI архива в Keycloak

    Войдите с учётными данными Пользователь/Пароль root/changeit в Realm Admin Console Keycloak по адресу https://<arc-node>:8843/admin/dcm4che/console — вам нужно заменить \ на имя хоста узла архива. Если вы изменили имя realm по умолчанию: dcm4che через переменную окружения REALM_NAME для контейнеров Keycloak и архива, вам также нужно заменить dcm4che на это значение в URL.

    Docker-образ Keycloak dcm4che/keycloak:19.0.1 и новее создаёт OIDC-клиента для UI архива при первом запуске, настраиваемого через переменные окружения UI_CLIENT_ID, ARCHIVE_HOST, ARCHIVE_HTTP_PORT и ARCHIVE_HTTPS_PORT:

  5. Проверьте OIDC-клиента для Wildfly Administration Console в Keycloak

    Доступ к Wildfly Administration Console также защищён Keycloak.

    Docker-образ Keycloak dcm4che/keycloak:19.0.1 и новее также создаёт ещё одного OIDC-клиента для Wildfly Administration Console при первом запуске, настраиваемого через переменные окружения WILDFLY_CONSOLE, ARCHIVE_HOST и ARCHIVE_MANAGEMENT_HTTPS_PORT:

    Только пользователи с ролью ADMINISTRATOR имеют право доступа к WildFly Administration Console.

    Выйдите из системы, прежде чем проверять, что обращение к WildFly Administration Console по адресу http://<arc-node>:9990 или https://<arc-node>:9993 перенаправит вас на страницу входа Keycloak. Вы можете войти с учётными данными Пользователь/Пароль root/changeit.

  6. Проверьте OIDC-клиента для OAuth2-Proxy, защищающего Kibana, в Keycloak

Войдите с учётными данными Пользователь/Пароль root/changeit в Realm Admin Console Keycloak по адресу https://<docker-host>:8843/admin/dcm4che/console — вам нужно заменить \ на имя хоста docker-хоста. Если вы изменили имя realm по умолчанию: dcm4che через переменную окружения REALM_NAME для контейнеров Keycloak, Keycloak Proxy и архива, вам также нужно заменить dcm4che на это значение в URL.

Docker-образ Keycloak dcm4che/keycloak:19.0.1 и новее создаёт 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 на следующем шаге.

  1. Запустите OAuth2 Proxy для защиты Kibana

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://<elk-node>:5601 \ -e OAUTH2_PROXY_OIDC_ISSUER_URL=https://<arc-node>:8843/realms/dcm4che \ -e OAUTH2_PROXY_REDIRECT_URL=https://<arc-node>: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 \ который отличается от Run secured archive services and Elastic Stack on a single host наличием - -e OAUTH2_PROXY_UPSTREAMS=http://<elk-node>:5601 - -e OAUTH2_PROXY_OIDC_ISSUER_URL=https://<arc-node>:8843/realms/dcm4che - -e OAUTH2_PROXY_REDIRECT_URL=https://<arc-node>:8643/oauth2/callback

Примечание: - OAUTH2_PROXY_OIDC_ISSUER_URL: "https://<docker-host>:8843/realms/dcm4che" применяется только для Keycloak v18.0+ и если используется значение по умолчанию KC_HTTP_RELATIVE_PATH. - Если используются более ранние версии Keycloak или если KC_HTTP_RELATIVE_PATH для Keycloak v18.0+ установлен в /auth, то 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://<elk-node>:5601` — задаёт https URL Kibana в качестве вышестоящей конечной точки (upstream)
- `-e OAUTH2_PROXY_OIDC_ISSUER_URL=https://<arc-node>:8843/realms/dcm4che` — задаёт URL издателя OpenID Connect,
  где порт (`8843`) соответствует `KC_HTTPS_PORT`, использованному при запуске контейнера Keycloak
- `-e OAUTH2_PROXY_REDIRECT_URL=https://<arc-node>:8643/oauth2/callback` — URL перенаправления для callback URL сервера аутентификации
  Keycloak — вам нужно заменить _\<arc-node>_ на имя хоста узла архива, которое должно
  разрешаться вашим 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 для клиента типа _Confidential_ — _kibana_. Значение должно совпадать с тем, что
  использовалось при запуске контейнера _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==` — задаёт начальную строку для защищённых файлов cookie (необязательно в кодировке 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-образа:
  ![](/wp-content/uploads/dcm4chee-ru/images/images/cert.png)

  сертификатом, у которого _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 а также Keycloak OIDC Auth Provider для Keycloak, где можно найти дополнительные сведения о параметрах конфигурации OAuth2 Proxy.

Использование Docker Compose

В качестве альтернативы Docker Command Line можно использовать Docker Compose, который позаботится о запуске всех 8 контейнеров:

На узле Elastic Stack

  1. Опишите службы в конфигурационном файле 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

  2. Создайте и запустите 3 контейнера, выполнив
     ```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_kibana_1 ... done
     ```
     в каталоге, содержащем `docker-compose.yml`.
    

На узле базы данных

  1. Опишите службы в конфигурационном файле docker-compose.yml:

    yaml version: "3" services: ldap: image: dcm4che/slapd-dcm4chee:2.6.10-34.3 logging: driver: gelf options: gelf-address: "udp://<elk-node>:12201" tag: slapd ports: - "389:389" environment: SYSLOG_HOST: <elk-node> 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 db: image: dcm4che/postgres-dcm4chee:17.4-34 logging: driver: gelf options: gelf-address: "udp://<elk-node>:12201" tag: postgres ports: - "5432:5432" environment: POSTGRES_DB: pacsdb POSTGRES_USER: pacs POSTGRES_PASSWORD: pacs volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - /var/local/dcm4chee-arc/db:/var/lib/postgresql/data mariadb: image: mariadb:10.11.4 logging: driver: gelf options: gelf-address: "udp://<elk-node>: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 Вам нужно заменить \ на имя хоста узла Elastic Stack.

  2. Создайте и запустите 3 контейнера, выполнив
     ```console
     $ docker-compose -p dcm4chee up -d
     Creating dcm4chee_ldap_1          ... done
     Creating dcm4chee_db_1            ... done
     Creating dcm4chee_mariadb_1       ... done
     ```
     в каталоге, содержащем `docker-compose.yml`.
    

На узле архива

  1. Опишите службы в конфигурационном файле docker-compose.yml (например):

    yaml version: "3" services: keycloak: image: dcm4che/keycloak:26.0.6 logging: driver: gelf options: gelf-address: "udp://<elk-node>:12201" tag: keycloak ports: - "8843:8843" environment: KC_HTTPS_PORT: 8843 KC_HOSTNAME: https://<arc-node>: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: <db-node> KC_DB_USERNAME: keycloak KC_DB_PASSWORD: keycloak KC_LOG: file,gelf KC_LOG_GELF_HOST: logstash ARCHIVE_HOST: <arc-node> KIBANA_CLIENT_ID: kibana KIBANA_CLIENT_SECRET: <kibana-client-secret> KIBANA_REDIRECT_URL: https://<arc-node>:8643/oauth2/callback/* KEYCLOAK_WAIT_FOR: <db-node>:389 <db-node>:3306 <elk-node>:8514 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" 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://<elk-node>:5601" OAUTH2_PROXY_OIDC_ISSUER_URL: "https://<arc-node>:8843/realms/dcm4che" OAUTH2_PROXY_REDIRECT_URL: "https://<arc-node>:8643/oauth2/callback" OAUTH2_PROXY_ALLOWED_ROLES: auditlog OAUTH2_PROXY_CLIENT_ID: kibana OAUTH2_PROXY_CLIENT_SECRET: changeit 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 arc: image: dcm4che/dcm4chee-arc-psql:5.34.3-secure logging: driver: gelf options: gelf-address: "udp://<elk-node>: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://<arc-host>:8843 WILDFLY_CHOWN: /storage WILDFLY_WAIT_FOR: <db-node>:389 <db-node>:5432 <elk-node>:8514 depends_on: - keycloak 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 Вам нужно заменить \, \ и \ на имена хостов узла архива, базы данных и Elastic Stack.

Примечание: - OAUTH2_PROXY_OIDC_ISSUER_URL: "https://<docker-host>:8843/realms/dcm4che" применяется только для Keycloak v18.0+ и если используется значение по умолчанию KC_HTTP_RELATIVE_PATH. - Если используются более ранние версии Keycloak или если KC_HTTP_RELATIVE_PATH для Keycloak v18.0+ установлен в /auth, то OAUTH2_PROXY_OIDC_ISSUER_URL: "https://<docker-host>:8843/auth/realms/dcm4che"

  1. Создайте и запустите 2 контейнера, выполнив

    console $ docker-compose -p dcm4chee up -d Creating network "dcm4chee_default" with the default driver Creating dcm4chee_keycloak_1 ... done Creating dcm4chee_arc_1 ... done Creating dcm4chee_oauth2-proxy_1 ... done в каталоге, содержащем docker-compose.yml.

  2. Проверьте OIDC-клиента для UI архива в Keycloak, как описано выше.
  3. Проверьте OIDC-клиента для Wildfly Administration Console в Keycloak, как описано выше.
  4. Проверьте OIDC-клиента для OAuth2 Proxy в Keycloak, как описано выше.
  5. (Условно) Пересоздайте и запустите контейнер OAuth2 Proxy с скорректированным Client Secret
     Если вы настроили OIDC-клиента для 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_keycloak_1 is up-to-date
     dcm4chee_arc_1 is up-to-date
     Recreating dcm4chee_oauth2-proxy_1 ... 
     Recreating dcm4chee_oauth2-proxy_1 ... done
     ```
     в каталоге, содержащем `docker-compose.yml`.