Установка 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

Related Posts

Установка и настройка FreeIPA-клиент в Ubuntu Linux

Для присоединения Ubuntu‑системы к домену FreeIPA используется утилита ipa-client-install из пакета freeipa-client. Предварительные требования На этапе установки может быть предложено указать Kerberos realm и здесь на данном этапе можно оставить…

Установка и базовая настройка Wiki Outline

Решил я повторить установку Wiki Outline по мотивам «Вебинар «База знаний с AI: создаем корпоративную Wiki в облаке»«. На вебинаре мне в в принципе эта Wiki понравилась, но как говорится…

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

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

You Missed

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

Установка и настройка FreeIPA-клиент в Ubuntu Linux

Установка и настройка FreeIPA-клиент в Ubuntu Linux

Установка и базовая настройка Wiki Outline

Установка и базовая настройка Wiki Outline

Snap, AppImage и Flatpak: отличия и практическое использование

Snap, AppImage и Flatpak: отличия и практическое использование

Вебинар «База знаний с AI: создаем корпоративную Wiki в облаке»

Вебинар «База знаний с AI: создаем корпоративную Wiki в облаке»

Маршрутизация DNS-запросов в Mikrotik

Маршрутизация DNS-запросов в Mikrotik