Размещение на сервере
На своём компьютере Symfony работает в режиме разработки: с панелью отладки и подробными ошибками. На сервере нужен рабочий режим — быстрый и без лишних сведений для посетителей. Размещение — это несколько команд, которые выполняют в одном и том же порядке.
Рабочий режим
Режим задают переменные окружения на сервере — в файле .env.local или в настройках хостинга:
APP_ENV=prod
APP_SECRET=случайная-длинная-строка
DATABASE_URL="mysql://blog:пароль@127.0.0.1:3306/blog?serverVersion=8.0.32&charset=utf8mb4"В режиме prod панель отладки отключена, а вместо подробностей ошибки посетитель видит обычную страницу.
Шаги размещения
git pull
composer install --no-dev --optimize-autoloader
php bin/console doctrine:migrations:migrate --no-interaction
php bin/console cache:clear| Шаг | Зачем |
|---|---|
git pull | Получить новый код |
composer install --no-dev | Установить пакеты без инструментов разработки |
doctrine:migrations:migrate | Обновить структуру базы |
cache:clear | Пересобрать кеш настроек, маршрутов и шаблонов |
Стили и скрипты
Если проект использует AssetMapper, файлы готовят командой:
php bin/console asset-map:compileОна копирует стили и скрипты в public/assets с хешем в имени.
Быстрые переменные окружения
Файлы .env Symfony читает при каждом запросе. Команда собирает их в один PHP-файл, который загружается быстрее:
composer dump-env prodВеб-сервер
Корневой папкой сайта должна быть public. Все запросы, для которых нет файла, направляют в index.php. Пример для Nginx:
server {
server_name example.com;
root /var/www/blog/public;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ ^/index\.php(/|$) {
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
internal;
}
}Права на папки
Веб-сервер должен иметь право записи в папку var: там лежат кеш и журнал. Остальные файлы проекта ему достаточно читать.
Проверка после размещения
php bin/console about
tail -n 50 var/log/prod.logПервая команда показывает режим и версии, вторая — последние строки журнала ошибок.
Частая ошибка
Режим dev на рабочем сервере — серьёзная уязвимость: профилировщик показывает любому посетителю настройки, запросы к базе и переменные окружения с паролями. Убедитесь, что на сервере APP_ENV=prod, а пакеты установлены с ключом --no-dev.