MAATRIX / Блог / VPS для PHP / Symfony: php-fpm и opcache

VPS для PHP / Symfony: php-fpm и opcache

Блог MAATRIX · 2026-07-07

Symfony на production работает через php-fpm за nginx. Разберём установку PHP, конфиг nginx под фронт-контроллер, настройку opcache и preload для скорости, а также права на каталоги.

Как устроен деплой Symfony

['Symfony использует единую точку входа — public/index.php. Все запросы nginx направляет на этот фронт-контроллер, а исполняет PHP-код php-fpm. nginx при этом отдаёт статику напрямую.', 'Скорость PHP на production критически зависит от opcache — он кэширует скомпилированный байткод и убирает повторную компиляцию на каждом запросе. Без него Symfony работает в разы медленнее.', '
  • php-fpm — пул процессов PHP.
  • opcache — кэш байткода, ключ к скорости.
  • Фронт-контроллер — весь трафик через index.php.
']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS для Symfony

Установка PHP и расширений

['Ставим php-fpm и типовой набор расширений для Symfony (intl, mbstring, xml, работа с БД).', '
sudo apt update\nsudo apt install -y nginx php-fpm php-cli php-intl php-mbstring php-xml php-curl php-pgsql php-zip unzip git\nphp -v\nsystemctl status php8.3-fpm
', 'Composer ставим глобально для управления зависимостями:', '
curl -sS https://getcomposer.org/installer | php\nsudo mv composer.phar /usr/local/bin/composer
']

Деплой кода и права

['Ставим зависимости в production-режиме и прогреваем кэш. Каталог var/ должен быть доступен на запись пользователю php-fpm (обычно www-data).', '
cd /var/www/symfony\ncomposer install --no-dev --optimize-autoloader\nAPP_ENV=prod php bin/console cache:clear\nsudo chown -R www-data:www-data var/
', 'Переменные окружения задаются в .env.local или на уровне системы; APP_ENV=prod и APP_DEBUG=0 обязательны для боевого контура. Для скорости скомпилируйте .env в статический файл — тогда Symfony не парсит dotenv на каждом запросе.', '
composer dump-env prod\nAPP_ENV=prod php bin/console cache:warmup
']

Конфиг nginx

['nginx отдаёт статику из public и передаёт PHP в сокет php-fpm. Важно направлять на index.php только несуществующие пути.', '
server {\n    listen 80;\n    server_name example.com;\n    root /var/www/symfony/public;\n    location / {\n        try_files $uri /index.php$is_args$args;\n    }\n    location ~ ^/index\\.php(/|$) {\n        fastcgi_pass unix:/run/php/php8.3-fpm.sock;\n        fastcgi_split_path_info ^(.+\\.php)(/.*)$;\n        include fastcgi_params;\n        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;\n        fastcgi_param DOCUMENT_ROOT $realpath_root;\n        internal;\n    }\n    location ~ \\.php$ { return 404; }\n}
', '
sudo nginx -t && sudo systemctl reload nginx\nsudo certbot --nginx -d example.com
']

opcache и preload

['Для production включаем opcache с валидацией по таймауту (или отключаем её вовсе, если деплой сбрасывает кэш). Symfony поддерживает preload — загрузку классов в память при старте php-fpm.', '
; /etc/php/8.3/fpm/conf.d/10-opcache.ini\nopcache.enable=1\nopcache.memory_consumption=256\nopcache.max_accelerated_files=20000\nopcache.validate_timestamps=0\nopcache.preload=/var/www/symfony/config/preload.php\nopcache.preload_user=www-data
', 'После правок конфига перезапускаем пул: sudo systemctl restart php8.3-fpm. При validate_timestamps=0 не забывайте очищать opcache при каждом деплое. Отдельно стоит настроить число процессов пула: параметр pm.max_children подбирают по объёму RAM и среднему потреблению одного процесса php-fpm.', '
; /etc/php/8.3/fpm/pool.d/www.conf\npm = dynamic\npm.max_children = 20\npm.start_servers = 4\npm.min_spare_servers = 2\npm.max_spare_servers = 6
']

Конфигурация сервера и грабли

['PHP-FPM хорошо масштабируется по числу процессов, а скорость ответа зависит от CPU и диска. AMD EPYC + NVMe у MAATRIX дают быстрый opcache-прогрев и отзывчивость под нагрузкой, тарифы от $8/мес и ежедневные бэкапы удобны для боевого сайта. Локации UK/США и оплата из России (карта РФ, СБП, крипта, MAAT) снимают барьер зарубежного хостинга.', '
  • Нет прав на var/ — Symfony не запишет кэш и логи, ошибка 500.
  • opcache выключен — медленные ответы, лишняя нагрузка на CPU.
  • validate_timestamps=0 без сброса — старый код продолжает работать после деплоя.
']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS для Symfony

Частые вопросы

Нужен ли Apache для Symfony?

Нет, nginx + php-fpm — стандартная и более лёгкая связка для production. Apache с mod_php тоже работает, но требует больше ресурсов.

Как сильно opcache ускоряет Symfony?

Существенно: без кэша PHP компилирует все файлы на каждом запросе. С opcache и preload время ответа падает в разы, особенно на крупных приложениях.

Что делать при ошибке 500 после деплоя?

Проверьте права на var/, очистите кэш командой cache:clear и посмотрите логи в var/log/prod.log и journalctl php-fpm.