Пошаговая инструкция · Самостоятельная установка
Как установить authentik на Ubuntu и подключить первое приложение
Пошаговая инструкция для самостоятельной установки. Развернём authentik за HTTPS, создадим администратора и подключим пробное приложение по OpenID Connect. Покажем, как закрыть административный доступ и сохранить данные для восстановления входа.
Что подготовить и как читать инструкцию #
Установка состоит из PostgreSQL, сервера authentik и фонового worker. Сервер обслуживает страницы входа и протоколы авторизации, worker выполняет фоновые операции. В выбранной версии официальный небольшой Compose использует PostgreSQL без отдельного Redis, поэтому старые руководства с другим набором компонентов не стоит смешивать с этим примером.
Потребуется чистая Ubuntu 26.04 LTS, SSH-доступ и домен login.example.com. Выполните общую подготовку Ubuntu с Docker Engine, Compose v2 и Nginx на хосте. Для выбранного контейнерного метода не устанавливайте Python и зависимости authentik через apt. Реальное испытание приложения на этой ОС в рамках подготовки статьи не проводилось.
Команды выполняйте в терминале сервера после подключения по SSH, если шаг не указывает другое место. sudo даёт команде права администратора. Действия в браузере выполняйте на своём компьютере. Домены, IP-адреса и значения ВАШ_ПАРОЛЬ из примеров заменяйте своими до выполнения команды.
Двигайтесь по одному шагу и проверяйте результат перед следующим. Блок с <<EOF или другим именем завершения копируйте целиком: он записывает содержимое одного файла. При работе в nano сохраняйте файл клавишами Ctrl+O, Enter и выходите Ctrl+X. Если прервали SSH-сеанс, снова перейдите в указанный каталог; переменные предыдущего сеанса потребуется задать заново.
Настройка внешнего доступа использует обратный прокси Nginx и Certbot для Nginx. Приложение остаётся доступным на локальном порту; снаружи открыт его HTTPS-домен.
Требования к заголовкам и WebSocket описаны в официальной настройке прокси authentik. Nginx перезаписывает клиентские заголовки; контейнерный порт опубликован только локально.
Шаг 1. Подготовьте каталог authentik #
В отдельном каталоге будут настройки и постоянные данные. После перехода все команды docker compose выполняйте отсюда.
mkdir -p ~/services/authentik/{data,certs,custom-templates}
cd ~/services/authentikТекущий каталог — ~/services/authentik.
Шаг 2. Создайте пароль базы и ключ приложения #
Команда создаёт .env с двумя разными случайными значениями. PG_PASS защищает PostgreSQL, AUTHENTIK_SECRET_KEY связан с работой самого authentik. Запускайте генерацию только для новой установки.
umask 077
printf 'PG_PASS=%s
AUTHENTIK_SECRET_KEY=%s
' "$(openssl rand -hex 24)" "$(openssl rand -hex 48)" > .envВ .env заполнены оба значения. Сохраните их в закрытой копии, не заменяйте при обычном перезапуске.
Шаг 3. Сохраните описание сервисов #
Откройте nano compose.yaml и вставьте YAML ниже. PostgreSQL хранит пользователей и настройки; server обслуживает вход, worker выполняет фоновые задачи. Общие параметры через YAML-якорь передаются обоим компонентам. Порт 9000 доступен только с сервера.
x-authentik-env: &authentik-env
AUTHENTIK_POSTGRESQL__HOST: postgresql
AUTHENTIK_POSTGRESQL__NAME: authentik
AUTHENTIK_POSTGRESQL__USER: authentik
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS:?set database password}
AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY:?set application secret}
services:
postgresql:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: authentik
POSTGRES_USER: authentik
POSTGRES_PASSWORD: ${PG_PASS}
volumes:
- database:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U authentik -d authentik']
interval: 10s
timeout: 5s
retries: 10
server:
image: ghcr.io/goauthentik/server:2026.8.3
command: server
restart: unless-stopped
env_file: .env
environment: *authentik-env
shm_size: 512mb
ports:
- '127.0.0.1:9000:9000'
volumes:
- ./data:/data
- ./custom-templates:/templates
depends_on:
postgresql:
condition: service_healthy
worker:
image: ghcr.io/goauthentik/server:2026.8.3
command: worker
restart: unless-stopped
user: root
env_file: .env
environment: *authentik-env
shm_size: 512mb
volumes:
- ./data:/data
- ./certs:/certs
- ./custom-templates:/templates
depends_on:
postgresql:
condition: service_healthy
volumes:
database:Сохранены согласованные версии server и worker; пароль берётся из .env.
Шаг 4. Проверьте конфигурацию #
Compose прочитает YAML и переменные. Это помогает найти отступы и пустой пароль до запуска.
docker compose config --quietconfig --quiet завершился без вывода и ошибки.
Шаг 5. Загрузите образы #
pull скачивает готовые сервисы выбранной версии. Скорость зависит от соединения сервера с реестром.
docker compose pullВсе образы загружены без ошибки авторизации или соединения.
Шаг 6. Запустите authentik #
up -d запускает сервисы в фоне. При первом старте PostgreSQL создаёт базу, а приложение подготавливает таблицы.
docker compose up -dКоманда завершилась успешно; контейнеры созданы.
Шаг 7. Дождитесь готовности приложения #
Проверьте состояние и журнал server/worker, затем локальный HTTP-ответ. Перенаправление на экран входа — нормальный ответ.
docker compose ps
docker compose logs --tail=100 server worker
curl -I http://127.0.0.1:9000/Server и worker не перезапускаются; локальный адрес отвечает. При ошибке базы проверьте PG_PASS, а не отключайте проверку пароля.
Шаг 8. Ограничьте первый вход #
В firewall провайдера временно разрешите TCP 443 только своему административному IP. TCP 80 оставьте доступным для выпуска сертификата. Так первоначальную настройку не завершит случайный посетитель.
Настройку открывает ваш компьютер; посторонний адрес не имеет доступа к HTTPS.
Шаг 9. Сохраните сайт Nginx #
Установите Nginx и Certbot по подготовке Ubuntu, если ещё не установили. Откройте sudo nano /etc/nginx/sites-available/authentik и вставьте файл ниже. Замените все домены своими. Nginx передаёт приложению домен, адрес клиента и протокол; Upgrade и Connection сохраняют WebSocket. До получения сертификата условие $scheme блокирует обычные HTTP-запросы кодом 403, чтобы вход не происходил без шифрования.
/etc/nginx/sites-available/authentikmap $http_upgrade $authentik_connection_upgrade {
default upgrade;
"" close;
}
server {
listen 80;
server_name login.example.com;
client_max_body_size 100m;
location / {
if ($scheme = http) { return 403; }
proxy_pass http://127.0.0.1:9000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $authentik_connection_upgrade;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
proxy_buffering off;
}
}
Сохраните Ctrl+O, Enter, Ctrl+X. В файле пока нет путей к сертификатам: Nginx сможет проверить его до выпуска HTTPS.
Шаг 10. Подключите сайт и проверьте HTTP #
Ссылка подключает сохранённый сайт. nginx -t проверяет все настройки сервера; && разрешает перечитать их только при успешной проверке. curl проверяет ответ для вашего домена. При ошибке остановитесь, исправьте указанную строку и повторите проверку.
sudo ln -sfn /etc/nginx/sites-available/authentik /etc/nginx/sites-enabled/authentik
sudo nginx -t && sudo systemctl reload nginx
curl -I http://login.example.com/Ожидается successful от nginx -t и HTTP 403 для обычного запроса: до HTTPS это намеренная блокировка. DNS должен указывать на сервер, TCP 80/443 — быть доступен у провайдера. Ничего не вводите в форму входа по HTTP.
Шаг 11. Получите сертификат и включите HTTPS #
Каждое имя из команды должно указывать на этот сервер. Certbot проверит домены, сам добавит сертификат в сайт Nginx и включит перенаправление HTTP → HTTPS. Укажите свою почту при запросе и подтвердите условия Let’s Encrypt. Это отдельное действие после успешной проверки HTTP.
sudo /snap/bin/certbot --nginx -d login.example.com --redirectCertbot сообщил об успешной установке. Откройте HTTPS-адрес со своего компьютера: браузер не должен предупреждать о сертификате. Для закрытой панели используйте разрешённый IP. При ошибке исправьте DNS, в том числе AAAA, либо доступ к TCP 80; не повторяйте запросы выпуска подряд.
Шаг 12. Проверьте продление сертификата #
Certbot из snap создаёт службу автоматического продления. Dry-run выполняет пробное продление: настоящие сертификаты не заменяются. Затем проверьте, что таймер планирует следующий запуск. Сохраняйте доступ к TCP 80 для следующих проверок домена.
sudo /snap/bin/certbot renew --dry-run
systemctl list-timers --all 'snap.certbot.renew*'Пробное продление успешно, у таймера есть следующий запуск. Если тест не прошёл, проверьте /var/log/letsencrypt/letsencrypt.log; сначала исправьте причину. После этого можно создавать учётную запись и приглашать пользователей.
Шаг 13. Создайте первого администратора #
В браузере откройте https://login.example.com/if/flow/initial-setup/ с завершающим слешем. Если ваша версия направляет на первоначальный мастер с главной страницы, используйте этот переход. Установите сильный пароль akadmin.
Административный интерфейс открывается после входа; пароль сохранён.
Шаг 14. Подготовьте постоянный административный доступ #
Создайте отдельного администратора для обслуживания, настройте MFA и сохраните аварийный способ входа. Проверьте новую учётную запись в отдельном окне до выхода из akadmin.
Новый администратор входит и видит нужные разделы; способ восстановления сохранён вне сервера.
Шаг 15. Добавьте тестового пользователя #
Создайте обычную учётную запись и группу сотрудников. Войдите обычным пользователем через отдельный браузер. Установка SSO-сервера сама по себе не подключает остальные приложения.
Пользователь входит и не получает административных прав.
Шаг 16. Подключите одно тестовое приложение #
В административном интерфейсе создайте Application и подходящий Provider по документации подключаемой системы. Для OpenID Connect нужны точные callback/redirect URL и реквизиты клиента. Привяжите доступ к группе тестового пользователя; не используйте звёздочку вместо адресов.
Приложение входит через authentik; пользователь вне разрешённой группы получает отказ. Если приложения пока нет, этот шаг отложите — сервер входа уже установлен.
Шаг 17. Остановите изменение данных перед копией #
Предупредите о коротком перерыве. Подготовим закрытый каталог и остановим server/worker; PostgreSQL остаётся работать для выгрузки.
umask 077
mkdir -p "$HOME/backups/authentik"
docker compose stop server workerПользователи временно не входят, база доступна для pg_dump.
Шаг 18. Сохраните базу #
Дамп хранит пользователей, группы, приложения и настройки входа. Перенаправление вывода создаёт файл в каталоге копий.
docker compose exec -T postgresql pg_dump -U authentik -d authentik -Fc > "$HOME/backups/authentik/database.dump"database.dump создан без ошибок и не пуст.
Шаг 19. Сохраните ключи и файлы #
Архив включает .env, описание установки и пользовательские файлы. Без сохранённого ключа приложения восстановление одной базы будет неполным.
tar -czf "$HOME/backups/authentik/files.tar.gz" .env compose.yaml data certs custom-templatesfiles.tar.gz создан; перенесите обе части в закрытое внешнее хранилище.
Шаг 20. Верните вход и проверьте восстановление #
Запустите server/worker и повторите тестовый вход. Для проверки копии восстановите обе части на отдельном сервере той же версии с тестовыми адресами.
docker compose start server workerТестовый пользователь снова входит; копия восстанавливает его настройки и доступ.
Если результат шага отличается #
Вернитесь к проверке того шага, на котором появилась ошибка. Первая ошибка в выводе обычно полезнее последних строк: последующие команды могли не получить нужный файл или работающую службу. Не повторяйте установку целиком поверх частично настроенного приложения.
Если страница не открывается, сначала проверьте домен и входящие порты, затем состояние приложения и его журнал. Если сайт открывается, но отдельное действие не работает, проверьте связанные компоненты — обработчик фоновых задач, почту или права пользователя. Официальные источники в конце статьи относятся к выбранному способу установки.
Настройки внешнего доступа храните вместе с копией приложения: /etc/nginx/sites-available/authentik и /etc/letsencrypt содержат сайт и сертификаты с закрытыми ключами. Архивируйте их с sudo в закрытое хранилище. После восстановления подключите сайт через sites-enabled, выполните sudo nginx -t, затем перечитайте Nginx. Для ошибки 502 сначала проверьте локальное приложение и /var/log/nginx/error.log; для сертификата — /var/log/letsencrypt/letsencrypt.log и таймер продления.