bolt Valebyte VPS від $4/міс — NVMe, запуск за 60 секунд.

Отримати VPS arrow_forward
eco Початковий Туторіал

Встановлення Keycloak на VPS

calendar_month Jul 10, 2026 schedule 19 хв. читання visibility 16 переглядів
Установка Keycloak на VPS: Полный гайд по настройке SSO и IAM
info

Потрібен сервер для цього гайду? Ми пропонуємо виділені сервери та VPS у 50+ країнах з миттєвим налаштуванням.

Потрібен сервер для цього гайду?

Розгорніть VPS або виділений сервер за хвилини.

Встановлення Keycloak на VPS: Повний гайд з налаштування SSO та IAM

TL;DR

У цьому докладному гайді ми крок за кроком налаштуємо Keycloak на вашому VPS, перетворивши його на потужний центр управління ідентифікацією та доступом (IAM) з функцією єдиного входу (SSO). Ви навчитеся встановлювати всі необхідні компоненти, конфігурувати Keycloak для роботи з PostgreSQL та HTTPS через Caddy, а також забезпечувати його безпеку та відмовостійкість. Це дозволить централізувати автентифікацію для ваших застосунків, підвищити безпеку та спростити управління користувачами.

  • Встановлення та налаштування Keycloak 25.0.0 з PostgreSQL 17.
  • Використання Docker Compose для зручного розгортання.
  • Автоматичне отримання та поновлення TLS-сертифікатів за допомогою Caddy.
  • Базовий захист сервера (SSH, Firewall, Fail2ban).
  • Налаштування автоматичних бекапів бази даних та конфігурації.
  • Рекомендації щодо вибору VPS-конфігурації та масштабування.

Що ми налаштовуємо і навіщо

Схема: Що ми налаштовуємо і навіщо
Схема: Що ми налаштовуємо і навіщо

У сучасному світі, де кожен застосунок вимагає автентифікації, управління обліковими записами може стати справжнім головним болем. Keycloak вирішує цю проблему, надаючи потужну платформу для управління ідентифікацією та доступом (IAM) з підтримкою єдиного входу (SSO).

Keycloak — це open-source рішення, яке дозволяє централізовано управляти користувачами, ролями, групами та надавати їм доступ до ваших застосунків. Він підтримує стандартні протоколи, такі як OpenID Connect, OAuth 2.0 та SAML 2.0, що робить його сумісним практично з будь-яким сучасним веб-застосунком або сервісом. За допомогою Keycloak ви можете:

  • Реалізувати єдиний вхід (SSO): Користувачам достатньо один раз авторизуватися, щоб отримати доступ до всіх підключених застосунків без повторного введення облікових даних.
  • Керувати користувачами та ролями: Централізоване створення, редагування та видалення користувачів, призначення їм ролей та груп.
  • Використовувати соціальну авторизацію: Легко інтегрувати вхід через Google, GitHub, Facebook та інші популярні провайдери.
  • Застосовувати багатофакторну автентифікацію (MFA): Підвищити безпеку облікових записів.
  • Налаштовувати федерацію ідентифікації: Підключати зовнішні провайдери, такі як LDAP або Active Directory.

У підсумку, читач отримає повністю налаштований і готовий до роботи сервер Keycloak, який слугуватиме центральною точкою автентифікації для його проєктів. Це значно спростить розробку нових застосунків, підвищить безпеку та покращить користувацький досвід.

Альтернативи: Cloud-managed vs Self-hosted

Існують комерційні хмарні сервіси IAM/SSO, такі як Auth0, Okta, Amazon Cognito, Google Identity Platform. Вони пропонують зручність "під ключ", зняття тягаря обслуговування та масштабування. Однак у них є свої недоліки:

  • Вартість: Зі зростанням кількості користувачів або функцій витрати можуть швидко стати значними.
  • Контроль даних: Ваші дані автентифікації зберігаються у стороннього провайдера, що може бути неприйнятним з міркувань безпеки, конфіденційності або регуляторних вимог.
  • Гнучкість: Хоча хмарні сервіси гнучкі, вони все ж мають обмеження щодо кастомізації та інтеграції, які можуть бути притаманні open-source рішенню.

Self-hosted Keycloak на VPS пропонує повний контроль над вашою системою автентифікації. Це ідеальний вибір для розробників, solo-фаундерів SaaS, компаній, яким потрібен високий ступінь кастомізації, або тих, хто хоче мінімізувати експлуатаційні витрати в довгостроковій перспективі. Ви керуєте всіма аспектами безпеки, продуктивності та даних, що дає максимальну свободу та незалежність.

Який VPS-конфіг потрібен для цього завдання

Схема: Який VPS-конфіг потрібен для цього завдання
Схема: Який VPS-конфіг потрібен для цього завдання

Keycloak, будучи Java-застосунком, вимагає достатніх ресурсів, особливо оперативної пам'яті. Вибір оптимального VPS-конфігу залежить від передбачуваного навантаження: кількості користувачів, частоти автентифікацій та кількості підключених застосунків.

Мінімальні вимоги для невеликої інсталяції (до 500 активних користувачів)

  • CPU: 2 vCPU (віртуальних ядра). Цього буде достатньо для обробки більшості запитів.
  • RAM: 4 GB. Keycloak сам по собі може споживати 1.5-2 GB RAM, плюс PostgreSQL та операційна система.
  • Диск: 50 GB SSD. SSD критично важливий для продуктивності бази даних та швидкого завантаження Keycloak. 50 GB вистачить для ОС, Keycloak та помірного обсягу даних БД.
  • Мережа: 100 Mbps. Для більшості завдань цього більш ніж достатньо.

Рекомендований VPS-план для середнього проєкту (до 5000 активних користувачів)

Для більш серйозних навантажень або якщо ви плануєте активно використовувати Keycloak з кількома застосунками та великою кількістю користувачів, рекомендується розглянути наступний конфіг:

  • CPU: 4 vCPU. Забезпечить кращу чутливість при пікових навантаженнях.
  • RAM: 8 GB. Дозволить Keycloak та PostgreSQL більш ефективно кешувати дані та обробляти більше одночасних запитів.
  • Диск: 100-200 GB SSD. Більший обсяг диска забезпечить простір для логів, бекапів та зростання бази даних.
  • Мережа: 1 Gbps. Для високонавантажених застосунків.

Для оренди VPS із зазначеними характеристиками можна взяти VPS з 4 vCPU, 8 GB RAM та 100 GB SSD.

Коли потрібен dedicated сервер, а не VPS

Dedicated сервер стає необхідним, коли:

  • Дуже високе навантаження: Тисячі одночасних запитів, десятки тисяч активних користувачів.
  • Вимоги до продуктивності: Потрібна гарантована продуктивність без "сусідства" з іншими користувачами на одному фізичному сервері.
  • Специфічні апаратні вимоги: Наприклад, апаратні модулі безпеки (HSM) або дуже великий обсяг RAM/диска.
  • Суворі норми відповідності: Деякі регуляторні вимоги можуть передбачати використання фізично ізольованого обладнання.

Для таких випадків, коли потрібна максимальна продуктивність та ізоляція, можна розглянути відповідний dedicated сервер.

Локація: на що впливає

Вибір локації VPS важливий з кількох причин:

  • Затримка (Latency): Чим ближче сервер до ваших користувачів та застосунків, тим менша затримка. Це критично для інтерактивних сервісів.
  • Законодавство про дані: Залежно від того, де знаходяться ваші користувачі та де ви ведете бізнес, можуть діяти різні закони про зберігання та обробку персональних даних (наприклад, GDPR у Європі). Вибір локації сервера, що відповідає цим законам, є обов'язковим.
  • Доступність: Розміщення серверів у різних географічних точках може підвищити відмовостійкість вашої інфраструктури.

Завжди вибирайте локацію, яка знаходиться максимально близько до основної аудиторії ваших застосунків.

Підготовка сервера

Схема: Підготовка сервера
Схема: Підготовка сервера

Перед встановленням Keycloak необхідно виконати базове налаштування нового VPS для забезпечення безпеки та стабільності. Ми будемо використовувати Ubuntu Server 24.04 LTS як операційну систему.

1. Оновлення системи

Насамперед оновіть усі пакети до актуальних версій.


sudo apt update && sudo apt upgrade -y

Ця команда оновлює список доступних пакетів і потім оновлює встановлені пакети до останніх версій.

2. Створення нового користувача та налаштування SSH-доступу

Для підвищення безпеки не рекомендується працювати під обліковим записом root. Створимо нового користувача та надамо йому права sudo.


# Створюємо нового користувача (замініть 'youruser' на бажане ім'я)
sudo adduser youruser
# Додаємо користувача до групи sudo
sudo usermod -aG sudo youruser

Тепер скопіюйте ваш публічний SSH-ключ для нового користувача. З локальної машини:


ssh-copy-id youruser@your_vps_ip

Після цього вийдіть з root-сесії та увійдіть під новим користувачем.


exit
ssh youruser@your_vps_ip

3. Налаштування SSH-сервера

Вимкніть вхід за паролем та вхід для root-користувача, залишивши лише автентифікацію за ключем.


sudo nano /etc/ssh/sshd_config

Знайдіть та змініть наступні рядки:


# Заборонити вхід для root-користувача
PermitRootLogin no
# Заборонити вхід за паролем
PasswordAuthentication no
# Дозволити лише автентифікацію за ключем
PubkeyAuthentication yes

Збережіть зміни (Ctrl+O, Enter) та вийдіть (Ctrl+X). Перезапустіть SSH-сервер:


sudo systemctl restart sshd

Важливо: Переконайтеся, що ви можете увійти під новим користувачем з SSH-ключем, перш ніж закривати поточну сесію!

4. Налаштування файрволу (UFW)

Uncomplicated Firewall (UFW) — це простий у використанні інтерфейс для iptables. Налаштуємо його, щоб дозволити лише необхідні порти.


# Дозволяємо SSH (порт 22, якщо ви його не змінювали)
sudo ufw allow OpenSSH
# Дозволяємо HTTP (порт 80)
sudo ufw allow http
# Дозволяємо HTTPS (порт 443)
sudo ufw allow https
# Вмикаємо файрвол
sudo ufw enable
# Перевіряємо статус файрволу
sudo ufw status

Вивід sudo ufw status має показати, що SSH, HTTP та HTTPS дозволені.

5. Встановлення Fail2ban

Fail2ban сканує логи та блокує IP-адреси, що показують ознаки шкідливої активності (наприклад, багаторазові невдалі спроби входу через SSH).


# Встановлюємо Fail2ban
sudo apt install fail2ban -y
# Копіюємо файл конфігурації за замовчуванням
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# Запускаємо та вмикаємо Fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# Перевіряємо статус
sudo systemctl status fail2ban

Fail2ban за замовчуванням захищає SSH. Ви можете налаштувати його для захисту інших сервісів, відредагувавши /etc/fail2ban/jail.local.

6. Встановлення базових утиліт

Встановимо кілька корисних утиліт, які знадобляться в процесі налаштування та моніторингу.


sudo apt install curl wget git htop net-tools -y

Тепер ваш сервер готовий до встановлення основного ПЗ.

Встановлення ПЗ — покроково

Схема: Встановлення ПЗ — покроково
Схема: Встановлення ПЗ — покроково

Для зручності розгортання та керування ми будемо використовувати Docker та Docker Compose. Це дозволить ізолювати Keycloak та PostgreSQL, спростити їх оновлення та конфігурацію. Усі версії актуальні для 2026 року.

1. Встановлення Docker

Встановимо Docker Engine на Ubuntu.


# Удаляем старые версии Docker, если есть
for pkg in docker.io docker-doc docker-compose docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin; do sudo apt remove $pkg; done

# Устанавливаем необходимые пакеты
sudo apt install ca-certificates curl gnupg lsb-release -y

# Добавляем официальный GPG ключ Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Добавляем репозиторий Docker в APT
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Обновляем список пакетов и устанавливаем Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

# Добавляем текущего пользователя в группу docker для работы без sudo
sudo usermod -aG docker youruser

Вийдіть з поточної SSH-сесії та увійдіть заново, щоб зміни в групах набули чинності. Перевірте встановлення Docker:


docker run hello-world

Якщо ви бачите вітальне повідомлення від Docker, встановлення пройшло успішно.

2. Встановлення Caddy (зворотний проксі та TLS)

Caddy — це потужний, простий у налаштуванні веб-сервер, який автоматично отримує та поновлює TLS-сертифікати з Let's Encrypt. Це значно спрощує налаштування HTTPS.


# Устанавливаем необходимые пакеты
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https

# Добавляем официальный GPG ключ Caddy
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg

# Добавляем репозиторий Caddy в APT
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list

# Обновляем список пакетов и устанавливаем Caddy
sudo apt update
sudo apt install caddy -y

# Проверяем статус Caddy
sudo systemctl status caddy

Caddy буде встановлено як системна служба, але ми поки не будемо його налаштовувати, це буде зроблено пізніше.

3. Створення Docker Compose файлу для Keycloak та PostgreSQL

Створимо директорію для проєкту Keycloak та файл docker-compose.yml.


mkdir keycloak-sso
cd keycloak-sso
nano docker-compose.yml

Вставте наступний вміст. Використовуємо Keycloak 25.0.0 та PostgreSQL 17.


version: '3.8'

services:
  keycloak:
    image: quay.io/keycloak/keycloak:25.0.0 # Актуальна версія Keycloak
    container_name: keycloak
    environment:
      KEYCLOAK_ADMIN: admin # Ім'я адміністратора Keycloak
      KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_ADMIN_PASSWORD} # Пароль адміністратора (буде взято з .env)
      KC_DB: postgres # Використовуємо PostgreSQL
      KC_DB_URL: jdbc:postgresql://db:5432/keycloak # URL бази даних
      KC_DB_USERNAME: keycloak # Користувач БД
      KC_DB_PASSWORD: ${KEYCLOAK_DB_PASSWORD} # Пароль БД (буде взято з .env)
      KC_HOSTNAME: ${KEYCLOAK_HOSTNAME} # Доменне ім'я Keycloak (буде взято з .env)
      KC_PROXY: edge # Важливо для роботи через зворотний проксі
      KC_HTTP_ENABLED: 'true' # Keycloak буде слухати HTTP для проксі
      KC_HTTP_PORT: 8080 # Порт, на якому Keycloak слухає HTTP
      KC_HEALTH_ENABLED: 'true' # Вмикаємо Health Check
      KC_METRICS_ENABLED: 'true' # Вмикаємо метрики
      JAVA_OPTS_APPEND: -Dquarkus.log.level=INFO -Dquarkus.log.category."org.keycloak".level=INFO # Налаштування логування
    ports:
      - "8080:8080" # Внутрішній порт Keycloak, проксується Caddy
    volumes:
      - ./keycloak-data:/opt/keycloak/data # Персистентне зберігання даних Keycloak
    command: start --optimized --hostname-strict=false # Запуск Keycloak в оптимізованому режимі
    depends_on:
      db:
        condition: service_healthy
    restart: always

  db:
    image: postgres:17-alpine # Актуальна версія PostgreSQL
    container_name: keycloak-db
    environment:
      POSTGRES_DB: keycloak # Ім'я бази даних
      POSTGRES_USER: keycloak # Користувач бази даних
      POSTGRES_PASSWORD: ${KEYCLOAK_DB_PASSWORD} # Пароль бази даних (буде взято з .env)
    volumes:
      - ./postgres-data:/var/lib/postgresql/data # Персистентне зберігання даних БД
    healthcheck: # Перевірка працездатності БД
      test: ["CMD-SHELL", "pg_isready -U keycloak"]
      interval: 5s
      timeout: 5s
      retries: 5
    restart: always

Збережіть файл (Ctrl+O, Enter) та вийдіть (Ctrl+X).

4. Створення файлу .env

Для зберігання секретних даних та доменного імені створимо файл .env.


nano .env

Вставте наступний вміст, замінивши заповнювачі на ваші реальні значення:


KEYCLOAK_ADMIN_PASSWORD=YourStrongAdminPassword123! # Змініть на складний пароль
KEYCLOAK_DB_PASSWORD=YourStrongDBPassword456! # Змініть на складний пароль для БД
KEYCLOAK_HOSTNAME=auth.yourdomain.com # Замініть на ваш домен для Keycloak (наприклад, keycloak.example.com)

Важливо: Переконайтеся, що ви використовуєте дуже надійні паролі і що доменне ім'я auth.yourdomain.com (або будь-яке інше, яке ви обрали) вже вказує на IP-адресу вашого VPS у DNS-записах.

5. Запуск Keycloak та PostgreSQL

Тепер можна запустити контейнери за допомогою Docker Compose.


docker compose up -d

Ця команда запустить Keycloak та PostgreSQL у фоновому режимі. Docker Compose спочатку створить мережі та томи, потім запустить контейнер PostgreSQL, дочекається його готовності (healthcheck), а потім запустить Keycloak.

Перевірте статус контейнерів:


docker compose ps

Обидва контейнери повинні бути в стані "running".

Конфігурація

Схема: Конфігурація
Схема: Конфігурація

Після запуску контейнерів Keycloak та PostgreSQL, необхідно налаштувати зворотний проксі Caddy для забезпечення HTTPS та коректної роботи Keycloak із зовнішнім доступом.

1. Налаштування Caddy для Keycloak

Відредагуйте конфігураційний файл Caddy. За замовчуванням він знаходиться в /etc/caddy/Caddyfile.


sudo nano /etc/caddy/Caddyfile

Видаліть весь вміст за замовчуванням і вставте наступне. Замініть auth.yourdomain.com на ваш домен Keycloak.


auth.yourdomain.com {
    # Увімкнути автоматичний HTTPS з Let's Encrypt
    tls {
        dns cloudflare {env.CLOUDFLARE_API_TOKEN} # Якщо ви використовуєте Cloudflare для DNS, вкажіть токен API
        # Якщо не використовуєте Cloudflare DNS, просто залиште tls
    }

    # Налаштування для проксування запитів до Keycloak
    reverse_proxy keycloak:8080 {
        # Передаємо важливі заголовки для коректної роботи Keycloak за проксі
        header_up Host {host}
        header_up X-Real-IP {remote_ip}
        header_up X-Forwarded-For {remote_ip}
        header_up X-Forwarded-Proto {scheme}
        header_up X-Forwarded-Host {host}
    }

    # Налаштування для безпеки
    header {
        Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
        X-Frame-Options "DENY"
        X-Content-Type-Options "nosniff"
        Referrer-Policy "strict-origin-when-cross-origin"
        # Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';" # Налаштуйте за необхідності
    }

    # Логування
    log {
        output file /var/log/caddy/keycloak_access.log
        format json
    }
}

Примітка щодо tls: Якщо ви використовуєте DNS-провайдера, відмінного від Cloudflare, або не хочете використовувати DNS-челендж, ви можете просто залишити рядок tls. Caddy спробує використовувати HTTP-01 челендж, який вимагає, щоб порт 80 був доступний ззовні. Якщо ви використовуєте Cloudflare, як у прикладі, то вам потрібно буде створити файл /etc/caddy/Caddyfile.env:


sudo nano /etc/caddy/Caddyfile.env

І додайте туди ваш Cloudflare API Token:


CLOUDFLARE_API_TOKEN=YOUR_CLOUDFLARE_API_TOKEN

Переконайтеся, що цей токен має права на керування DNS-записами для вашого домену.

Збережіть файл(и). Перевірте конфігурацію Caddy та перезапустіть його:


sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy

Якщо валідація пройшла успішно, Caddy перезапуститься і спробує отримати TLS-сертифікат.

2. Перевірка працездатності

Після всіх налаштувань, необхідно переконатися, що Keycloak запущено та він доступний.

Перевірка контейнерів

Переконайтеся, що обидва контейнери працюють:


docker compose ps

Вивід повинен показати State: Up для обох сервісів.

Перевірка доступності Keycloak через домен

Відкрийте в браузері адресу https://auth.yourdomain.com/admin (замініть на ваш домен). Ви повинні побачити сторінку входу в адміністративну консоль Keycloak.

Введіть логін admin та пароль, який ви вказали у файлі .env (KEYCLOAK_ADMIN_PASSWORD).

Перевірка конфігурації OpenID Connect

Ви можете перевірити, що Keycloak коректно віддає свою конфігурацію OpenID Connect:


curl -k https://auth.yourdomain.com/realms/master/.well-known/openid-configuration

Ви повинні отримати JSON-відповідь з метаданими OpenID Connect для стандартного realm master.

Якщо всі кроки виконано правильно, Keycloak повністю встановлено та сконфігуровано для роботи з HTTPS та базою даних PostgreSQL.

Резервне копіювання та обслуговування

Схема: Резервне копіювання та обслуговування
Схема: Резервне копіювання та обслуговування

Надійне резервне копіювання та регулярне обслуговування є критично важливими для будь-якої production-системи. Keycloak не виняток, особливо тому, що він зберігає всі користувацькі дані та конфігурації автентифікації.

1. Що резервувати

  • База даних PostgreSQL: Це найважливіший компонент, оскільки він містить всю інформацію про користувачів, realm'и, клієнтів, ролі та сесії Keycloak.
  • Конфігурація Keycloak: У нашому випадку з Docker Compose, основні налаштування Keycloak задані у файлах docker-compose.yml та .env. Однак, якщо ви робили будь-які специфічні зміни всередині контейнера (що не рекомендується для Dockerized застосунків), їх також потрібно резервувати. Також корисно зберігати томи keycloak-data та postgres-data.
  • Конфігурація Caddy: Файл /etc/caddy/Caddyfile і, можливо, /etc/caddy/Caddyfile.env.
  • Логи: Для налагодження та аудиту. Хоча вони не критичні для відновлення, вони корисні.

2. Простий скрипт авторезервування

Створимо простий bash-скрипт, який виконуватиме дамп бази даних та архівуватиме важливі файли.

Створіть директорію для резервних копій та сам скрипт:


sudo mkdir -p /var/backups/keycloak
sudo nano /usr/local/bin/keycloak_backup.sh

Вставте наступний вміст. Замініть keycloak-sso на ім'я вашої директорії з файлами Docker Compose, якщо воно відрізняється.


#!/bin/bash

# Шлях до директорії з файлами Docker Compose
DOCKER_COMPOSE_DIR="/home/youruser/keycloak-sso" # Вкажіть повний шлях до вашої директорії keycloak-sso
# Директорія для зберігання резервних копій
BACKUP_DIR="/var/backups/keycloak"
# Ім'я файлу .env
ENV_FILE="${DOCKER_COMPOSE_DIR}/.env"

# Завантажуємо змінні оточення з .env
if [ -f "$ENV_FILE" ]; then
    export $(grep -v '^#' "$ENV_FILE" | xargs)
else
    echo "Помилка: Файл .env не знайдено за шляхом $ENV_FILE"
    exit 1
fi

DATE=$(date +%Y%m%d%H%M%S)
BACKUP_FILENAME="${BACKUP_DIR}/keycloak_backup_${DATE}.tar.gz"
DB_DUMP_FILE="${BACKUP_DIR}/keycloak_db_dump_${DATE}.sql"

echo "Починаємо резервне копіювання Keycloak..."

# 1. Резервне копіювання бази даних PostgreSQL
echo "Створення дампу бази даних PostgreSQL..."
docker compose -f "${DOCKER_COMPOSE_DIR}/docker-compose.yml" exec -T db pg_dump -U keycloak -d keycloak > "$DB_DUMP_FILE"
if [ $? -eq 0 ]; then
    echo "Дамп БД успішно створено: $DB_DUMP_FILE"
else
    echo "Помилка при створенні дампу БД."
    exit 1
fi

# 2. Архівування важливих файлів та даних
echo "Архівування конфігураційних файлів та даних..."
tar -czf "$BACKUP_FILENAME" \
    --absolute-names \
    "${DOCKER_COMPOSE_DIR}/docker-compose.yml" \
    "${DOCKER_COMPOSE_DIR}/.env" \
    "$DB_DUMP_FILE" \
    "/etc/caddy/Caddyfile" \
    "/etc/caddy/Caddyfile.env" \
    "${DOCKER_COMPOSE_DIR}/keycloak-data" \
    "${DOCKER_COMPOSE_DIR}/postgres-data" # Додаємо персистентні томи

if [ $? -eq 0 ]; then
    echo "Архів резервної копії успішно створено: $BACKUP_FILENAME"
else
    echo "Помилка при створенні архіву резервної копії."
    exit 1
fi

# 3. Видалення тимчасового дампу БД
rm "$DB_DUMP_FILE"

# 4. Видалення старих резервних копій (залишаємо останні 7 днів)
echo "Видалення старих резервних копій (старших за 7 днів)..."
find "$BACKUP_DIR" -type f -name "keycloak_backup_*.tar.gz" -mtime +7 -delete

echo "Резервне копіювання Keycloak завершено."

Зробіть скрипт виконуваним:


sudo chmod +x /usr/local/bin/keycloak_backup.sh

3. Планування резервного копіювання за допомогою Cron

Додамо скрипт до розкладу Cron для щоденного виконання (наприклад, о 3:00 ранку).


sudo crontab -e

Додайте наступну строку в кінець файлу:


0 3 * * * /usr/local/bin/keycloak_backup.sh >> /var/log/keycloak_backup.log 2>&1

Цей рядок запускатиме скрипт щодня о 3:00 ночі, а вивід перенаправлятиметься у файл логів /var/log/keycloak_backup.log.

4. Куди зберігати резервні копії (зовнішнє сховище)

Зберігання резервних копій на тому ж сервері, що й основний сервіс, є ризикованим. У разі виходу з ладу сервера ви втратите і дані, і резервні копії. Рекомендується використовувати зовнішнє сховище:

  • Хмарне сховище об'єктів (S3-сумісне): Amazon S3, DigitalOcean Spaces, Backblaze B2. Це економічне та надійне рішення. Ви можете використовувати утиліти на кшталт s3cmd або rclone для автоматичного завантаження резервних копій.
  • Окремий VPS: Якщо у вас є інший VPS, ви можете налаштувати rsync або scp для копіювання резервних копій на нього.
  • Спеціалізовані рішення: BorgBackup або Restic для дедуплікованих, зашифрованих резервних копій.

Наприклад, для завантаження в S3 за допомогою rclone, ви б додали до скрипта рядок після створення архіву:


# rclone copy "$BACKUP_FILENAME" "remote_s3_storage:keycloak-backups/"

Попередньо налаштувавши rclone з вашими S3-обліковими даними.

5. Оновлення: rolling vs maintenance window

  • Оновлення ОС та Docker: Регулярно оновлюйте операційну систему та Docker. Для Ubuntu це sudo apt update && sudo apt upgrade -y. Робіть це у плановий час, оскільки іноді потрібне перезавантаження сервера.
  • Оновлення Keycloak: Для Keycloak у Docker Compose, це зводиться до зміни версії образу в docker-compose.yml (наприклад, з 25.0.0 на 25.0.1) та подальшого виконання docker compose pull keycloak && docker compose up -d. Перед оновленням завжди читайте примітки до релізу, оскільки можуть бути зміни у конфігурації або міграції БД.
  • Оновлення PostgreSQL: Оновлення мажорних версій PostgreSQL (наприклад, з 16 на 17) вимагає складнішої процедури міграції даних. Це завжди має виконуватися в рамках запланованого "вікна обслуговування" (maintenance window) з попереднім резервним копіюванням. Мінорні оновлення (наприклад, 17.0 на 17.1) зазвичай безпечні та не вимагають міграції.

Для production-систем завжди рекомендується мати тестове середовище, де ви можете спочатку перевірити оновлення, перш ніж застосовувати їх на основному сервері.

Вирішення проблем + FAQ

У цьому розділі ми розглянемо типові проблеми, які можуть виникнути під час встановлення та налаштування Keycloak, а також відповімо на поширені запитання.

Keycloak не запускається / Помилка підключення до БД

Проблема: Контейнер Keycloak постійно перезапускається або видає помилки підключення до бази даних у логах. Що перевірити:

  1. Логи Keycloak: docker compose logs keycloak. Шукайте повідомлення про помилки підключення до PostgreSQL.
  2. Логи PostgreSQL: docker compose logs db. Переконайтеся, що PostgreSQL успішно запущено та він слухає з'єднання.
  3. Змінні оточення: Перевірте правильність KC_DB_URL, KC_DB_USERNAME, KC_DB_PASSWORD у docker-compose.yml та .env. Переконайтеся, що паролі збігаються.
  4. Healthcheck PostgreSQL: Переконайтеся, що healthcheck для контейнера db проходить успішно (docker compose ps). Keycloak не запуститься, доки БД не буде готова.
Як виправити: Виправте одруківки у змінних оточення. Переконайтеся, що PostgreSQL запускається без помилок. Якщо проблема в БД, можливо, потрібно видалити томи даних (sudo rm -rf keycloak-sso/postgres-data) та запустити docker compose up -d заново (це видалить усі дані БД!).

Не можу отримати доступ до адмінки Keycloak через домен

Проблема: При спробі відкрити https://auth.yourdomain.com/admin браузер показує помилку "Connection refused" або "ERR_CONNECTION_CLOSED". Що перевірити:

  1. DNS-запис: Переконайтеся, що ваш домен (наприклад, auth.yourdomain.com) коректно вказує на IP-адресу вашого VPS. Використовуйте dig auth.yourdomain.com.
  2. Файрвол (UFW): Перевірте, що порти 80 і 443 відкриті: sudo ufw status.
  3. Caddy: Перевірте статус Caddy: sudo systemctl status caddy. Переконайтеся, що його запущено і немає помилок у його логах: sudo journalctl -u caddy.
  4. Конфігурація Caddyfile: Перевірте, що домен у Caddyfile збігається з вашим, і що reverse_proxy правильно вказує на контейнер Keycloak (keycloak:8080).
  5. Змінна KC_PROXY: Переконайтеся, що в docker-compose.yml для Keycloak встановлена змінна KC_PROXY: edge.
Як виправити: Виправте DNS, відкрийте порти в UFW, виправте помилки в Caddyfile та перезапустіть Caddy: sudo systemctl reload caddy. Перезапустіть Keycloak, якщо змінювали KC_PROXY.

Проблеми з HTTPS / Caddy не отримує сертифікат

Проблема: Caddy не може отримати TLS-сертифікат від Let's Encrypt, і сайт доступний лише за HTTP (або взагалі недоступний). Що перевірити:

  1. Логи Caddy: sudo journalctl -u caddy --no-pager. Шукайте помилки, пов'язані з tls або Let's Encrypt.
  2. Доступність порту 80/443: Переконайтеся, що жодні інші сервіси не займають порти 80 або 443. (sudo lsof -i :80, sudo lsof -i :443).
  3. DNS-запис: Переконайтеся, що ваш домен правильно вказує на ваш VPS. Let's Encrypt перевіряє володіння доменом.
  4. Конфігурація DNS-челенджу (якщо використовується): Якщо ви використовуєте tls { dns ... }, перевірте, що змінна оточення з API-токеном коректно встановлена і сам токен має потрібні права.
Як виправити: Усуньте конфлікти портів, виправте DNS-запис, перевірте API-токен DNS-провайдера. Перезапустіть Caddy: sudo systemctl reload caddy.

Як скинути пароль адміністратора Keycloak?

Проблема: Ви забули пароль адміністратора Keycloak. Що перевірити: Пароль адміністратора встановлюється змінною KEYCLOAK_ADMIN_PASSWORD у файлі .env. Як виправити:

  1. Відредагуйте файл .env та змініть значення KEYCLOAK_ADMIN_PASSWORD на новий, надійний пароль.
  2. Перезапустіть контейнер Keycloak, щоб зміни набули чинності: docker compose restart keycloak.
  3. Тепер ви зможете увійти до адмін-консолі з новим паролем.

Який VPS-конфіг мінімально підійде?

Мінімально відповідний VPS-конфіг для встановлення Keycloak для невеликого проєкту (до 500 активних користувачів) включає 2 vCPU, 4 GB оперативної пам'яті та 50 GB SSD-диска. Цього має бути достатньо для запуску операційної системи, Keycloak та його бази даних PostgreSQL. Важливо, щоб диск був SSD для забезпечення достатньої продуктивності бази даних. При збільшенні навантаження або кількості користувачів знадобиться масштабування ресурсів.

Що обрати — VPS чи dedicated для цього завдання?

Вибір між VPS та dedicated сервером залежить від масштабу вашого проєкту та вимог до продуктивності. Для більшості стартапів, невеликих та середніх команд, а також індивідуальних проєктів, VPS буде оптимальним вибором. Він економічний, гнучкий та легко масштабується. Dedicated сервер стає кращим для високонавантажених систем з тисячами одночасних користувачів, критично важливою продуктивністю, суворими вимогами до ізоляції ресурсів або специфічними апаратними потребами, які не можуть бути задоволені на віртуальній машині.

Як масштабувати Keycloak?

Проблема: Ваша інсталяція Keycloak відчуває високе навантаження, і продуктивності поточного VPS недостатньо. Що перевірити: Моніторинг CPU, RAM, I/O диска на вашому VPS. Логи Keycloak на предмет затримок або помилок. Як виправити:

  1. Вертикальне масштабування (Scale Up): Збільште ресурси вашого поточного VPS (CPU, RAM, Disk). Це найпростіший перший крок.
  2. Горизонтальне масштабування (Scale Out): Розгорніть кілька екземплярів Keycloak за балансувальником навантаження. Це вимагає налаштування Keycloak у кластерному режимі (із загальною базою даних та кешем).
  3. Оптимізація бази даних: Переконайтеся, що PostgreSQL має достатньо ресурсів та налаштований для оптимальної продуктивності.
  4. Оптимізація Keycloak: Налаштуйте параметри JVM, кешування та логування для кращої продуктивності.

Висновки та наступні кроки

Схема: Висновки та наступні кроки
Схема: Висновки та наступні кроки

Вітаємо! Ви успішно встановили та налаштували Keycloak на своєму VPS, створивши надійну платформу для керування ідентифікацією та доступом із функцією єдиного входу. Тепер у вас є централізоване рішення для автентифікації, яке підвищує безпеку та спрощує керування користувачами для ваших застосунків.

Наступні кроки для подальшого розвитку вашої системи:

  • Інтеграція застосунків: Підключіть ваші вебзастосунки, API або мікросервіси до Keycloak, використовуючи доступні адаптери або стандартні протоколи OpenID Connect/OAuth 2.0.
  • Розширене налаштування: Дослідіть додаткові можливості Keycloak, такі як налаштування тем оформлення, додавання багатофакторної автентифікації (MFA), федерація із зовнішніми провайдерами ідентифікації (LDAP, Active Directory, соціальні мережі).
  • Моніторинг та відмовостійкість: Налаштуйте систему моніторингу (наприклад, Prometheus + Grafana) для відстеження продуктивності Keycloak. Для високонавантажених production-середовищ розгляньте можливість кластеризації Keycloak для забезпечення високої доступності.

Поділитися цим записом:

Встановлення Keycloak на VPS: повний гайд з налаштування SSO та IAM
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.