# Установка и базовая настройка 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 org.keycloak keycloak-spring-boot-starter 24.0.5 ``` Настройте `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-токены для аутентификации и авторизации. Если нужны дополнительные детали или помощь с конкретным сценарием, дайте знать!