Цель проекта
Разработать и развернуть многокомпонентную серверную инфраструктуру на базе Docker Compose, включающую: вики-движок Outline, совместимое S3-хранилище (любое), OIDC-провайдер (любой), обратный прокси, систему мониторинга Portainer с алертами и скрипт-преобразователь Powerpoint в Markdown.
Основные требования
- Все сервисы собраны в единый docker-compose.yml, одним запросом
docker compose up -d должно запускаться всё окружение. - Чувствительные параметры (пароли, токены, API-ключи) выведены в файл .env, доступ к нему - строго ограничен.
- Каждый сервис контейнеризирован, есть отдельные сервисные Dockerfile’ы или образы с настраиваемыми путями.
- Перед запуском осуществляется автоматическая проверка целостности и копия лога ошибок.
Функциональные блоки
- Outline: база знаний с ролями пользователей, SSO-входом без паролей, необходима интеграция с OIDC-провайдером.
- S3-хранилище: любое (MinIO, Ceph, локальное), должно выступать как бэкэнд для документов и медиа Outline.
- OIDC-провайдер: реализация любой популярной OpenID-системы (например, Keycloak, Dex, Authelia) для централизованной аутентификации.
- Обратный прокси: - с support HTTPS-терминации, UPGRADE-коннектов WebSocket для прямого доступа к Outline, балансировкой на контролы.
- Portainer: для визуального управления контейнерами, обязательно: получение алертов по событиям (стоп контейнеров, превышение использования памяти/паддения) через HTTP webhook, email или телеграм-бота.
- Python-скрипт: простой скриптик на любом питоновом фреймворке, который парсит PPTX-файл и выводит структуру слайдов в Markdown, с сохранением текста и иерархии.
Ожидаемый формат поставки
- Корневой каталог проекта с docker-compose.yml, примером .env.
- Короткое описание каждого сервиса (минимум README).
- Скрипты для первоначальной настройки (сгенерировать ключи/токены, создать базу, заменить тестовый IdP).
Уровень безопасности
Необходимо реализовать: изоляцию контейнеров друг от друга (через дефолт сети и политики прослойки на уровне Reverse Proxy), шифрование всех передач (TLS, HTTPS-only), root-пароли исключить, используйте только API-ключи длиной >32 символа, запрет Root-доступа внутри (ironic non‑root‑alike контейнеры), минимально необходимые сетевые открытые порты и строгие права доступа на папки с монтируемыми данными.