При разработке на Yii2 (да и не только), как доставлять обновления заказчикам своей системы?
Например разработали сервис на Yii2 его будут покупать другие заказчики, нужно как то доставлять обновления системы на их сервера. Система одна можно сказать CMS.
Как можно реализовать такое решение?
Первая проблема например это шаблоны ( у каждого заказчика свой, используем встроенные в Yii2 папку templates) нужно как то доставлять определенным заказчикам определенные шаблоны.
Общий код было бы тоже не плохо доставлять частями или весь для начала.
Была мысль сделать на сервере заказчик(а\ков) репозиторий GIT и у себя удаленный репозиторий на каждого клинета, и таким образом пушать им код. Но нужно еще запускать миграции и следить или ничего не упало.
Вообще в доставке обновлений особо опыта нет, интересно как знающие люди делают и что используют. Да и вообще какие варианты есть, кроме заливки файлов в ручную.
Сайт сам обращается к твоему хосту и проверяет наличие апдейта, если есть, то скачивает .zip архив и распаковывает. Либо пусть получает ссылку на репозиторий, по которой выкачает файлы и заменит. Что тут сложного?
Теоретически да, но нужно еще запустить миграции, могут миграции не выполниться. Пока обновляется сайт он может не правильно работать, к тому же он может сломаться после апдейта. Как тогда быть? Откатиться назад автоматически не получится.
Роман Штепа, На время апдейта выводить сообщение что ведутся работы, для этого отдельный функционал, не зависящий от обновления. Перед обновлением проверять готовность сайта для обновления, проверять необходимые требования. Проверять целостность файлов, чтоб быть уверенным, что они не модифицировались. Если что-то не так, выводить соответствующее предупреждение и предлагать варианты исправления. И обновления должны быть модульными, отдельно ядро, то куда посторонние лезть не должны, отдельно пользовательские элементы, которые могут изменяться, естественно выводить предупреждения. А еще позволить обновлять отдельные части выборочно (шаблончики). Не забывать делать бекап перед обновлением и предусмотреть возможность быстрого его восстановления, если что-то сломалось, для этого должна быть отдельная независимая от обновляемой части штука. Работы тут много, множество ситуаций надо предусмотреть, но это не что-то непосильно сложное или требующее сверхзнаний.
У меня сделан процесс обновления поэтапный:
1. На моем сайте лежит архив с обновлением (вся папка вместе с vendor)
2. Администратор системы качает архив и загружает в систему (это можно автоматизировать)
3. Распаковывается архив и применяются миграции(в транзакции)
4. Идёт замена всех файлов проекта
В идеале сделать систему обновления не зависимой от yii2, чтобы при падении всей системы была возможность накатить обновление с фиксом