Перейти к содержанию

Передача редакционной библиотеки

Оглавление серии

Передача проекта означает, что следующий человек понимает его устройство и может отличить подготовленные исходники от подтверждённого работающего состояния. В «Редакционном доме» мы создали модель библиотеки, редакционные версии, отдельный сервер чтения, закрытый preview и получатель событий. Завершим серию локальным выпуском, в котором эти части связаны общими данными и явно указанными ограничениями.

Результат урока — описание комплекта и последовательность приёмки будущего запуска. Это не публикация на внешний сервер. Все исходники имеют статус not_run: установка зависимостей, сборка панели, HTTP-запросы, импорт, миграции и работа UI не выполнялись. Сохранённые схемы и команды предназначены для читателя, который проведёт собственную лабораторную репетицию.

Что получает следующий разработчик

Передайте архив вместе с оглавлением серии и README. В корне находятся configuration и стандартные modules Article, Author, Category. Components editorial.seo и editorial.resource отражают данные конкретной статьи. В папке states сохранены полные прежние схемы Article: уроки два, три, четыре и пять. Финальная src-схема добавляет i18n десятого урока.

Зачем нужны snapshots, если финальный файл уже готов? Читателю важно увидеть момент появления отношения или media field, не угадывая среди всех будущих attributes. Однако snapshots не являются готовыми копиями всей базы и не откатывают существующий runtime автоматически. Их роль редакционная: сохранить точную версию показанного файла и последовательность изменений модели.

В fixtures остаются те же три статьи, Анна Лесная и категория «Вёрстка». Импорт создаёт drafts только в пустой локальной базе; он не прикрепляет cover и не создаёт en-перевод. Эти действия выполняются вручную в соответствующих уроках. Если следующий человек ожидает увидеть обложку сразу после import, README должен объяснить отсутствие связи до загрузки файла.

Отдельный site состоит из server, cms, templates, preview и webhook modules. Его package не содержит сторонних dependencies. Это помогает прочитать путь от URL к REST и HTML, но не снимает необходимость Node выбранной линии и настроенного окружения. В архиве только .env.example, реальные credentials каждый оператор создаёт сам.

Выпуск описывает версии и полномочия

Для CMS выбрана Strapi 5.57.0, для процессов Node 24 LTS, для локальных данных SQLite. Точный dependency tree ещё не разрешён, lockfile отсутствует. Следовательно, набор нельзя честно назвать проверенным воспроизводимым binary release. Читатель после своей установки должен сохранить полученный lockfile и отметить платформу, на которой работал SQLite-драйвер.

Public и обычная Authenticated role Content API закрыты. Custom token сайта читает Article, Author и Category без прав записи. Admin Writer работает с черновиками, Publisher выпускает тексты, Super Admin управляет экземпляром. Ни один из этих доступов не переносится автоматически только потому, что скопированы models. Матрица девятого урока является частью приёмки настроенного экземпляра.

Сайт всегда выбирает published для обычных routes и принимает только ru/en. Preview читает draft после проверки подписи с documentId, locale и expiry. Webhook проверяет независимый Bearer token и сохраняет inbox. Эти три направления доступа описываются отдельно, поскольку ошибка в одной границе не должна быть скрыта общим утверждением «авторизация настроена».

Официальные возможности состояния публикации и управления данными сверяются по Draft & Publish и Data Management. Конкретный локальный сервер и подписанный URL — авторские учебные решения. Документация продукта подтверждает используемые interfaces, но не заменяет будущую проверку нашего кода.

Приёмка связывает данные и видимый результат

Будущий оператор начинает с установки отдельной пустой лаборатории, собственных секретов и сохранённой версии dependencies. Затем проверяет создание модели, ручной первый Article и отношения с Author/Category. После этого добавляет components и media, проверяет права токена и сравнивает draft/published на одном documentId. Только такой порядок позволяет объяснить причину результата.

Следующая группа относится к сайтам ru/en. В русском каталоге должны появиться опубликованные русские документы. Английский каталог может содержать только перевод первой статьи. Отсутствие остальных переводов не превращают в network error. Ссылки на отсутствующий published-document дают 404, недоступная CMS — 503. Наличие корректных status codes важно не меньше видимого текста заголовка.

Для preview проверяется действующая подпись, изменённый символ и истёкший срок. Для webhook — точный повтор body, неверный secret и запись файла. Inbox не запускает worker, поэтому приёмка не должна требовать обновления поискового индекса, которого в проекте нет. Формулировка результата определяет, что можно считать завершённым, а что остаётся следующей работой.

Наконец проводится репетиция восстановления в отдельной папке. Только её успешное выполнение позволит поставить отметку о проверенном backup. Зашифрованный export без сохранённого ключа, код без данных или база без uploads не удовлетворяют этому результату. План пятнадцатого урока показывает состав; фактические даты и наблюдения вносит оператор после действий.

Границы дальнейшего развития

Наш renderer поддерживает plain text body. SEO, cover и resources запрашиваются, но полноценный вывод этих полей не добавлен. В библиотеке нет поиска, production cache, распределённой очереди, мониторинга, HTTPS-публикации и реальных сотрудников. Эти ограничения перечисляются не ради общего предупреждения: каждое соответствует конкретному месту, которое следующий разработчик сможет расширить.

Например, добавление поиска затронет индекс, обработку webhooks и сверку актуального опубликованного состояния. Добавление Rich Text затронет schema, данные и renderer. Внешний выпуск затронет секреты, файловое хранилище, сетевой доступ и восстановление. Разные задачи нельзя закрыть одним дополнительным параметром конфигурации, поэтому для них нужны собственные результаты и подтверждения.

Сохраните specs/release.md рядом с набором. Если после будущего локального запуска найдётся несовместимость, исправляйте файл примера и урок вместе, затем обновляйте архив. Показанный полный листинг должен совпадать с тем, что скачивает читатель. Исправление только статьи оставит старую ошибку в ZIP, а исправление только ZIP сделает объяснение недостоверным.

Законченный учебный путь теперь имеет ясную цепочку: модель описывает содержание, редакция меняет drafts, публикация выбирает доступную версию, сервер читает её закрытым token, шаблон показывает страницу, события уведомляют о перемене, а копия позволяет вернуть согласованное состояние. Набор можно изучать локально и развивать дальше, сохраняя эту связь. Его фактическое выполнение остаётся отдельным шагом, который нужно подтвердить наблюдениями, прежде чем использовать проект в рабочей редакции.