Встановлення Authentik на VPS: SSO, MFA та централізована автентифікація
TL;DR
У цьому докладному посібнику ми крок за кроком налаштуємо Authentik — потужне Open Source рішення для керування ідентифікацією та доступом (IAM) на вашому власному VPS. Ви отримаєте централізовану систему єдиного входу (SSO) та багатофакторної автентифікації (MFA), готову до інтеграції з вашими веб-додатками, що значно підвищить безпеку та спростить керування користувачами.
- Authentik буде встановлено з використанням Docker Compose для легкого розгортання та керування.
- Як базу даних буде використано зовнішню PostgreSQL 16 для кращої продуктивності та масштабованості.
- Ми налаштуємо Caddy як зворотний проксі-сервер з автоматичним отриманням TLS/HTTPS сертифікатів від Let's Encrypt.
- Будуть розглянуті базові кроки щодо захисту сервера, включаючи фаєрвол та SSH-ключі.
- Ви дізнаєтеся, як налаштувати резервні копії та підтримувати систему в актуальному стані.
Що ми налаштовуємо і навіщо
У сучасному цифровому світі керування обліковими записами користувачів та забезпечення їхнього безпечного доступу до безлічі додатків стало критично важливим завданням. Authentik пропонує елегантне та потужне рішення цієї проблеми, виступаючи в ролі централізованого постачальника ідентифікації.
Authentik — це Open Source платформа для керування ідентифікацією та доступом (Identity and Access Management, IAM), яка дозволяє реалізувати єдиний вхід (Single Sign-On, SSO) та багатофакторну автентифікацію (Multi-Factor Authentication, MFA) для всіх ваших додатків. Замість того, щоб створювати та керувати окремими обліковими записами для кожного сервісу (GitLab, Mattermost, Nextcloud, Grafana тощо), користувачі проходитимуть автентифікацію один раз через Authentik, а потім отримуватимуть безшовний доступ до всіх інтегрованих додатків.
У підсумку, після завершення цього посібника, ви отримаєте повністю налаштовану систему Authentik на вашому VPS, яка слугуватиме центральною точкою автентифікації. Це значно підвищить безпеку за рахунок примусового використання MFA та централізованого керування паролями, а також покращить користувацький досвід, усуваючи необхідність запам'ятовувати безліч логінів та паролів.
Існують різні підходи до вирішення завдань IAM. Серед хмарних керованих сервісів можна виділити Okta, Auth0 або Azure AD, які пропонують високу доступність та мінімальні витрати на адміністрування, але при цьому вимагають щомісячних платежів та передбачають передачу контролю над даними третій стороні. З іншого боку, існують інші самохостингові рішення, такі як Keycloak або FreeIPA, які також надають можливості SSO та MFA, але можуть бути складнішими у розгортанні та налаштуванні порівняно з Authentik, особливо для невеликих та середніх інсталяцій.
Вибір самохостингового рішення на VPS, такого як Authentik, зумовлений кількома ключовими перевагами. По-перше, це повний контроль над вашими даними та інфраструктурою, що особливо важливо для дотримання конфіденційності та регуляторних вимог. По-друге, це значна економія витрат порівняно з хмарними аналогами, особливо в довгостроковій перспективі. І, нарешті, це гнучкість та можливість глибокого налаштування під ваші унікальні потреби, що робить його ідеальним вибором для розробників, соло-фаундерів SaaS-проектів та всіх, хто цінує незалежність та безпеку.
Який VPS-конфіг потрібен для цього завдання
Правильний вибір конфігурації VPS є ключовим для стабільної та продуктивної роботи Authentik. Нижче представлені мінімальні та рекомендовані вимоги, актуальні на 2026 рік, з урахуванням зростання функціональності та оптимізації Authentik.
Мінімальні вимоги (для невеликих команд до 50 користувачів)
- CPU: 2 vCPU (сучасний процесор x86-64, наприклад, Intel Xeon E3/E5 або AMD EPYC).
- RAM: 4 ГБ (цього достатньо для операційної системи, Authentik та PostgreSQL).
- Диск: 80-100 ГБ NVMe SSD. Швидкість дискової підсистеми критична для продуктивності бази даних та загального відгуку системи. NVMe значно перевершує звичайні SATA SSD.
- Мережа: 1 Гбіт/с uplink. Публічна IPv4 адреса обов'язкова для доступу до Authentik з інтернету.
Рекомендований VPS-план (для команд до 200-300 користувачів)
Для більш комфортної роботи, із запасом на масштабування та інтеграцію кількох десятків додатків, рекомендується наступний конфіг:
- CPU: 4 vCPU.
- RAM: 8 ГБ.
- Диск: 160-200 ГБ NVMe SSD.
- Мережа: 1 Гбіт/с uplink, публічна IPv4.
Для оренди VPS із зазначеними характеристиками, ви можете розглянути пропозиції різних провайдерів, які відповідають цим параметрам. Переконайтеся, що обраний тариф включає NVMe SSD та достатній обсяг оперативної пам'яті.
Коли потрібен dedicated, а не VPS
Хоча VPS є чудовим вибором для більшості сценаріїв, є ситуації, коли виділений сервер (dedicated server) буде більш кращим:
- Дуже високе навантаження: Якщо ви очікуєте тисячі активних користувачів, сотні запитів на автентифікацію за секунду або інтеграцію з критично важливими корпоративними системами, dedicated сервер надасть вам усю міць фізичного обладнання без віртуалізації.
- Суворі вимоги до продуктивності: Для додатків, де затримка навіть у мілісекунди критична, dedicated сервер може запропонувати більш передбачувану та стабільну продуктивність.
- Специфічні вимоги до безпеки/комплаєнсу: Деякі регуляторні норми або внутрішні політики компанії можуть вимагати повного контролю над апаратним забезпеченням, що найкраще досягається на dedicated сервері.
- Великі обсяги даних: Якщо Authentik зберігатиме значні обсяги користувацьких даних, логів або інтегруватиметься з дуже великими директоріями, велика дискова підсистема dedicated сервера буде доречною.
Локація VPS: на що впливає
Вибір географічного розташування вашого VPS має кілька важливих аспектів:
- Затримка (Latency): Розміщуйте VPS якомога ближче до основної маси ваших користувачів. Чим менша відстань, тим швидшими будуть відповіді сервера, що критично для інтерактивних веб-додатків та загального користувацького досвіду.
- Законодавство про дані: Якщо ви працюєте з персональними даними, переконайтеся, що локація VPS відповідає вимогам GDPR, HIPAA або іншим місцевим законам про зберігання та обробку даних.
- Доступність мережі: Вибирайте локації з хорошими мережевими зв'язками та пірингом з основними провайдерами, щоб забезпечити стабільний та швидкий доступ.
Підготовка сервера
Перед тим як приступити до встановлення Authentik, необхідно виконати базове налаштування вашого VPS для забезпечення безпеки та стабільності. Ми будемо використовувати Ubuntu Server 24.04 LTS як операційну систему, оскільки вона є однією з найпопулярніших та добре підтримуваних платформ для серверів.
1. Підключення до сервера
Підключіться до вашого VPS по SSH, використовуючи облікові дані, надані провайдером (зазвичай логін root та пароль, або користувач з SSH-ключем).
ssh root@ВАШ_IP_АДРЕС
2. Оновлення системи
Насамперед оновіть усі пакети до актуальних версій. Це забезпечить безпеку та стабільність системи.
sudo apt update && sudo apt upgrade -y
3. Створення нового користувача та налаштування sudo
Робота під користувачем root не рекомендується для повсякденних завдань. Створіть нового користувача з обмеженими правами та додайте його до групи sudo.
# Замініть 'youruser' на бажане ім'я користувача
sudo adduser youruser
sudo usermod -aG sudo youruser
Вийдіть із сесії root та увійдіть під новим користувачем:
exit
ssh youruser@ВАШ_IP_АДРЕС
4. Налаштування SSH-доступу за ключами (рекомендується)
Для підвищення безпеки рекомендується використовувати SSH-ключі замість паролів. Якщо ви вже використовуєте ключі, переконайтеся, що ваш публічний ключ додано до файлу ~/.ssh/authorized_keys нового користувача.
На локальній машині:
# Якщо у вас немає SSH-ключа, згенеруйте його
ssh-keygen -t rsa -b 4096
# Скопіюйте публічний ключ на сервер (замініть youruser та ВАШ_IP_АДРЕС)
ssh-copy-id youruser@ВАШ_IP_АДРЕС
На сервері: вимкніть вхід за паролем та для root-користувача.
sudo nano /etc/ssh/sshd_config
Знайдіть та змініть наступні рядки (або додайте, якщо відсутні):
# Вимкнути вхід для root
PermitRootLogin no
# Вимкнути вхід за паролем (після того, як переконаєтеся, що вхід за ключем працює!)
PasswordAuthentication no
# Переконайтеся, що автентифікація за ключами увімкнена
PubkeyAuthentication yes
Перезапустіть SSH-сервіс:
sudo systemctl restart sshd
5. Встановлення та налаштування Fail2Ban
Fail2Ban допомагає захиститися від атак підбору паролів, блокуючи IP-адреси, з яких відбуваються численні невдалі спроби входу.
sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Створіть файл локальної конфігурації:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
У секції [DEFAULT] можете встановити більш агресивні параметри, наприклад:
bantime = 1h # Час блокування (1 година)
findtime = 10m # Час, за який рахуються спроби (10 хвилин)
maxretry = 3 # Максимальна кількість спроб до блокування
Переконайтеся, що секція [sshd] активна (enabled = true).
sudo systemctl restart fail2ban
6. Налаштування брандмауера (UFW)
UFW (Uncomplicated Firewall) — це зручний інтерфейс для керування iptables. Налаштуємо його, щоб дозволити лише необхідний трафік.
sudo apt install ufw -y
# Заборонити весь вхідний трафік за замовчуванням
sudo ufw default deny incoming
# Дозволити весь вихідний трафік за замовчуванням
sudo ufw default allow outgoing
# Дозволити SSH (за замовчуванням порт 22)
sudo ufw allow ssh
# Дозволити HTTP (порт 80) та HTTPS (порт 443) для веб-сервера
sudo ufw allow http
sudo ufw allow https
# Увімкнути UFW
sudo ufw enable
Підтвердіть дію, ввівши y. Перевірте статус брандмауера:
sudo ufw status verbose
7. Встановлення базових утиліт
Встановіть кілька корисних утиліт, які можуть стати в нагоді в процесі встановлення та налагодження.
sudo apt install curl wget git htop net-tools -y
Тепер ваш сервер підготовлений та захищений для подальшого розгортання Authentik.
Встановлення ПЗ — покроково
Authentik розгортається з використанням Docker Compose, що значно спрощує керування його компонентами. Ми також будемо використовувати зовнішню базу даних PostgreSQL для кращої продуктивності та масштабованості.
1. Встановлення Docker Engine та Docker Compose Plugin (актуально на 2026)
Встановимо Docker Engine та Docker Compose Plugin, які є основою для запуску Authentik.
# 1. Обновление пакетов и установка необходимых зависимостей
sudo apt update && sudo apt install ca-certificates curl gnupg lsb-release -y
# 2. Добавление официального 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
# 3. Добавление репозитория Docker
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
# 4. Обновление индекса пакетов APT и установка Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
# 5. Добавление текущего пользователя в группу docker для выполнения команд без sudo
sudo usermod -aG docker $USER
newgrp docker # Примените изменения группы без перезапуска сессии
# 6. Проверка установки Docker
docker run hello-world
# 7. Проверка установки Docker Compose Plugin
docker compose version
Очікуваний вивід для версії Docker Compose буде приблизно Docker Compose version v2.24.x або вище.
2. Встановлення та налаштування PostgreSQL 16
Authentik використовує базу даних для зберігання своїх даних. Замість використання вбудованої бази даних у Docker-контейнері, ми встановимо PostgreSQL 16 безпосередньо на VPS для кращої продуктивності та керованості.
# 1. Установка PostgreSQL 16
sudo apt install postgresql-16 -y
# 2. Запуск и включение PostgreSQL
sudo systemctl enable postgresql
sudo systemctl start postgresql
# 3. Переключение на пользователя postgres для настройки базы данных
sudo -i -u postgres
# 4. Создание новой базы данных и пользователя для Authentik
psql -c "CREATE DATABASE authentik;"
psql -c "CREATE USER authentik_user WITH PASSWORD 'ВАШ_ОЧЕНЬ_СИЛЬНЫЙ_ПАРОЛЬ_ДЛЯ_БД';"
psql -c "GRANT ALL PRIVILEGES ON DATABASE authentik TO authentik_user;"
# 5. Выход из пользователя postgres
exit
Замініть 'ВАШ_ОЧЕНЬ_СИЛЬНЫЙ_ПАРОЛЬ_ДЛЯ_БД' на складний унікальний пароль. Запишіть його, він знадобиться для конфігурації Authentik.
3. Розгортання Authentik за допомогою Docker Compose
Тепер ми готові розгорнути Authentik, використовуючи його офіційні Docker-образи.
# 1. Создание директории для Authentik и переход в нее
mkdir ~/authentik
cd ~/authentik
# 2. Загрузка файлов docker-compose.yml и .env из официального репозитория Authentik
# Для примера используем актуальную версию на 2024 год, которая будет актуальна и для 2026 с небольшими обновлениями
# Всегда проверяйте актуальный URL на официальном сайте Authentik (goauthentik.io)
wget https://goauthentik.io/docker-compose.yml
wget https://goauthentik.io/docker-compose.env
mv docker-compose.env .env # Переименовываем файл .env
# 3. Генерация уникального секретного ключа для Authentik
# Этот ключ используется для шифрования данных и должен быть надежным.
# Замените его на свой сгенерированный ключ.
AUTHENTIK_SECRET_KEY=$(python3 -c 'import secrets; print(secrets.token_urlsafe(64))')
echo "AUTHENTIK_SECRET_KEY=$AUTHENTIK_SECRET_KEY" >> .env
echo "Секретный ключ Authentik сгенерирован и добавлен в .env"
Важливо: переконайтеся, що ви використовуєте актуальні версії файлів docker-compose.yml та .env з офіційного сайту Authentik. Команди вище використовують загальнодоступні посилання, але у 2026 році можуть бути зміни.
4. Налаштування файлу .env
Відредагуйте файл .env, щоб Authentik міг підключитися до вашої зовнішньої бази даних PostgreSQL та використовувати правильний домен.
nano .env
Знайдіть наступні рядки та змініть їх відповідно до вашої конфігурації:
AUTHENTIK_HOST=https://your.domain.com/: Замінітьyour.domain.comна ваше реальне доменне ім'я, через яке буде доступний Authentik.AUTHENTIK_POSTGRESQL__HOST=localhost: Вказуємо, що PostgreSQL знаходиться на тому ж сервері.AUTHENTIK_POSTGRESQL__NAME=authentik: Ім'я бази даних, яку ми створили.AUTHENTIK_POSTGRESQL__USER=authentik_user: Ім'я користувача бази даних.AUTHENTIK_POSTGRESQL__PASSWORD=ВАШ_ОЧЕНЬ_СИЛЬНЫЙ_ПАРОЛЬ_ДЛЯ_БД: Пароль користувача бази даних.AUTHENTIK_REDIS__HOST=redis: Залиште як є, якщо використовуєте внутрішній Redis від Docker Compose.
Приклад відредагованих рядків у .env:
AUTHENTIK_HOST=https://auth.example.com/ # Ваше доменне ім'я
AUTHENTIK_SECRET_KEY=ВАШ_СГЕНЕРИРОВАННЫЙ_КЛЮЧ # Він вже має бути там
AUTHENTIK_POSTGRESQL__HOST=localhost
AUTHENTIK_POSTGRESQL__NAME=authentik
AUTHENTIK_POSTGRESQL__USER=authentik_user
AUTHENTIK_POSTGRESQL__PASSWORD=ВАШ_ОЧЕНЬ_СИЛЬНЫЙ_ПАРОЛЬ_ДЛЯ_БД
AUTHENTIK_REDIS__HOST=redis
Збережіть зміни (Ctrl+O, Enter, Ctrl+X).
5. Запуск Authentik
Тепер, коли все налаштовано, запустіть Authentik за допомогою Docker Compose.
# Загрузка образов Docker
docker compose pull
# Запуск контейнеров Authentik в фоновом режиме
docker compose up -d
Перевірте статус запущених контейнерів:
docker compose ps
Ви маєте побачити контейнери authentik_server, authentik_worker та redis у статусі running.
6. Створення суперкористувача Authentik
Для першого входу в Authentik необхідно створити обліковий запис суперкористувача.
docker compose exec authentik sh -c "python3 manage.py createsuperuser"
Дотримуйтесь інструкцій у терміналі, щоб створити користувача admin (або будь-яке інше ім'я) та встановити для нього надійний пароль. Запишіть ці облікові дані.
На цьому кроці Authentik встановлено та запущено. Далі ми налаштуємо доступ до нього через веб-інтерфейс з використанням зворотного проксі та HTTPS.