Merge branch 'master' of https://git.mesh.kz/igor/Ubuntu_docs
This commit is contained in:
@ -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-токены для аутентификации и авторизации. Если нужны дополнительные детали или помощь с конкретным сценарием, дайте знать!
|
||||
@ -178,7 +178,7 @@ transforms:
|
||||
if exists(.marker) {
|
||||
m, err = string(.marker)
|
||||
if err == null && length(m) > 0 {
|
||||
marker_str = "Marker: ```text\n" + m + "```"
|
||||
marker_str = "Marker: \n```text\n" + m + "\n```\n"
|
||||
}
|
||||
}
|
||||
level_str = ""
|
||||
@ -186,7 +186,7 @@ transforms:
|
||||
if exists(.level) {
|
||||
m, err = string(.level)
|
||||
if err == null {
|
||||
level_str = "level: ```text\n" + m + "```"
|
||||
level_str = "level: \n```text\n" + m + "\n```\n"
|
||||
}
|
||||
if m == "ERROR" {
|
||||
icon_str = "‼"
|
||||
@ -195,7 +195,7 @@ transforms:
|
||||
icon_str = "⚠️"
|
||||
}
|
||||
}
|
||||
.message = "{\"chat_id\":\"-1002640082189\",\"message_thread_id\":2,\"text\":\"" + icon_str + " " + level_str + marker_str + "Message: ```text\n" + msg + "```\", \"parse_mode\":\"Markdown\"}"
|
||||
.message = "{\"chat_id\":\"-1002640082189\",\"message_thread_id\":2,\"text\":\"" + icon_str + " " + level_str + marker_str + "Message: \n```text\n" + msg + "\n```\", \"parse_mode\":\"Markdown\"}"
|
||||
|
||||
format_telegram_json_translation:
|
||||
type: remap
|
||||
@ -210,7 +210,7 @@ transforms:
|
||||
if exists(.marker) {
|
||||
m, err = string(.marker)
|
||||
if err == null && length(m) > 0 {
|
||||
marker_str = "Marker: ```text\n" + m + "```"
|
||||
marker_str = "Marker: \n```text\n" + m + "\n```\n"
|
||||
}
|
||||
}
|
||||
level_str = ""
|
||||
@ -218,7 +218,7 @@ transforms:
|
||||
if exists(.level) {
|
||||
m, err = string(.level)
|
||||
if err == null {
|
||||
level_str = "level: ```text\n" + m + "```"
|
||||
level_str = "level: \n```text\n" + m + "\n```\n"
|
||||
}
|
||||
if m == "ERROR" {
|
||||
icon_str = "‼"
|
||||
@ -227,7 +227,7 @@ transforms:
|
||||
icon_str = "⚠️"
|
||||
}
|
||||
}
|
||||
.message = "{\"chat_id\":\"-1002640082189\",\"message_thread_id\":24,\"text\":\"" + icon_str + " " + level_str + marker_str + "Message: ```text\n" + msg + "```\", \"parse_mode\":\"Markdown\"}"
|
||||
.message = "{\"chat_id\":\"-1002640082189\",\"message_thread_id\":24,\"text\":\"" + icon_str + " " + level_str + marker_str + "Message: \n```text\n" + msg + "\n```\", \"parse_mode\":\"Markdown\"}"
|
||||
|
||||
format_telegram_json_dbms:
|
||||
type: remap
|
||||
@ -242,7 +242,7 @@ transforms:
|
||||
if exists(.marker) {
|
||||
m, err = string(.marker)
|
||||
if err == null && length(m) > 0 {
|
||||
marker_str = "Marker: ```text\n" + m + "```"
|
||||
marker_str = "Marker: \n```text\n" + m + "\n```\n"
|
||||
}
|
||||
}
|
||||
level_str = ""
|
||||
@ -250,7 +250,7 @@ transforms:
|
||||
if exists(.level) {
|
||||
m, err = string(.level)
|
||||
if err == null {
|
||||
level_str = "level: ```text\n" + m + "```"
|
||||
level_str = "level: \n```text\n" + m + "\n```\n"
|
||||
}
|
||||
if m == "ERROR" {
|
||||
icon_str = "‼"
|
||||
@ -259,7 +259,7 @@ transforms:
|
||||
icon_str = "⚠️"
|
||||
}
|
||||
}
|
||||
.message = "{\"chat_id\":\"-1002640082189\",\"message_thread_id\":9,\"text\":\"" + icon_str + " " + level_str + marker_str + "Message: ```text\n" + msg + "```\", \"parse_mode\":\"Markdown\"}"
|
||||
.message = "{\"chat_id\":\"-1002640082189\",\"message_thread_id\":9,\"text\":\"" + icon_str + " " + level_str + marker_str + "Message: \n```text\n" + msg + "\n```\", \"parse_mode\":\"Markdown\"}"
|
||||
|
||||
format_telegram_json_jwt:
|
||||
type: remap
|
||||
@ -274,7 +274,7 @@ transforms:
|
||||
if exists(.marker) {
|
||||
m, err = string(.marker)
|
||||
if err == null && length(m) > 0 {
|
||||
marker_str = "Marker: ```text\n" + m + "```"
|
||||
marker_str = "Marker: \n```text\n" + m + "\n```\n"
|
||||
}
|
||||
}
|
||||
level_str = ""
|
||||
@ -282,7 +282,7 @@ transforms:
|
||||
if exists(.level) {
|
||||
m, err = string(.level)
|
||||
if err == null {
|
||||
level_str = "level: ```text\n" + m + "```"
|
||||
level_str = "level: \n```text\n" + m + "\n```\n"
|
||||
}
|
||||
if m == "ERROR" {
|
||||
icon_str = "‼"
|
||||
@ -291,7 +291,7 @@ transforms:
|
||||
icon_str = "⚠️"
|
||||
}
|
||||
}
|
||||
.message = "{\"chat_id\":\"-1002640082189\",\"message_thread_id\":4,\"text\":\"" + icon_str + " " + level_str + marker_str + "Message: ```text\n" + msg + "```\", \"parse_mode\":\"Markdown\"}"
|
||||
.message = "{\"chat_id\":\"-1002640082189\",\"message_thread_id\":4,\"text\":\"" + icon_str + " " + level_str + marker_str + "Message: \n```text\n" + msg + "\n```\", \"parse_mode\":\"Markdown\"}"
|
||||
|
||||
|
||||
sinks:
|
||||
|
||||
@ -209,6 +209,7 @@ backend 'transit_monitoring_kz' has no server available!
|
||||
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d stations.istt.kz --email irigm@mail.ru --agree-tos --non-interactive
|
||||
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d uspdmanager.istt.kz --email irigm@mail.ru --agree-tos --non-interactive
|
||||
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d tourist.istt.kz --email irigm@mail.ru --agree-tos --non-interactive
|
||||
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d project.istt.kz --email irigm@mail.ru --agree-tos --non-interactive
|
||||
|
||||
certbot certonly --rsa-key-size 2048 --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d monitoring.infracos.kz --email irigm@mail.ru --agree-tos --non-interactive
|
||||
|
||||
|
||||
Reference in New Issue
Block a user