> For the complete documentation index, see [llms.txt](https://utm-1.gitbook.io/utm-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://utm-1.gitbook.io/utm-docs/dokumentaciya/utm-it/resheniya/organizaciya-dostupov/keycloak/instansy/utm-keycloak-na-utm-auth4-0.md).

# utm-keycloak на utm-auth4-0

## Общая информация

Инстанс keycloak на utm-auth4-0

keycloak работает в контейнере Docker.

<table><thead><tr><th width="306.79998779296875">Имя</th><th>Значение</th></tr></thead><tbody><tr><td>Сервер Имя</td><td><a href="/pages/ctUXZxPogfwPP0BSSYNV"> utm-auth4-0</a></td></tr><tr><td>Сервер IP  </td><td> 192.168.4.0</td></tr><tr><td>Порт доступа</td><td>8080</td></tr><tr><td>Порт мониторинга</td><td>8080</td></tr><tr><td>Версия keycloak</td><td>26.4.5</td></tr><tr><td>БД keycloak</td><td><ul><li>СУБД: Postgres</li><li>Сервер: 192.168.4.9</li><li>Порт: 5432</li><li>База: keycloak</li><li>Пользователь: keycloak</li></ul></td></tr><tr><td>Пользователи</td><td><ul><li>admin</li></ul></td></tr><tr><td>Репозиторий на GitHub</td><td>keycloak</td></tr><tr><td>Папка с проектом в репозитории</td><td>/</td></tr><tr><td>Имя Docker контейнера</td><td>utm-keycloak</td></tr><tr><td>Каталог на сервере с смонтированной папкой данных</td><td>/var/lib/docker/volumes/docker_utm-keycloak-data</td></tr></tbody></table>

## Предварительная подготовка

### Репозиторий в GitHub

Необходимо создать приватный репозиторий keycloak на GitHub.

В аккаунте GitHub должен быть прописан публичный SSH ключ для доступа к GitHub.

Склонировать репозиторий keycloak **на рабочую станцию где ведется разработка.**

### Linux cервер развертывания

<details>

<summary>Настройка Linux сервера развертывания keycloak</summary>

На Linux сервере развертывания должно быть:

* [Установка docker](broken://pages/ifHKmuwJEVM1AshToieI)

```bash
docker --version
# Docker version 29.1.2, build 890dcca
```

* Установлен Git

```bash
git --version
# git version 2.43.0
```

* Группы доступа

```bash
# Группа доступа к проектам GitHub
sudo addgroup utm-github
# Добавить пользователей в группу
sudo usermod -aG utm-github maxim
sudo usermod -aG utm-github andrew
```

* Папки

```bash
# Создать папку
sudo mkdir -p /srv/github/utenkov-maxim
# Права на доступ к папке
sudo chmod -R 0775 /srv/github/utenkov-maxim
# Владелец папки
sudo chown -R root:utm-github /srv/github/utenkov-maxim
# Добавить линк в домашней папке к папке /srv/github/utenkov-maxim
ln -s /srv/github $HOME/github
```

* Настройка доступа к GitHub по SSH

Скопировать в папку $HOME/.ssh пару SSH ключей доступа к GitHub

```bash
# Права на доступ к папке
sudo chmod 600 ~/.ssh/id_ed25519_github_utenkov-maxim
# Настроить config для SSH
sudo nano ~/.ssh/config
```

Добавить следующее содержимое:

```ssh-config
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_github_utenkov-maxim
    IdentitiesOnly yes
```

</details>

## Подготовка файлов проекта

Предварительно должен быть склонирован репозиторий keycloak из GitHub.

В корневой папке репозитория создать папку `docker` и создать следующие файлы:

**compose.yaml**

<details>

<summary>Содержимое файла compose.yaml</summary>

```yaml
volumes:
  utm-keycloak-data:
  utm-keycloak-themes:

services:
  # keycloak
  keycloak:
    image: quay.io/keycloak/keycloak:26.4.5
    hostname: utm-keycloak
    container_name: utm-keycloak
    restart: always
    # env_file:
    #   - .env
    environment:
      KC_DB: postgres
      KC_DB_URL: "jdbc:postgresql://${KEYCLOAK_DB_HOST}:${KEYCLOAK_DB_PORT}/${KEYCLOAK_DB_DATABASE}"
      KC_DB_USERNAME: ${KEYCLOAK_DB_USERNAME}
      KC_DB_PASSWORD: ${KEYCLOAK_DB_PASSWORD}
      KC_CLUSTER_ENABLED: false
      KC_HOSTNAME: ${KC_HOSTNAME}
      KC_HOSTNAME_STRICT: false
      # KC_HTTP_RELATIVE_PATH: "/"
      KC_HTTP_ENABLED: true
      KC_HTTPS_REDIRECT: true
      KC_PROXY: edge  # passthrough   # edge
      KC_HEALTH_ENABLED: true
      KC_METRICS_ENABLED: true
      KC_METRICS_PROMETHEUS: true
      KC_METRICS_EXPORTER_PROMETHEUS: true
      KEYCLOAK_ADMIN: ${KEYCLOAK_ADMIN}
      KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_ADMIN_PASSWORD}
      KC_HTTP_PORT: 8080
      KC_HTTP_MANAGEMENT_PORT: 9000
      KC_LOG_LEVEL: DEBUG
    command:
      - "start"
      - "--proxy-headers=xforwarded"
    ports:
      - "8080:8080"
      - "9000:9000"
    volumes:
      - utm-keycloak-data:/opt/keycloak/data
      - utm-keycloak-themes:/opt/keycloak/themes
    # networks:
    #   - keycloak-net
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:9000/health/ready || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 90s

# networks:
#   keycloak-net:
#     driver: bridge
```

</details>

.env.template

<details>

<summary>Содержимое файла .env.template</summary>

```apache
# Database
KEYCLOAK_DB_HOST=192.168.4.9
KEYCLOAK_DB_PORT=5432
KEYCLOAK_DB_DATABASE=keycloak
KEYCLOAK_DB_USERNAME=keycloak
KEYCLOAK_DB_PASSWORD=__REPLACE_WITH_SECRET__

# Hostname и HTTP
KC_HOSTNAME=https://keycloak.utmsoft.ru
KC_HTTP_ENABLED=true

# Admin
KEYCLOAK_ADMIN=admin
KEYCLOAK_ADMIN_PASSWORD=__REPLACE_WITH_ADMIN_PASS__

# Сетевой адрес, используемый в compose для привязки порта
LAN_IP=192.168.4.0
```

</details>

Сделать коммит в GitHub со всеми изменениями в репозитории keycloak.

## Подготовка БД keycloak

<details>

<summary>Настройка PostgreSQL</summary>

**Создание базы данных и пользователя**

Подключитесь к PostgreSQL (`192.168.4.9`) как суперпользователь:

```sql
CREATE USER keycloak WITH PASSWORD 'your_secure_db_password';
CREATE DATABASE keycloak;
GRANT ALL PRIVILEGES ON DATABASE keycloak TO keycloak;
ALTER USER keycloak CREATEDB;
```

**Проверка подключения**

```bash
psql -h 192.168.4.9 -U keycloak -d keycloak
```

</details>

## Настройка обратного прокси

<details>

<summary>Настройка обратного прокси для доступа к keycloak</summary>

Необходимо внести изменения в конфигурацию обратного прокси nginx

```bash
sudo nano /etc/nginx/sites-available/keycloak.conf
```

Внести изменения:

```nginx
# Hot commands:
# 
# sudo nano /etc/nginx/sites-available/keycloak.conf
# sudo nginx -t
# sudo systemctl daemon-reload
# sudo systemctl restart nginx
#

####################################################################
# keycloak.utmsoft.ru
# Вариант для HTTP
####################################################################

server {
  listen 80;
  server_name keycloak.utmsoft.ru;
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl;
  http2 on;
  server_name keycloak.utmsoft.ru;

  ssl_certificate /etc/letsencrypt/live/utmsoft.ru/fullchain.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/utmsoft.ru/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/utmsoft.ru/privkey.pem;

  location / {
    proxy_pass http://192.168.4.0:8080/;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header Connection "";
    proxy_buffering off;
    proxy_connect_timeout 10s;
    proxy_send_timeout 60s;
    proxy_read_timeout 60s;
  }
}
```

Выполнить:

```bash
sudo nginx -t
sudo systemctl daemon-reload
sudo systemctl restart nginx
```

</details>

## Запуск Docker контейнера с keycloak

<details>

<summary>Выполнение запуска Docker контейнера с keycloak</summary>

Подключение репозитория keycloak:

```bash
# Перейти в общую папку
cd  ~/github/utenkov-maxim
# Выполнить клонирование репозитория
git clone git@github.com:utenkov-maxim/keycloak.git
# Перейти в папку репозитория mb-projects
cd keycloak/docker
```

Обновление репозитория:

```bash
# Перейти в папку репозитория mb-projects
cd  ~/github/utenkov-maxim/keycloak
# Получить свежие данные из репозитория
git pull
# Перейти в папку проекта 
cd  ~/github/utenkov-maxim/keycloak/docker
```

Подготовка файла .env

```bash
# Создать .env на основе шаблона .env.template
cp .env.template .env
# Отредактируйте .env, замените PLACEHOLDER'ы
nano .env
chmod 600 .env
```

Запустить контейнеры

```bash
# Запустить
docker compose up -d
```

Проверки:

```bash
# Посмотреть запущенные контейнеры
docker ps

# Посмотреть каталог с volume с данными БД который примонтирован к контейнеру
sudo su
cd /var/lib/docker/volumes/docker_utm-keycloak-data
```

Дополнительные команды:

```bash
# Логи запуска контейнера
docker logs utm-keycloak

# Остановить контейнер
docker stop utm-keycloak

# Войти во внутрь контейнера
docker exec -it utm-keycloak bash

# Список всех контейнеров, включая остановленные
docker ps -a

# Удалить контейнер
docker rm utm-keycloak

# Список volumes
docker volume ls

# Удалить volume
docker volume rm docker_utm-keycloak-data
docker volume rm docker_utm-keycloak-themes

# Список volumes примонтированных к контейнеру
docker inspect utm-keycloak | grep -i "Mounts"

# Перезапуск контейнера
docker restart utm-keycloak
```

</details>

keycloak: [http://192.168.4.0:8080](http://192.168.4.0:8080/)

## Настройка Prometheus и Grafana

Настройка Prometheus и Grafana [описана тут](/utm-docs/dokumentaciya/utm-it/resheniya/monitoring/prometheus/monitoring-keycloak.md)
