Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Публикация на сервере

На рабочем сервере Magento ничего не собирает на лету: классы, стили и скрипты готовят заранее. Поэтому выкладка — это не копирование файлов, а последовательность команд. Пропущенный шаг даёт пустую страницу или сайт без оформления.

Рабочий режим

bin/magento deploy:mode:set production
bin/magento deploy:mode:show

Первая команда переключает режим и сама запускает сборку, вторая печатает текущий режим.

РежимПоведение
developerОшибки на экране, всё собирается на лету, медленно
defaultПромежуточный, только для первого запуска
productionОшибки только в журнале, всё собрано заранее, быстро

Разрабатывают в developer, а на рабочем сервере включают только production.

Порядок выкладки

После того как новый код попал на сервер, выполняют:

bin/magento maintenance:enable
 
composer install --no-dev --optimize-autoloader
 
bin/magento setup:upgrade --keep-generated
bin/magento setup:di:compile
bin/magento setup:static-content:deploy en_US ru_RU -f
 
bin/magento cache:flush
bin/magento maintenance:disable

На время выполнения посетители видят страницу «Сайт обновляется», а после последней команды магазин работает с новым кодом.

Что делает каждая команда

КомандаДействие
maintenance:enableЗакрывает сайт для посетителей
composer install --no-devУстанавливает пакеты без инструментов разработки
setup:upgradeОбновляет таблицы по db_schema.xml и выполняет новые заплатки
setup:di:compileГенерирует классы и сведения о зависимостях в папку generated
setup:static-content:deployСобирает стили, скрипты и картинки тем в pub/static
cache:flushОчищает весь кеш
maintenance:disableОткрывает сайт

Статические файлы

В команде setup:static-content:deploy перечисляют все языки, которые включены на витринах и у сотрудников в панели управления. Для языка, которого нет в списке, страница откроется без стилей. Ключ -f разрешает запуск вне рабочего режима.

Режим обслуживания

bin/magento maintenance:enable --ip=203.0.113.5
bin/magento maintenance:status

Параметр --ip оставляет сайт открытым для указанного адреса — так выкладку проверяют до того, как пустить посетителей.

Настройки сервера

ФайлЧто в нёмХранить вместе с кодом
app/etc/env.phpБаза данных, кеш, адрес панели, ключ шифрованияНет, на каждом сервере свой
app/etc/config.phpСписок модулейДа

Ключ шифрования из env.php нужен, чтобы расшифровать сохранённые пароли платёжных систем. При переносе магазина на другой сервер его переносят вместе с базой данных.

Перед запуском

Что проверитьКак
Режимdeploy:mode:show показывает production
Корень сайтаВеб-сервер смотрит в папку pub
Планировщикcrontab -l содержит строки Magento
Индексыindexer:status — все в состоянии Ready
Кешcache:status — все виды включены
Адрес панелиНе /admin, а свой
Двухэтапный входВключён для сотрудников

Частая ошибка

Сайт открылся без стилей — команда setup:static-content:deploy не выполнена или выполнена не для того языка. Страница пуста после обновления — не запущена setup:di:compile, и в папке generated остались старые классы. Третья причина сбоев — команды выполнены от имени root: файлы в var, generated и pub/static принадлежат ему, и веб-сервер не может их изменить. Запускайте все команды от пользователя, под которым работает PHP.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.