> 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/spravochnaya-informaciya/keycloak/instrukcii-po-razvertyvaniyu/razvyortyvanie-keycloak-v-docker-gigachat.md).

# Развёртывание Keycloak в Docker (GigaChat)

### Полная инструкция по развертыванию Keycloak с PostgreSQL и мониторингом через Prometheus

Эта инструкция охватывает установку всех необходимых компонентов, включая Docker, создание необходимой структуры каталогов, запуск приложения Keycloak в Docker-контейнерах, настройку Nginx в роли обратного прокси и интеграцию с системой мониторинга Prometheus.

#### Часть I: Подготовка окружения

**Шаг 1: Установите Docker и Docker Compose**

Для установки Docker выполните команды:

```bash
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $(whoami)
newgrp docker
```

Docker Compose устанавливается отдельно (если ещё не установлен):

```bash
sudo apt-get install docker-compose-plugin
```

**Шаг 2: Подготовьте структуру каталогов и репозиторий GitHub**

Создание нужных директорий и установка прав доступа:

```bash
mkdir -p /srv/github/utenkov-maxim
chown -R root:utm-github /srv/github/utenkov-maxim
chmod -R 0775 /srv/github/utenkov-maxim
ln -s /srv/github $HOME/github
```

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

```bash
chmod 600 ~/.ssh/id_ed25519_github_utenkov-maxim
nano ~/.ssh/config
```

Добавьте в файл `.ssh/config` следующее содержимое:

```ini
Host github.com
   HostName github.com
   User git
   IdentityFile ~/.ssh/id_ed25519_github_utenkov-maxim
```

Далее, клонируйте репозиторий:

```bash
cd ~/github/utenkov-maxim
git clone git@github.com:utenkov-maxim/keycloak.git
cd keycloak/docker
```

#### Часть II: Настройка и запуск Docker-приложения

**Шаг 3: Создайте файл `compose.yaml`**

Файл `compose.yaml` определяет два основных компонента: сам Keycloak и экспортер метрик для Prometheus.

```yaml
version: '3'
services:
  keycloak:
    image: quay.io/keycloak/keycloak:latest
    container_name: keycloak
    environment:
      KC_DB: postgres
      DB_ADDR: 192.168.4.9
      DB_DATABASE: keycloak
      DB_USER: keycloak
      DB_PASSWORD: your_password_here
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: admin
    ports:
      - "8080:8080"
    volumes:
      - ./keycloak-config:/opt/jboss/keycloak/standalone/configuration
    restart: unless-stopped

  keycloak-prometheus-exporter:
    image: jthomas/prometheus-keycloak-exporter:v0.1
    container_name: keycloak-prometheus-exporter
    depends_on:
      - keycloak
    ports:
      - "9191:9191"
    command: ["--server.url=http://keycloak:8080/auth"]
    restart: unless-stopped
```

**Шаг 4: Настройка конфигурации Keycloak**

Необходимо разместить в каталоге `./keycloak-config` любые дополнительные файлы конфигурации (например, тему оформления Keycloak, если потребуется).

#### Часть III: Настройка Nginx как обратного прокси

**Шаг 5: Конфигурация Nginx**

Конфигурация виртуального хоста в Nginx выглядит примерно так:

```nginx
upstream keycloak_backend {
    server 192.168.3.0:8080;
}

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

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

    ssl_certificate /path/to/your/cert.pem;
    ssl_certificate_key /path/to/your/key.key;

    location /auth {
        proxy_pass http://keycloak_backend;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

    location /metrics {
        allow 192.168.3.0/24;
        deny all;
        proxy_pass http://192.168.3.0:9191;
    }

    error_page 502 = @fallback;

    location @fallback {
        return 502 "Keycloak временно недоступен.";
    }
}
```

Поместите этот файл в `/etc/nginx/sites-enabled/keycloak.conf` и перезапустите Nginx:

```bash
sudo nginx -t && sudo service nginx reload
```

#### Часть IV: Интеграция с Prometheus

**Шаг 6: Настройка Prometheus**

Добавьте новую задачу в конфигурационный файл Prometheus (`prometheus.yml`), расположив её в разделе `scrape_configs`:

```yaml
scrape_configs:
  - job_name: 'keycloak_metrics'
    scrape_interval: 15s
    static_configs:
      - targets: ['192.168.3.0:9191']
```

#### Часть V: Запуск всей инфраструктуры

**Шаг 7: Запуск Docker Compose**

Разверните инфраструктуру командой:

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

Это запустит контейнеры Keycloak и экспортера метрик.

#### Заключение

Следуя приведенным шагам, вы получите работающую систему аутентификации Keycloak, интегрированную с базой данных PostgreSQL, защищенную SSL/TLS и включённую в монитор Prometheus. Эта инфраструктура позволяет централизованно управлять пользователями и сессиями приложений, собирая важные метрики производительности.
