Установка Keycloak в Ubuntu Linux 22.04

Оцените статью

В современном цифровом мире вопросы аутентификации и авторизации пользователей выходят на первый план. Разработчикам и администраторам систем требуется надёжное, гибкое и безопасное решение для управления идентификацией — без избыточных затрат времени на реализацию «с нуля».

Keycloak — один из наиболее популярных open‑source‑продуктов в этой области. Он предоставляет полнофункциональный сервер идентификации и доступа (Identity and Access Management, IAM), позволяющий:

  • настраивать политики безопасности и многое другое.
  • управлять пользователями и их ролями;
  • реализовывать единый вход (Single Sign‑On);
  • интегрировать внешние провайдеры идентификации (соцсети, корпоративные IDP);

Тестовый запуск Keycloak

Страница загрузи по адресу https://www.keycloak.org/downloads.

Keycloak представляет из себя Java-приложение и мы можем его запустить так же как и любое другое Java приложение (например Jira или Jenkins).

Устанавливаем необходимые пакеты (Для запуска требуется Open JDK 21).

# apt-get install openjdk-21-jre

Загружаем и распаковываем.

# cd /tmp/
# wget https://github.com/keycloak/keycloak/releases/download/26.5.3/keycloak-26.5.3.tar.gz
# tar -xvf ./keycloak-26.5.3.tar.gz
# mv ./keycloak-26.5.3 /opt/keycloak

Подготавливаем окружение и запускаем.

# useradd keycloak
# mkdir /home/keycloak
# chown keycloak:keycloak /home/keycloak
# cd /opt/keycloak/
# chown -R keycloak:keycloak /opt/keycloak/
# su keycloak -s /bin/bash
$ bin/kc.sh start-dev

Обратите внимание, что мы запустили keycloack с ключом start-dev, а это запуск в режиме разработки, для того чтобы просто проверить работоспособность.

Сервис запускается на порту 8080 и мы можем сразу подключиться к Web-интерфейсу управления.

Тестовый запуск Keycloack

Настройка Production Keycloak

Сразу зарегистрируем доменную запись у регистратора.

Доменная запись на Cloud.ru

Получаем сертификат Let’s encrypt.

# certbot certonly --nginx -d kc.interlan.xyz

Конфигурация reverse-proxy типовая.

map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

server {
    listen 80;
    server_name www.kc.interlan.xyz kc.interlan.xyz;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443      ssl http2;

    server_name www.kc.interlan.xyz kc.interlan.xyz;

    access_log  /var/log/nginx/kc.interlan.xyz-access.log;
    error_log  /var/log/nginx/kc.interlan.xyz-error.log warn;

    ssl_certificate /etc/letsencrypt/live/kc.interlan.xyz/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/kc.interlan.xyz/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;

    client_max_body_size 64M;
    fastcgi_buffers 64 4K;

    proxy_connect_timeout 600;
    proxy_send_timeout 600;
    proxy_read_timeout 600;
    send_timeout 600;

    gzip on;
    gzip_vary on;
    gzip_comp_level 4;
    gzip_min_length 256;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

    if ($host ~ ^www\.(?<domain>.+)$) {
      return  301 $scheme://$domain$request_uri;
    }

    location / {

      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;

      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-Server $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Scheme $scheme;
      proxy_pass http://127.0.0.1:8080;
    }

}

Проверяем, что сервис доступен по доменному имени по протоколу https. Так как сервис запущен в режиме разработки не имеет особого смысла сейчас создавать административного пользователя и прежде всего необходимо настроить работу с базой данных (сейчас используется локальная).

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

# CREATE USER keycloack_user WITH PASSWORD 'xxxPASSWORDxxx';
# CREATE DATABASE keycloack_db OWNER keycloack_user;

Вносим изменения в файл конфигурации и перезапускаем сервис просто остановив и запустив приложение запущенное в тестовом режиме.

Файл конфигурации /opt/keycloak/conf/keycloak.conf.

db=postgres
db-username=keycloack_user
db-password=xxxPASSWORDxxx
db-url=jdbc:postgresql://127.0.0.1/keycloack_db

База данных проинициализирована после перезапуск Keycloack.

База данных проинициализирована после перезапуск Keycloack.

Подключаемся к серверу по ssh с использованием проброса портов для создания административного пользователя.

$ ssh root@185.135.81.157 -L:8080:127.0.0.1:8080

Теперь подключившись на localhost:8080 можем создать административного пользователя.

Keycloack создание административного пользователя.

И сейчас фактически остается настроить SystemD-сервис, перевести Keycloack в Production-режим и устанока Keycloack завершена.

Вносим изменения в конфигурационный файл для работы за реверс-прокси.

http-enabled=true
proxy-trusted-addresses=185.135.81.157,127.0.0.0/8
proxy-headers=xforwarded
hostname=https://kc.interlan.xyz

Файл сервиса /lib/systemd/system/keycloack.service.

[Unit]
Description=Keycloack service
After=syslog.target

[Service]
WorkingDirectory=/opt/keycloak
User=keycloak
ExecStart=/opt/keycloak/bin/kc.sh start

[Install]
WantedBy=multi-user.target

Настраиваем автозапуск и запускаем.

# systemctl daemon-reload
# systemctl enable keycloack.service
# systemctl start keycloack.service

Похожие записи

Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

В этой статье мы рассмотрим пошаговую настройку кластера Kubernetes на Ubuntu 24.04 с тремя узлами: один мастер (который также может запускать пользовательские поды) и два рабочих узла. Мы настроим PersistentVolume…

Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

В рамках создания собственного кластера Kubernetes я поднаял кластер Mysql который работает в режиме Master-Slave и Slave-узлы соответственно работают в режиме read-only, а мастер в read-write. Соответственно мне нужен балансировщик…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читать еще статьи

Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

Полное руководство по настройке UFW в Ubuntu: от основ до продвинутых правил

Полное руководство по настройке UFW в Ubuntu: от основ до продвинутых правил

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования