Установка Keycloak и PostgeSQL в Linux (Centos, Rocky, Debian)
Keycloak - продукт с открытым кодом для реализации single sign-on с возможностью управления доступом, нацелен на современные применения и сервисы. По состоянию на 2018 год, этот проект сообщества JBoss находится под управлением Red Hat которые используют его как upstream проект для своего продукта RH-SSO
Подготовка к установке Keycloak
Добавляем пользователя и группу
1
$ sudo groupadd -r keycloak$ sudo useradd -m -d /var/lib/keycloak -s /sbin/nologin -r -g keycloak keycloak
Создаем каталог, скачиваем дистрибутив
1
2
$ 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
Распаковываем, назначаем права
1
2
3
4
$ 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 дистрибутивах
1
$ sudo dnf -y install java-11-openjdk
Установка OpenJDK в Debian-like дистрибутивах
1
$ sudo apt -y install openjdk-11-jdk
Проверяем
1
$ java -version
Установка PostgreSQL 14 в RHEL-like (Centos 8-9, Rocky 8-9, AlmaLinux 8-9)
Отключаем модуль PostgreSQL
1
$ sudo dnf -qy module disable postgresql
Добавляем репозиторий PostgreSQL для RHEL-like 9
1
$ 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
1
$ sudo dnf -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Устанавливаем PostgreSQL 14
1
$ sudo dnf -y install postgresql14-server postgresql14
Инициализируем базу PostgreSQL
1
$ sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
Добавляем сервис в автозагрузку и запускаем
1
2
$ sudo systemctl enable postgresql-14
$ sudo systemctl start postgresql-14
Проверяем
1
$ systemctl status postgresql-14
Установка PostgreSQL в Debian
Добавляем репозиторий
1
$ 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
и добавляем ключ репозитория
1
2
$ sudo apt -y install gnupg2
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
Устанавливаем PostgreSQL 14
1
2
$ sudo apt update
$ sudo apt -y install postgresql-14
Настройка PostgreSQL
Создаем пользователя и базу для Keycloak
1
2
3
4
5
$ 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-сертификат для вашего домена
Либо генерим самоподписанный сертификат
1
$ 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
Назначаем права
1
$ sudo chown keycloak. /opt/keycloak/keycloak-19.0.1/conf/server*
Настраиваем Keyсolak
Редактируем конфигурационный файл keycloak.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
$ 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
1
2
$ sudo firewall-cmd --permanent --zone=public --add-port=8443/tcp
$ sudo firewall-cmd --reload
В Debian по-умолчанию Firewall UFW не установлен.
Запускаем Keycloak
Переходим в каталог
1
$ cd /opt/keycloak/keycloak-19.0.1
Запускаем keycloak в режиме developer mode
1
$ sudo bin/kc.sh start-dev
Задаем логин / пароль админа
1
2
$ export KEYCLOAK_ADMIN=admin
$ export KEYCLOAK_ADMIN_PASSWORD=passwd
Создаем конфиг для прода
1
$ sudo bin/kc.sh build
Первый запуск и импорт логин-пароль админа в базу
1
$ sudo -E bin/kc.sh start
После успешного запуска останавливаем процесс (Ctrl+C)
Запускаем Keycloak
1
$ sudo bin/kc.sh start --hostname=keycloak.mydomain.com
Создаем Systemd Unit
Создаем файл keycloak.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ 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
Запускаем сервис, смотрим статус, добавляем в автозагрузку
1
2
3
4
$ sudo systemctl daemon-reload
$ sudo systemctl start keycloak
$ sudo systemctl status keycloak
$ sudo systemctl enable keycloak