0

Keycloak

Установка Keycloak и PostgeSQL в Linux

24.01.2023

Установка Keycloak и PostgeSQL в Linux (Centos, Rocky, Debian) 1

Keycloak + PostgreSQL

Keycloak — продукт с открытым кодом для реализации single sign-on с возможностью управления доступом, нацелен на современные применения и сервисы. По состоянию на 2018 год, этот проект сообщества JBoss находится под управлением Red Hat которые используют его как upstream проект для своего продукта RH-SSO

Подготовка к установке Keycloak

Добавляем пользователя и группу

$ sudo groupadd -r keycloak
$ sudo useradd -m -d /var/lib/keycloak -s /sbin/nologin -r -g keycloak keycloak

Создаем каталог, скачиваем дистрибутив

$ sudo mkdir -p /opt/keycloak
$ sudo wget https://github.com/keycloak/keycloak/releases/download/19.0.1/keycloak-19.0.1.zip -P /opt/keycloak

Распаковываем, назначаем права

$ sudo unzip /opt/keycloak/keycloak-19.0.1.zip -d /opt/keycloak
$ cd /opt
$ sudo chown -R keycloak. keycloak
$ sudo chmod o+x /opt/keycloak/keycloak-19.0.1/bin/

Установка OpenJDK

Устанавливаем OpenJDK в RHEL-like дистрибутивах

$ sudo dnf -y install java-11-openjdk

Установка OpenJDK в Debian-like дистрибутивах

$ sudo apt -y install openjdk-11-jdk

Проверяем

$ java -version

Установка PostgreSQL 14 в RHEL-like (Centos 8-9, Rocky 8-9, AlmaLinux 8-9)

Отключаем модуль PostgreSQL

$ sudo dnf -qy module disable postgresql

Добавляем репозиторий PostgreSQL для RHEL-like 9

$ sudo dnf -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

Либо добавляем репозиторий PostgreSQL для RHEL-like 8

$ sudo dnf -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

Устанавливаем PostgreSQL 14

$ sudo dnf -y install postgresql14-server postgresql14

Инициализируем базу PostgreSQL

$ sudo /usr/pgsql-14/bin/postgresql-14-setup initdb

Добавляем сервис в автозагрузку и запускаем

$ sudo systemctl enable postgresql-14
$ sudo systemctl start postgresql-14

Проверяем

$ systemctl status postgresql-14

Установка PostgreSQL в Debian

Добавляем репозиторий

$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

Устанавливаем утилиту gnupg2 и добавляем ключ репозитория

$ sudo apt -y install gnupg2
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Устанавливаем PostgreSQL 14

$ sudo apt update
$ sudo apt -y install postgresql-14

Настройка PostgreSQL

Создаем пользователя и базу для Keycloak

$ sudo -u postgres psql
=# create user keycloak with password 'mysuperpasswd';
=# create database keycloak owner keycloak;
=# grant all privileges on database keycloak to keycloak;
# \q

SSL

Берем готовый ssl-сертификат для вашего домена, либо генерим самоподписанный

$ sudo openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout /opt/keycloak/keycloak-19.0.1/conf/server.key.pem -out /opt/keycloak/keycloak-19.0.1/conf/server.crt.pem

Назначаем права

$ sudo chown keycloak. /opt/keycloak/keycloak-19.0.1/conf/server*

Настраиваем Keyсolak

Редактируем конфигурационный файл keycloak.conf

$ sudo nano /opt/keycloak/keycloak-19.0.1/conf/keycloak.conf
# The database vendor.
db=postgres

# The username of the database user.
db-username=keycloak

# The password of the database user.
db-password=mysuperpasswd
 
# The full database JDBC URL. If not provided, a default URL is set based on the selected database vendor.
db-url=jdbc:postgresql://localhost/keycloak

# Observability

# If the server should expose metrics and healthcheck endpoints.
metrics-enabled=true

# HTTP

# The file path to a server certificate or certificate chain in PEM format.
https-certificate-file=/opt/keycloak/keycloak-19.0.1/conf/server.crt.pem

# The file path to a private key in PEM format.
https-certificate-key-file=/opt/keycloak/keycloak-19.0.1/conf/server.key.pem


# Hostname for the Keycloak server.
hostname=keycloak.mydomain.com:8443

#http-enabled=true

# Если надо, включаем логирование в файл
log-console-output=default
log=console,file
log-file=/tmp/keycloak.log

Настройка Firewall для RHEL-like

Открываем порт 8443

$ sudo firewall-cmd --permanent --zone=public --add-port=8443/tcp
$ sudo firewall-cmd --reload

В Debian по-умолчанию Firewall UFW не установлен.

Запускаем Keycloak

Переходим в каталог

$ cd /opt/keycloak/keycloak-19.0.1

Запускаем keycloak в режиме developer mode

$ sudo bin/kc.sh start-dev

Задаем логин / пароль админа

$ export KEYCLOAK_ADMIN=admin
$ export KEYCLOAK_ADMIN_PASSWORD=passwd

Создаем конфиг для прода

$ sudo bin/kc.sh build

Первый запуск и импорт логин-пароль админа в базу

$ sudo -E bin/kc.sh start

После успешного запуска останавливаем процесс (Ctrl+C)

Запускаем Keycloak

$ sudo bin/kc.sh start --hostname=keycloak.mydomain.com

Создаем Systemd Unit

Создаем файл keycloak.service

$ sudo nano /etc/systemd/system/keycloak.service
[Unit]
Description=Keycloak
After=network.target

[Service]
Type=idle
User=keycloak
Group=keycloak
SuccessExitStatus=0 143
ExecStart=!/opt/keycloak/keycloak-19.0.1/bin/kc.sh start --hostname=keycloak.mydomain.com
TimeoutStartSec=600
TimeoutStopSec=600

[Install]
WantedBy=multi-user.target

Запускаем сервис, смотрим статус, добавляем в автозагрузку

$ sudo systemctl daemon-reload
$ sudo systemctl start keycloak
$ sudo systemctl status keycloak
$ sudo systemctl enable keycloak

Свежие комментарии

Подписка

Лучшие статьи


Fatal error: Uncaught Error: Call to a member function have_posts() on null in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php:380 Stack trace: #0 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/widget.php(257): fox56_blog_grid(NULL, Array) #1 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/register.php(33): include('/home/host18670...') #2 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/class-wp-widget.php(394): Wi_Widget_Latest_Posts->widget(Array, Array) #3 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/widgets.php(837): WP_Widget->display_callback(Array, Array) #4 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(417): dynamic_sidebar('sidebar') #5 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(136): fox56_single_sidebar() #6 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(7): fox56_single_inner() #7 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/single.php(23): fox56_single() #8 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/template-loader.php(106): include('/home/host18670...') #9 /home/host1867038/the-devops.ru/htdocs/www/wp-blog-header.php(19): require_once('/home/host18670...') #10 /home/host1867038/the-devops.ru/htdocs/www/index.php(17): require('/home/host18670...') #11 {main} thrown in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php on line 380