Установка Symfony 4 на Debian 9 — пошаговый LAMP/LEMP стек
В этой статье подробно показано, как развернуть Symfony 4 на сервере Debian 9: подготовить VPS (DigitalOcean), установить и настроить LAMP (Apache) или LEMP (Nginx + PHP‑FPM), установить PHP 7.2 и MySQL, установить Composer и создать проект Symfony 4. Включены рекомендации по правам, конфигурациям виртуального хоста, настройкам PHP‑FPM и базовым мерам безопасности.
О чём эта инструкция
Symfony — популярный PHP‑фреймворк, удобный как для небольших сайтов, так и для крупных API и e‑commerce решений. Symfony 4 упрощает структуру проекта и ускоряет запуск благодаря Symfony Flex. Эта инструкция рассчитана на системных администраторов и разработчиков, которые хотят развернуть рабочую среду на Debian 9.
Ключевые варианты использования: развертывание новой среды, подготовка серверов для командной разработки, установка локального VM или cloud VPS.
В этой статье: подготовка сервера, установка Apache/Nginx, PHP 7.2, MySQL, Composer, создание проекта Symfony 4, примеры конфигураций виртуальных хостов, рекомендации по правам, отладке и безопасности.
Что понадобится перед началом
- Аккаунт у провайдера VPS (в примере — DigitalOcean).
- Доступ по SSH к серверу (IP, имя пользователя, пароль или SSH‑ключ).
- Минимум 1 ГБ RAM; для продакшена рекомендуют 2+ ГБ.
- Базовые навыки работы в терминале.
Примечание: в примерах используется пользователь root для простоты; в продакшне лучше работать от пользователя с sudo.
Создание сервера (DigitalOcean пример)
Выберите провайдера и создайте droplet/VM с Debian 9. При создании сохраните:
- IP‑адрес сервера
- имя пользователя (обычно root)
- пароль или SSH‑ключ

Запустите SSH‑клиент. На macOS и Linux это терминал. На Windows используйте PuTTY или PowerShell (Windows 10 имеет встроенный OpenSSH‑клиент).
Если вы используете PuTTY, при первом подключении сервер запросит сохранение ключа — подтвердите.

После подключения вы получите доступ с root‑привилегиями.
Модель окружения: LAMP или LEMP
Symfony запускается на типичном LAMP/LEMP стеке:
- Linux (Debian 9)
- Apache или Nginx
- PHP 7.1.3+ (в примере PHP 7.2)
- MySQL / MariaDB
Выбор Apache vs Nginx зависит от привычек, интеграции с модульными расширениями и требований к производительности. Ниже приведены конфигурации для обоих серверов.
Обновление пакетов на Debian
Проверьте версию Debian:
cat /etc/debian_versionОбновите пакеты:
apt-get update
apt-get upgrade
apt-get dist-upgradeПосле обновления можно переходить к установке веб‑сервера.
Установка Apache2 для Symfony 4
Установим Apache:
apt-get install apache2 -yПосле успешной установки откройте IP сервера в браузере — вы увидите страницу приветствия Apache.

Включите модуль mod_rewrite для поддержки «чистых» URL:
a2enmod rewriteПерейдите в каталог с конфигурациями сайтов:
cd /etc/apache2/sites-available/Откройте файл 000-default.conf и настройте виртуальный хост. Ниже — минимальная рабочая конфигурация, адаптированная для Symfony 4:
ServerName domain.tld
ServerAlias www.domain.tld
DocumentRoot /var/www/html/symfony4/public
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from All
ErrorLog /var/log/apache2/project_error.log
CustomLog /var/log/apache2/projec_access.log combined
Рекомендуемая конфигурация с современными директивами и правилами перенаправления на index.php:
ServerName domain.tld
ServerAlias www.domain.tld
DocumentRoot /var/www/html/symfony4/public
AllowOverride None
Require all granted
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
RewriteEngine Off
ErrorLog /var/log/apache2/crvfakeexample.com_error.log
CustomLog /var/log/apache2/crvfakeexample.com_access.log combined
#SetEnv APP_ENV prod
#SetEnv APP_SECRET
#SetEnv DATABASE_URL "mysql://db_user:db_pass@host:3306/db_name"
Сохраните изменения и перезагрузите Apache:
service apache2 reloadВажно: DocumentRoot указывает на папку public Symfony‑проекта — именно туда должен указывать виртуальный хост.
Установка Nginx для Symfony 4
Если вы предпочитаете Nginx, используйте следующую конфигурацию. Установка:
apt-get update
apt-get install nginx -yСоздайте конфигурацию в /etc/nginx/conf.d или в sites‑available. Пример сервера для Symfony:
server {
server_name domain.tld www.domain.tld;
root /var/www/html/symfony4/public;
location / {
# try to serve file directly, fallback to index.php
try_files $uri /index.php$is_args$args;
}
location ~ ^/index\.php(/|$) {
fastcgi_pass unix:/var/run/php7.1-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
# fastcgi_param APP_ENV prod;
# fastcgi_param APP_SECRET ;
# fastcgi_param DATABASE_URL "mysql://db_user:db_pass@host:3306/db_name";
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
internal;
}
location ~ \.php$ {
return 404;
}
error_log /var/log/nginx/project_error.log;
access_log /var/log/nginx/project_access.log;
} После внесения изменений перезагрузите Nginx:
service nginx reloadПримечание: fastcgi_pass может ссылаться на UNIX‑сокет PHP‑FPM (php7.1‑fpm.sock или php7.2‑fpm.sock) или на tcp‑порт (127.0.0.1:9000) — проверьте, какой сокет/порт создаёт ваша версия PHP‑FPM.
Установка PHP 7.2
Symfony 4 требует PHP >= 7.1.3; в этой инструкции мы устанавливаем PHP 7.2 на Debian 9.
Добавим репозиторий SURY для актуальных пакетов PHP и установим PHP 7.2:
sudo apt install ca-certificates apt-transport-https
wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -
sudo echo "deb https://packages.sury.org/php/ stretch main" | tee /etc/apt/sources.list.d/php.list
sudo apt update
sudo apt install php7.2Проверьте версию PHP:
php -vУстановите необходимые расширения для Symfony и интеграции с MySQL и Apache:
sudo apt install php7.2-cli php7.2-common php7.2-curl php7.2-gd php7.2-json php7.2-mbstring php7.2-mysql php7.2-xml libapache2-mod-php7.2Если вы используете Nginx, дополнительно установите php7.2-fpm:
sudo apt install php7.2-fpmПроверьте статус службы PHP‑FPM:
systemctl status php7.2-fpmСоветы по PHP‑FPM:
- Для Nginx укажите правильный путь сокета в fastcgi_pass (обычно /var/run/php/php7.2-fpm.sock или /var/run/php7.2-fpm.sock).
- При использовании OPcache убедитесь, что realpath_root передаётся как SCRIPT_FILENAME, чтобы OPcache корректно отслеживал изменения файлов.
Установка MySQL
Установите MySQL server:
apt-get install mysql-serverВо время установки система попросит подтвердить и задать пароль для root MySQL. После установки запустите безопасную настройку:
mysql_secure_installationСледуйте подсказкам: удалите анонимных пользователей, запретите удалённый вход root (если нужно), удалите тестовую базу, перезагрузите привилегии.
Установка Composer
Установим Composer глобально в /usr/local/bin:
php -r "copy('https://getcomposer.org/installer', '/tmp/composer-setup.php');"
sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composerПроверьте установку:
composer --versionУстановка Symfony 4
Перейдите в каталог webroot и создайте проект:
cd /var/www/html
composer create-project symfony/skeleton symfony4Symfony 4 устанавливается быстро — skeleton минимален и использует Symfony Flex. После установки откройте IP сервера в браузере — вы увидите стартовую страницу Symfony.

Далее настройте соединение с БД в файле .env проекта. Пример секции для Doctrine:
###> doctrine/doctrine-bundle ###
APP_ENV=dev
APP_DEBUG=1
APP_SECRET=bd4d4fxxxx035a97fxxxed13f18646f
# customize this line!
DATABASE_URL="mysql://db_user:[email protected]:3306/db_name"
###< doctrine/doctrine-bundle ###Замените db_user, db_pass, host и db_name на реальные параметры.
Настройка прав и владельца директорий
Symfony требует корректных прав на папки var и public (и иногда на vendor при разворачивании). Общая рекомендация:
cd /var/www/html/symfony4
chown -R www-data:www-data var public
find var -type d -exec chmod 775 {} \;
find var -type f -exec chmod 664 {} \;Если вы разворачиваете из CI/CD под другим пользователем, настройте совместное использование прав (ACL) или используйте umask в процессе деплоя.
Рекомендации по безопасности и бэстпрактики
- Всегда указывайте DocumentRoot на папку public. Никогда не делайте корнем приложения директорию проекта.
- Отключайте режим отладки в продакшене (APP_DEBUG=0).
- Используйте HTTPS (см. раздел SSL ниже).
- Ограничьте доступ к административным панелям по IP.
- Регулярно обновляйте пакеты и патчи.
Настройка Firewall
Простой пример с ufw:
apt-get install ufw
ufw allow OpenSSH
ufw allow 'Apache Full' # или 'Nginx Full'
ufw enableПроверьте статус:
ufw status verboseSSL (Let’s Encrypt)
Для получения бесплатного сертификата используйте certbot. Пример для Apache:
apt-get install certbot python-certbot-apache
certbot --apache -d domain.tld -d www.domain.tldДля Nginx аналогично используйте python‑certbot‑nginx и флаг –nginx.
Отладка и типичные ошибки
- 502 Bad Gateway при Nginx — проверьте путь до сокета PHP‑FPM и статус php‑fpm.
- 404 на статические ресурсы — проверьте правила try_files и права доступа.
- Проблемы с OPcache — убедитесь, что fastcgi_param SCRIPT_FILENAME указывает на реальный путь.
- Ошибки прав доступа — проверьте владельца и права каталогов var и public.
Полезные команды для отладки:
systemctl status apache2
systemctl status nginx
systemctl status php7.2-fpm
journalctl -u php7.2-fpm --since "10 minutes ago"
tail -n 200 /var/log/nginx/project_error.log
tail -n 200 /var/log/apache2/error.logСоветы по выбору Apache vs Nginx
- Apache легче интегрируется с mod_php и .htaccess; удобен для быстрых настроек.
- Nginx показывает лучшую производительность на статике и в высоконагруженных сценариях, требует PHP‑FPM.
- Если важно использовать .htaccess — выбирайте Apache. Если нужна высокая плотность соединений и проксирование — Nginx.
Миграция и совместимость
- Symfony 4 совместим с PHP 7.1.3+. При планировании обновления на Symfony 5/6 проверьте зависимости в composer.json и версии PHP.
- Если используете устаревшие бандлы для Symfony 2/3, проверьте их поддержку или замену.
Проверочные тесты и приёмочные критерии
Короткий чеклист для тестирования установки:
- На сервере доступна стартовая страница Symfony по IP/домену.
- Команда php -v показывает PHP 7.2.
- MySQL принимает соединения и создана тестовая БД.
- Composer установлен и работает.
- Веб‑сервер обслуживает index.php и статические файлы корректно.
- Папки var и public доступны веб‑серверу с нужными правами.
Роли и обязанности (кто что делает)
- DevOps: создание VPS, настройка брандмауэра, SSL, резервное копирование, мониторинг.
- Backend‑разработчик: настройка Symfony, .env, миграции базы данных, деплой.
- QA: проверка работоспособности приложения, сценарии приёмки, нагрузочное тестирование.
Типовой процесс развертывания (мини‑методология)
- Создать VPS, настроить SSH и бэкапы.
- Обновить систему, установить LAMP/LEMP зависимости.
- Настроить виртуальный хост и права доступа.
- Установить Composer и создать проект Symfony.
- Настроить .env и подключить БД.
- Настроить SSL и ufw.
- Выполнить smoke‑тесты и мониторинг.
Примеры команд для быстрого развёртывания (cheat sheet)
# Обновление
apt-get update && apt-get upgrade -y
# Apache
apt-get install apache2 -y
a2enmod rewrite
service apache2 reload
# Nginx
apt-get install nginx -y
service nginx reload
# PHP 7.2
sudo apt install ca-certificates apt-transport-https
wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -
sudo echo "deb https://packages.sury.org/php/ stretch main" | tee /etc/apt/sources.list.d/php.list
sudo apt update
sudo apt install php7.2 php7.2-fpm php7.2-mbstring php7.2-mysql -y
# MySQL
apt-get install mysql-server -y
mysql_secure_installation
# Composer
php -r "copy('https://getcomposer.org/installer', '/tmp/composer-setup.php');"
sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
# Создать проект Symfony
cd /var/www/html
composer create-project symfony/skeleton symfony4GDPR и приватность данных
Если приложение обрабатывает персональные данные, убедитесь, что:
- Доступ к данным ограничен по роли.
- Передача данных по сети идёт через HTTPS.
- Настроены бэкапы и политики хранения данных.
- Логи не содержат чувствительной информации в открытом виде.
Часто встречающиеся вопросы
Какие минимальные системные требования для Symfony 4?
Минимум PHP 7.1.3, рекомендовано 7.2+, 1 ГБ оперативной памяти для тестовой среды и 2+ ГБ для продакшена.
Можно ли использовать MariaDB вместо MySQL?
Да. MariaDB совместима и часто используется как альтернатива MySQL.
Как переключиться с Apache на Nginx?
Установите Nginx, настройте конфигурацию и проверьте PHP‑FPM. Отключите Apache, затем включите Nginx:
service apache2 stop
systemctl disable apache2
service nginx startКраткое резюме
Symfony 4 легко разворачивается на Debian 9 при соблюдении нескольких правил: корректный webroot (папка public), версия PHP 7.1.3+, настройки виртуального хоста и права на директории. Выбор между Apache и Nginx зависит от задач: удобство (.htaccess) vs производительность. Обязательно настройте HTTPS и базовые меры безопасности.
Важно: всегда тестируйте конфигурацию в staging перед переносом в продакшен.
Куда идти дальше
- Ознакомьтесь с официальной документацией Symfony по развертыванию и безопасности.
- Подумайте о настройке CI/CD для автоматического деплоя.
- Настройте мониторинг (Prometheus/Grafana, ELK) и резервное копирование БД.
Спасибо за внимание. Если нужны примеры деплоя, файлы systemd для службы, или помощь с миграцией на Symfony 5/6 — напишите, и я подготовлю отдельную инструкцию.
Часто задаваемые вопросы
Какой сокет указывать в fastcgi_pass для PHP‑FPM?
Проверьте наличие сокета в /var/run/php/ (например /var/run/php/php7.2-fpm.sock). Если сокета нет, PHP‑FPM может слушать TCP‑порт 9000 (127.0.0.1:9000).
Что сделать, если вы видите белую страницу или 500 ошибку?
Включите логирование и режим разработки локально (APP_DEBUG=1), проверьте логи веб‑сервера и PHP‑FPM. Часто проблема в правах или в неверном пути SCRIPT_FILENAME.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента