Encodera

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

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

Оглавление

Размещение на сервере

На своём компьютере 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.

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

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