diff --git a/Keycloak_install.md b/Keycloak_install.md index e69de29..814f9ee 100644 --- a/Keycloak_install.md +++ b/Keycloak_install.md @@ -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 + + 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-токены для аутентификации и авторизации. Если нужны дополнительные детали или помощь с конкретным сценарием, дайте знать! \ No newline at end of file diff --git a/Logs/Vector_dev_install_telegram.md b/Logs/Vector_dev_install_telegram.md index fe6718e..ec544ab 100644 --- a/Logs/Vector_dev_install_telegram.md +++ b/Logs/Vector_dev_install_telegram.md @@ -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: diff --git a/Proxy/HAProxy_install.md b/Proxy/HAProxy_install.md index 57f2db6..9d971c2 100644 --- a/Proxy/HAProxy_install.md +++ b/Proxy/HAProxy_install.md @@ -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