Если коротко Keycloak выступает единой точкой аутентификации и авторизации в локальной сети, связывая наши сервисы с Active Directorty, Google акаунтами ...
1 . Для работы требуется база данных, будем использовать mysql
apt install mysql-server
mysql
установим пароль рута для mysql
Настраиваем безопасность
Создаем базу и пользователя с правами к ней
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.
Проверяем
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
Проверяем
3. Установим Java
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
Правим
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 рекомендуется создать постоянного пользователя и удалить этого временного пользователя.
Станет доступным страница https://keycloak.mydomain.com:8443/
Автозагрузка
# /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