+
This commit is contained in:
218
Keycloak_install.md
Normal file
218
Keycloak_install.md
Normal file
@ -0,0 +1,218 @@
|
|||||||
|
# Установка и базовая настройка 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-токены для аутентификации и авторизации. Если нужны дополнительные детали или помощь с конкретным сценарием, дайте знать!
|
||||||
Reference in New Issue
Block a user