218 lines
7.4 KiB
Markdown
218 lines
7.4 KiB
Markdown
# Установка и базовая настройка Keycloak на Ubuntu
|
||
|
||
Это руководство описывает процесс установки Keycloak на Ubuntu (20.04 или 22.04) и его базовую настройку для использования в микросервисной архитектуре.
|
||
|
||
## Требования
|
||
- Ubuntu 20.04 или 22.04.
|
||
- Java Development Kit (JDK) версии 17 или выше.
|
||
- Доступ к интернету.
|
||
- (Опционально) PostgreSQL для продакшен-использования.
|
||
|
||
## Шаг 1: Установка Java
|
||
Keycloak требует Java. Установим OpenJDK 17:
|
||
|
||
```sh
|
||
sudo apt update &&
|
||
sudo apt install openjdk-21-jdk openjdk-21-jre -y
|
||
```
|
||
|
||
Проверьте версию Java:
|
||
```sh
|
||
java -version
|
||
```
|
||
|
||
Ожидаемый вывод:
|
||
```
|
||
openjdk 17.0.9 ...
|
||
```
|
||
|
||
## Шаг 2: Загрузка и установка Keycloak
|
||
1. **Скачайте последнюю версию Keycloak**:
|
||
```sh
|
||
wget https://github.com/keycloak/keycloak/releases/download/26.3.0/keycloak-26.3.0.tar.gz
|
||
```
|
||
|
||
2. **Распакуйте архив**:
|
||
```sh
|
||
tar -xvzf keycloak-26.3.0.tar.gz
|
||
sudo mv keycloak-26.3.0 /opt/keycloak
|
||
```
|
||
|
||
3. **Создайте пользователя для Keycloak**:
|
||
```sh
|
||
sudo useradd -r -s /bin/false keycloak
|
||
sudo chown -R keycloak:keycloak /opt/keycloak
|
||
```
|
||
|
||
## Шаг 3: Настройка базы данных (опционально, для продакшена)
|
||
По умолчанию используется встроенная база H2, но для продакшена рекомендуется PostgreSQL.
|
||
|
||
1. **Установите PostgreSQL**:
|
||
```sh
|
||
sudo apt install -y postgresql postgresql-contrib
|
||
```
|
||
|
||
2. **Создайте базу данных и пользователя**:
|
||
```sh
|
||
sudo -u postgres psql
|
||
```
|
||
|
||
Внутри psql:
|
||
```sql
|
||
CREATE DATABASE keycloak;
|
||
CREATE USER keycloak WITH PASSWORD 'your_secure_password';
|
||
GRANT ALL PRIVILEGES ON DATABASE keycloak TO keycloak;
|
||
\q
|
||
```
|
||
|
||
3. **Настройте Keycloak для PostgreSQL**:
|
||
Отредактируйте `/opt/keycloak/conf/keycloak.conf`:
|
||
```sh
|
||
sudo nano /opt/keycloak/conf/keycloak.conf
|
||
```
|
||
|
||
Добавьте:
|
||
```ini
|
||
db=postgres
|
||
db-url=jdbc:postgresql://localhost:5432/keycloak
|
||
db-username=keycloak
|
||
db-password=your_secure_password
|
||
```
|
||
|
||
4. **Установите JDBC-драйвер PostgreSQL**:
|
||
```sh
|
||
wget https://jdbc.postgresql.org/download/postgresql-42.7.3.jar
|
||
sudo mv postgresql-42.7.3.jar /opt/keycloak/providers/
|
||
```
|
||
|
||
## Шаг 4: Запуск Keycloak
|
||
1. **Соберите и настройте Keycloak**:
|
||
```sh
|
||
/opt/keycloak/bin/kc.sh build
|
||
```
|
||
|
||
2. **Запустите Keycloak в режиме разработки**:
|
||
```sh
|
||
/opt/keycloak/bin/kc.sh start-dev
|
||
```
|
||
|
||
- Работает на `http://localhost:8080`.
|
||
- Для продакшена используйте `kc.sh start` с HTTPS.
|
||
|
||
3. **Проверьте доступ**:
|
||
Откройте браузер и перейдите по `http://localhost:8080`.
|
||
|
||
## Шаг 5: Базовая настройка Keycloak
|
||
1. **Создайте администратора**:
|
||
При первом запуске задайте логин и пароль администратора:
|
||
```sh
|
||
/opt/keycloak/bin/kc.sh start-dev
|
||
```
|
||
|
||
2. **Войдите в админ-консоль**:
|
||
- Перейдите по `http://localhost:8080/admin`.
|
||
- Используйте учетные данные администратора.
|
||
|
||
3. **Создайте Realm**:
|
||
- В админ-консоли выберите **Create Realm**.
|
||
- Задайте имя, например, `myapp-realm`.
|
||
|
||
4. **Создайте клиента**:
|
||
- В разделе **Clients** выберите **Create client**.
|
||
- Настройки:
|
||
- **Client ID**: `myapp-client`.
|
||
- **Client type**: `OpenID Connect`.
|
||
- **Client authentication**: Включите для конфиденциального клиента.
|
||
- **Root URL**: Например, `http://localhost:3000`.
|
||
- **Valid redirect URIs**: Например, `http://localhost:3000/*`.
|
||
- Скопируйте **Client Secret**.
|
||
|
||
5. **Создайте пользователя**:
|
||
- В разделе **Users** выберите **Add user**.
|
||
- Задайте имя, например, `testuser`.
|
||
- Установите пароль в **Credentials** (например, `testpassword`).
|
||
|
||
6. **Настройте роли**:
|
||
- В разделе **Roles** создайте роль, например, `user`.
|
||
- Назначьте роль пользователю в **Role Mapping**.
|
||
|
||
## Шаг 6: Интеграция с микросервисом
|
||
1. **Получите OpenID Connect конфигурацию**:
|
||
- В **Realm Settings** → **General** → **OpenID Endpoint Configuration**.
|
||
- URL: `http://localhost:8080/realms/myapp-realm/.well-known/openid-configuration`.
|
||
|
||
2. **Пример для Spring Boot**:
|
||
Добавьте зависимость:
|
||
```xml
|
||
<dependency>
|
||
<groupId>org.keycloak</groupId>
|
||
<artifactId>keycloak-spring-boot-starter</artifactId>
|
||
<version>24.0.5</version>
|
||
</dependency>
|
||
```
|
||
|
||
Настройте `application.properties`:
|
||
```properties
|
||
keycloak.realm=myapp-realm
|
||
keycloak.auth-server-url=http://localhost:8080
|
||
keycloak.resource=myapp-client
|
||
keycloak.credentials.secret=your-client-secret
|
||
Elders keycloak.use-resource-role-mappings=true
|
||
```
|
||
|
||
3. **Тестирование**:
|
||
- Перейдите по:
|
||
```
|
||
http://localhost:8080/realms/myapp-realm/protocol/openid-connect/auth?client_id=myapp-client&response_type=code&redirect_uri=http://localhost:3000
|
||
```
|
||
- Войдите как `testuser` с паролем `testpassword`.
|
||
|
||
## Шаг 7: Настройка Keycloak как службы
|
||
1. Создайте systemd-сервис:
|
||
```sh
|
||
sudo nano /etc/systemd/system/keycloak.service
|
||
```
|
||
|
||
Добавьте:
|
||
```ini
|
||
[Unit]
|
||
Description=Keycloak
|
||
After=network.target
|
||
|
||
[Service]
|
||
User=keycloak
|
||
Group=keycloak
|
||
WorkingDirectory=/opt/keycloak
|
||
ExecStart=/opt/keycloak/bin/kc.sh start --hostname=your-domain.com --https-certificate-file=/path/to/cert.pem --https-certificate-key-file=/path/to/key.pem
|
||
Restart=always
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
```
|
||
|
||
2. Активируйте сервис:
|
||
```sh
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl enable keycloak
|
||
sudo systemctl start keycloak
|
||
```
|
||
|
||
3. Проверьте статус:
|
||
```sh
|
||
sudo systemctl status keycloak
|
||
```
|
||
|
||
## Полезные советы
|
||
- **HTTPS**: Настройте SSL/TLS в `keycloak.conf`:
|
||
```ini
|
||
https-certificate-file=/path/to/cert.pem
|
||
https-certificate-key-file=/path/to/key.pem
|
||
hostname=your-domain.com
|
||
```
|
||
- **Резервное копирование**: Сохраняйте базу данных и настройки realm.
|
||
- **Логирование**: Включите в `keycloak.conf`:
|
||
```ini
|
||
log-level=info
|
||
```
|
||
|
||
Теперь Keycloak установлен, настроен и готов к использованию в вашей микросервисной архитектуре. Вы можете интегрировать его с API Gateway или микросервисами, используя JWT-токены для аутентификации и авторизации. Если нужны дополнительные детали или помощь с конкретным сценарием, дайте знать! |