Об этом проекте
Этот репозиторий упаковывает самохостинг-развертывание XWiki в единый стек Docker Compose. XWiki, платформа для корпоративных вики, работает за Traefik, выступающим в роли обратного прокси, с сертификатами Let's Encrypt, автоматически выдаваемыми для настроенных хост-имен. PostgreSQL 15 хранит данные вики.
Настройка следует короткой последовательности: клонировать репозиторий, создать две ожидаемые сети Docker (traefik-network и xwiki-network), скопировать .env.example в .env и заполнить требуемые значения (XWIKI_DB_PASSWORD, XWIKI_HOSTNAME, TRAEFIK_HOSTNAME, TRAEFIK_ACME_EMAIL, TRAEFIK_BASIC_AUTH), затем запустить стек с помощью docker compose. В README отмечается, что первый запуск занимает несколько минут, пока XWiki инициализирует свою схему и основные страницы, и перечислены распространенные проблемы первого развертывания, такие как сбой выдачи сертификата из-за того, что DNS еще не распространился или порт 80 недоступен, сетевые ошибки из-за пропуска шага создания сети и ошибки отсутствующих переменных.
Скрипт update.sh перемещает чекаут на последний тег релиза и повторно запускает docker compose up. Он отказывается переходить на новую основную версию без присмотра, отказывается работать над локальными изменениями и сообщает о любых переменных, которые стали обязательными с момента установки версии. Флаг --dry-run показывает предварительный просмотр действия.
Три официальных образа Docker Hub (traefik, xwiki, postgres) закреплены по дайджестам tag@sha256 в качестве значений по умолчанию для интерполяции, поэтому простой git pull доставляет проверенную комбинацию. Уровни переопределения для каждого образа задокументированы: переменная version меняет только тег без дайджеста, а переменная tag заменяет всю ссылку. Вложенные значения по умолчанию требуют Docker Compose версии 2.5 или новее. Ежедневная работа CI повторно разрешает закрепления против реестров и сравнивает закрепленные версии XWiki и Traefik с релизами upstream; GitHub Actions закреплены по SHA коммита и поддерживаются в актуальном состоянии с помощью Dependabot.
Резервные копии обрабатываются выделенным контейнером, который запускает pg_dump, пропущенный через gzip, плюс архив tar.gz данных вики, затем удаляет старые резервные копии и засыпает. По умолчанию — 30-минутный разогрев, 24-часовой интервал и 7-дневный срок хранения. Два интерактивных скрипта восстановления покрывают базу данных и данные приложения. Репозиторий советует монтировать тома резервных копий на хосте и делать резервные копии перед обновлениями, потому что XWiki мигрирует свою схему при переходе на новую версию.
Защита применяется единообразно: каждая служба устанавливает no-new-privileges, инфраструктурные контейнеры сбрасывают все возможности и добавляют обратно только то, что нужно их точкам входа (NET_BIND_SERVICE для Traefik, CHOWN/SETUID/SETGID для образов базы данных), в то время как контейнеры приложений намеренно сохраняют набор возможностей по умолчанию. Каждая служба имеет ограничения по памяти и ЦП, а также резервации в качестве значений по умолчанию для compose, которые можно переопределить через .env.
Рабочий процесс проверки развертывания запускается при каждом пуше, пулл-реквесте и ежедневно в 06:00 UTC, покрывая shellcheck, actionlint, сканирование Trivy трех закрепленных образов, проверку свежести и работу по развертыванию и тестированию, которая запускает стек с эфемерными учетными данными и требует, чтобы пользовательский интерфейс вики отвечал через Traefik. Скрипт сквозного тестирования резервного копирования/восстановления вставляет строку-маркер, восстанавливает самую раннюю резервную копию и утверждает, что маркер исчез; он ненадолго останавливает контейнер базы данных, чтобы доказать обнаружение сбоя, и предназначен для стейджинга, а не для продакшена.
Примечания по безопасности указывают, что учетные данные считываются из .env, игнорируемого git, во время развертывания, что PostgreSQL слушает только на внутренней сети, и что релизы до v1.0.0 поставлялись с отслеживаемым .env, содержащим сгенерированный на вид пароль базы данных, который следует сменить, если он был использован.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.