Artisan для Directus | Деплой и code driven

Разбираюсь с Directus, не хватает удобного cli для деплоя и других рутинных работ. Что-то подобное уже реализовано в artisan у laravel и обернуто в sail Я сделал helm (штурвал)

Не маленькая штука выйдет…

На проекте, под который я её делаю есть одна проблема. Как и любого проекта на любой CMS - нет рабочих миграций и initial data.

Люди работали через rsync, просто копируя полностью весь проект… Как на новый сервер, так и новому разработчику.

В целом - в wordpress эта практика считается нормальной, и ведется версионный учет только самописных шаблонов и плагинов.

Но этот проект позиционируется как гораздо более серьезная вещь, и на мой взгляд, не допустимо так халатно относиться к организации работы вокруг проекта. Думал мне немного поможет эта утилита организовать полный цикл рабочего процесса, приближенный к laravel sail

В целом - твердое ДА! Оно поможет. Со всем можно смириться и разобраться, но самое узкое место - это данные и файлы.

Исопльзуя directus-sync — я теперь могу хранить структурированный snapshot всей модели данных directus. Из минусов - накатывается долго и версионность обеспечивается коммитами, а не наложением версий, как при классических миграциях.

Дальше данные. Добавил поддержку миграций, но оказалось они исполняются при первом запуске интанса вместе с системными, так что посев базы делать оттуда смысла не имеет, если миграции не описывают модель данных. Таким образом я оставляю поддержку создания стабов миграций, но отказываюсь от их использования.

Вместо них реализовал систему fill-initial-data Она представляет из себя bash скрипт, который проходится в цикле по директории directus/initial-data по отсортированным по имени sql файлам, и применяет их через psql напрямую в базу. Штука не надежная, но рабочая - главное обеспечить правильный порядок, иначе могут быть проблемы со связями. Достигается правильный порядок указанием префикса YYYY_MM_DD_TIMESTAMP вначале имени каждого файла, подобно laravel. Данные накатить теперь можно, при том даже не проблема достать их из существующей базы. Отлично!

А теперь uploads… Вот с ним хз что делать) Кроме фактического существования файла - он должен быть в базе данных, при этом у него есть relation к виртуальным директориям, для отображения в админке. А на их id ссылаются другие сущности… У меня есть сомнения, что это вообще нужно помещать в initial-data, тк в laravel никогда и не сталкивался с такой задачей, но именно здесь она меня напрягает.

В целом работать теперь думаю можно, а helm я скорее всего допилю. Уже отрефакторил немного.

В основном писать о нем буду у себя в тг канале @cododelia

Artisan для Directus | Деплой и code driven | Сетка — социальная сеть от hh.ru Artisan для Directus | Деплой и code driven | Сетка — социальная сеть от hh.ru