Сервер Keycloak на ubuntu 24

Если коротко Keycloak выступает единой точкой аутентификации и авторизации в локальной сети, связывая наши сервисы с Active Directorty, Google акаунтами ...

1 . Для работы требуется база данных, будем использовать mysql

apt install mysql-server

mysql

установим пароль рута для mysql

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MYSQL_DATABASE_PASSWORD';

Настраиваем безопасность

mysql_secure_installation

Создаем базу и пользователя с правами к ней

CREATE DATABASE keycloakdb CHARACTER SET utf8mb4 COLLATEutf8mb4_unicode_ci;

CREATE USER 'keycloak'@'localhost' IDENTIFIED BY MYSQL_DATABASE_PASSWORD';

GRANT ALL PRIVILEGES ON keycloakdb.* TO 'keycloak'@'localhost';

FLUSH PRIVILEGES;

exit;

2. Нам понадобится защищенное соединение, поэтому без SSL никуда, получаем сертификат с помощью Certbot.

apt install certbot python3-certbot-nginx -y

Проверяем

certbot --version

certbot --nginx

если у нас был настроенный Certbot то просто обновляем настройки

certbot certonly --standalone --preferred-challenges http -d keycloak.mydomain.com -d mysite.mydomain.com

Делаем автообновление

systemctl list-units --type timer

systemctl enable snap.certbot.renew.timer

systemctl status snap.certbot.renew.timer

Для обновления Certbot требует открытый 80 порт, поэтому настроем его автоматическое открытия и потом закрытие

cd /etc/letsencrypt/renewal-hooks/pre

nano pre-hook.sh

# Open port 80

ufw allow 80/tcp

chmod +x pre-hook.sh

cd /etc/letsencrypt/renewal-hooks/post

nano post-hook.sh

# Close port 80

ufw deny 80/tcp

#Reboot Server

sudo shutdown -r now

chmod +x post-hook.sh

Проверяем

certbot renew --dry-run

3. Установим Java

apt install openjdk-21-jdk

4. Добрались до самого Keycloak

apt install zip

mkdir -p /opt/keycloak

cd /opt/keycloak

wget https://github.com/keycloak/keycloak/releases/download/26.1.0/keycloak-26.1.0.zip

unzip keycloak-26.1.0.zip -d /opt/keycloak

rm keycloak-26.1.0.zip

Создадим группу и пользователя

groupadd -r keycloak

useradd -r -g keycloak -d /opt/keycloak -s /sbin/nologin keycloak

Дадим права этому пользователю, на использование директорий

cd /opt

chown -R keycloak: keycloak

chmod -R 755 /opt/keycloak/keycloak-26.1.0/bin/

chmod -R 755 /etc/letsencrypt

Конфигурируем Keycloak

nano /opt/keycloak/keycloak-26.1.0/conf/keycloak.conf

Правим

db=mysqldb

db-username=keycloak

db-password=MYSQL_DATABASE_PASSWORD

https-certificate-file=/etc/letsencrypt/live/keycloak.mydomain.com/fullchain.pem

https-certificate-key-file=/etc/letsencrypt/live/keycloak.mydomain.com/privkey.pemhostname=keycloak.mydomain.com

#У меня порт 443 использует Nginx поэтому используем 8443 а через Haproxy перенаправим запросы на наш домен keycloak.mydomain.com на 127.0.0.1:8443

https-port=8443

Собираем наш проект

cd /opt/keycloak/keycloak-26.1.0

sudo bin/kc.sh build

sudo -E bin/kc.sh bootstrap-admin user

Обратите внимание, что это делается для создания временного пользователя для доступа к keycloak. После входа в keycloak рекомендуется создать постоянного пользователя и удалить этого временного пользователя.

sudo -E bin/kc.sh start

Станет доступным страница https://keycloak.mydomain.com:8443/

Автозагрузка

nano /etc/systemd/system/keycloak.service

# /etc/systemd/system/keycloak.service

[Unit]

Description=Keycloak Server

After=syslog.target network.target mysql.service

Before=httpd.service

[Service]

User=keycloak

Group=keycloak

SuccessExitStatus=0 143

ExecStart=!/opt/keycloak/keycloak-26.1.0/bin/kc.sh start 

[Install]

WantedBy=multi-user.target

systemctl daemon-reload

systemctl enable keycloak

shutdown -r now

systemctl status keycloak