Очередная статья про настройку Outline + KeyCloak. С одной стороны, статьи в сети есть. С другой стороны - начинаешь по ним делать и выплывают подводные камни, которые в статьях почему то не приведены. После определенного периодического мучения с установкой данного продукта решил собрать в кучу все мысли и действия. Первоисточник: Основной алгоритм был взят из статьи. Выбираем, что нам по душе - Debian 12 или Ubuntu Server. Алгоритм в этих вариантах один и тотже. Устанавливаем Docker согласно документации: Docker_on_Debian или Docker_on_Ubuntu. Придумываем и регистрируем во внешних DNS-серверах три DNS-записи для трех решений: wiki.<наш домен> kk.<наш домен> minio.<наш домен> ВАЖНО: Если на Linux машине IP-адрес серый (но в нас есть DNAT портов 80/443 либо Reverse Proxy), обязательно нужно в файле /etc/hosts прописать соответствие серого IP-адреса и созданным трем DNS-записям. Вообще в любом варианте (белый IP на интерфейсе) можно это сделать, лишним не будет. Если этот шаг упустить - KeyCloak аутентификация у меня не работает с Outline. Создаем каталог для размещения сценария для Docker:  Заполняем файл, меняем WEB-имя сервера и пароль доступа к админской части:     Сохраняем, далее, переходим в каталог /opt/keycloak/ и запускаем установку контейнера:   Ожидаемый вывод, если у нас есть Интернет, и мы правильно установили Docker: После запуска смотрим статус контейнера командой: Через некоторое время видим, что контейнер не запущен, статус остановки Exited:  Смотрим журнал контейнера (docker logs <имя контейнера>): Исправляется следующей командой:  Останавливаем и снова запускаем контейнер: Теперь команды docker compose ps -a и lsof -i -nP должны показывать, что контейнер с KeyCloak работает и порты доступа открыты.  KeyCloak и Outline по умолчанию настроены на работу только по HTTPS. При этом они также не доверяют самоподписанным сертификатам и заставить их работать у меня не получилось до конца (хотя попытки были и кое какой прогресс был). Поэтому нам необходим белый IP, публичные DNS-записи и утилита python3-certbot. Устанавливаем, запускаем (certbot certonly), получаем на 3 месяца сертификат на три публичных DNS-записи. Во многих статьях используют Docker контейнер с Nginx Proxy Manager, который дает GUI для настройки и сам способен автоматически продлять Les't Encrypt сертификаты. В прошлом я его использовал, в последний раз решил от него отказаться в пользу установки Nginx на базовую систему (потому что захотелось). Создаем следующие конфигурации - /etc/nginx/sites-enabled/keycloak.conf: /etc/nginx/sites-enabled/minio.conf   /etc/nginx/sites-enabled/outline.conf   Перезапускаем Nginx: Входим по адресу: https://kk.<наш домен>/admin , авторизуемся учеткой admin с паролем, который задан в docker-compose.yml файле: Создаем новый Realm с именем outline:   Находясь уже в новом созданном Realm с именем outline, создаем нового клиента (это наш сайт с Outline): Указываем имя, описание и ID - outline-wiki : Включаем клиентскую аутентификацию и отключаем прямой вход:   Указываем ряд URL-адресов нашей WiKi:   Теперь нам нужно сохранить себе мастер-ключ для взаймодействия с этим клиентом. Переходим в раздел Credentials и копируем себе ключ, который сгенерировался при создании клиента KeyCloak:  Теперь необходимо создать пользователя в KeyCloak - с его помощью мы будем авторизовываться и работать в Outline Wiki. В левом фрейме переходим в раздел: Users и добавляем нового пользователя: Add User. Логин и email должны совпадать. После создания пользователя у него не задан пароль - необходимо это исправить в разделе Credentials через кнопку Set password:  На этом работа с KeyCloak закончена. Других пользователей Outline создавать аналогично. Создаем нужный каталог и файлы: Содержимое файла docker-compose.yml:  Содержимое с настройками (будем дальше несколько раз менять) - docker.env :   В параметр OIDC_CLIENT_SECRET впишите ключ, который мы сохраняли сразу после создания клиента в KeyCloak (outline-wiki).   Параметры AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION, AWS_S3_UPLOAD_BUCKET_NAME пока оставляем как есть, мы их исправим позже, когда установим, запустим и настроим параметры контейнера с MinIO (S3-хранилища).   Теперь необходимо запустить загрузку и запуск контейнеров:   Подключаемся к серверу по адресу: http://<IP>:9001   Входим учеткой admin и паролем, который мы указали в docker.env файле. ПЕРВЫЙ ШАГ - сменить регион расположения S3 хранилища и перезапустить сервис: Далее жмем кнопку: Restart и дал должно из сервиса выкинуть (снова на страницу входа):   Снова входим и настраиваем.   Теперь создаем Bucket для хранения картинок и другого контента wiki: Выбираем имя - datawiki. Тут есть тонкости - если выбирать имена, пересекающиеся с именами URL-адресов, будут проблемы. В созданном Bucket создаем Access Rule: Создаем Access Key для параметров AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY в файле docker.env:   Записываем в блокнот данные для AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY (больше их посмотреть не удастся).   Настройка MinIO закончена. Теперь нам нужно изменить содержимое файла /opt/outline/docker.env и указать параметры:   Теперь перезапускаем контейнеры с этими параметрами:   Входим по адресу: https://wiki.vdsina.vershininegor.site. При входе появляется кнопка - продолжить вход с помощью KeyCloak. Авторизуемся в нем и нас пускают в Outline Wiki. На самой дешевой виртуалке за 15 рублей в день (1 ядро, 2 Гб ОЗУ) это способно жить и работать при 2-3 пользователях. На холостом ходу Active ОЗУ чуть больше 1,2 Гб. С 2006 года пользуюсь сам DokuWiki, накопил более 900 заметок и статей для своих нужд. С тех под много что другого настраивал и пробовал (MediaWiki, BookStack, WikiJS, etc). Но видимо я уже динозавр, так как мне Dokuwiki проще и привычнее. Однако молодежь требует более простых инструментов. Outline действительно прост в использовании, красив и удобен. Еще бы поднимался одной кнопкой и кушал 50 Мб ОЗУ - было бы вообще идеально )))  IT специалист