Привет!
Мы создали репозиторий под названием RPS Discourse Image Builder, который используется для создания образа OCI для Discourse. Думаю, это может быть полезно некоторым из тех, кто здесь находится. Мы сделали это в основном для того, чтобы не ждать развёртывания Discourse, которое занимает много времени, и чтобы иметь возможность надёжно фиксировать версию Discourse.
Мы написали скрипт, который использует репозиторий discourse_docker для создания образа с стабильной версией максимально универсальным способом.
Также существует файл docker compose, который поднимает необходимые для сборки базы данных и образ Discourse для тестирования и запускает их для локальной разработки. Это можно запустить на GitLab runner с исполнителем shell, но для этого нужна система с версией docker-compose, поддерживающей профили.
Подход
Скрипт сборки должен запускаться в наших пайплайнах CI/CD, чтобы мы могли легко обновлять версию, и дальнейшие настройки производились в других репозиториях с Dockerfile, основанными на образе, созданном этим репозиторием.
Предыстория
Discourse — очень хороший программный продукт, но его не очень легко развёртывать и фиксировать по версии. Этот репозиторий используется для создания Docker-образа, который можно использовать для развёртывания Discourse.
Проблема в том, что у Discourse очень уникальный способ создания своих Docker-образов. Разработчики Discourse ожидают, что вы будете собирать образ на целевой машине с использованием их репозитория discourse_docker.
На форуме велись длительные обсуждения по этому поводу. Если кратко: ведущие разработчики Discourse отказываются поддерживать публичный Docker-образ, который можно использовать для развёртывания Discourse. Они хотят сохранить репозиторий discourse_docker как единственный официальный способ развёртывания Discourse.
Основные недостатки такого подхода:
- По нашему опыту, невозможно надёжно фиксировать версию Discourse.
- Сборка образа занимает много времени, и когда образ собран, сервис недоступен. Кроме того, у Discourse самый длинный цикл итераций DevOps среди всех поддерживаемых нами сервисов.
- Базы данных управляются иначе, чем в обычных проектах на основе Docker.
- Официальный сценарий развёртывания Discourse несовместим с рабочими процессами и развёртываниями, основанными на OCI, такими как Kubernetes или даже Docker-Compose.
- Запускатель discourse_docker делает множество предположений об окружении, в котором он работает. Например, он отказывается запускаться в rootless-режиме под Podman, выдавая ошибку об отсутствующих хранилищах, и при этом нельзя обойти это ограничение с помощью аргумента или переменной окружения.