Публикация на сервере
На рабочем сервере 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.