Гид по технологиям

Установка Symfony 4 на Debian 9 — пошаговый LAMP/LEMP стек

• 7 min read • DevOps • Обновлено 19 Nov 2025
Установка Symfony 4 на Debian 9 — пошагово
Установка Symfony 4 на Debian 9 — пошагово

В этой статье подробно показано, как развернуть 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‑ключ

Создание сервера на DigitalOcean

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

Если вы используете PuTTY, при первом подключении сервер запросит сохранение ключа — подтвердите.

Подключение через 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.

Страница по умолчанию 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 symfony4

Symfony 4 устанавливается быстро — skeleton минимален и использует Symfony Flex. После установки откройте IP сервера в браузере — вы увидите стартовую страницу Symfony.

Стартовая страница 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 verbose

SSL (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.

Отладка и типичные ошибки

  1. 502 Bad Gateway при Nginx — проверьте путь до сокета PHP‑FPM и статус php‑fpm.
  2. 404 на статические ресурсы — проверьте правила try_files и права доступа.
  3. Проблемы с OPcache — убедитесь, что fastcgi_param SCRIPT_FILENAME указывает на реальный путь.
  4. Ошибки прав доступа — проверьте владельца и права каталогов 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: проверка работоспособности приложения, сценарии приёмки, нагрузочное тестирование.

Типовой процесс развертывания (мини‑методология)

  1. Создать VPS, настроить SSH и бэкапы.
  2. Обновить систему, установить LAMP/LEMP зависимости.
  3. Настроить виртуальный хост и права доступа.
  4. Установить Composer и создать проект Symfony.
  5. Настроить .env и подключить БД.
  6. Настроить SSL и ufw.
  7. Выполнить 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 symfony4

GDPR и приватность данных

Если приложение обрабатывает персональные данные, убедитесь, что:

  • Доступ к данным ограничен по роли.
  • Передача данных по сети идёт через 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.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро