В 19-м уроке я расскажу, как правильно вывести ваш проект в «боевой режим», задеплоить его на сервер. Мы разберём настройку production-окружения, Docker-контейнеризацию, деплой на примере Heroku, а также подключение HTTPS и домена. В конце урока вас ждут практические задания, которые помогут закрепить материал.
Настройка окружения для Production
Перед деплоем важно подготовить Symfony для работы в production-режиме. В отличие от dev-окружения, здесь отключается отладочная информация, кэш оптимизируется, а зависимости устанавливаются без «лишних» пакетов.
Шаг 1: Переключение окружения
В файле .env измените значение переменной APP_ENV на prod:
APP_ENV=prod APP_DEBUG=0
Убедитесь, что APP_DEBUG установлен в 0, чтобы избежать утечки чувствительной информации.
Шаг 2: Установка зависимостей без dev-пакетов
Запустите команду:
composer install --no-dev --optimize-autoloader
Флаг --no-dev удалит пакеты, которые нужны только для разработки (например, отладчик), а --optimize-autoloader ускорит загрузку классов.
Шаг 3: Очистка и оптимизация кэша
Выполните:
php bin/console cache:clear --env=prod --no-debug php bin/console cache:warmup --env=prod
Практическое задание 1:
Создайте локальное production-окружение:
- Склонируйте ваш проект в новую папку.
- Выполните шаги 1–3.
- Запустите
php -S 0.0.0.0:8000 -t publicи проверьте работу через браузер.
Docker-контейнеризация Symfony
Docker упрощает деплой, упаковывая приложение в изолированные контейнеры. Создадим базовую конфигурацию.
Шаг 1: Создание Dockerfile
Добавьте файл Dockerfile в корень проекта:
# Используем официальный образ PHP с Apache
FROM php:8.2-apache
# Устанавливаем зависимости
RUN apt-get update && apt-get install -y \
git \
unzip \
libzip-dev \
&& docker-php-ext-install zip pdo_mysql
# Копируем проект в контейнер
COPY . /var/www/html
# Настраиваем Apache
RUN a2enmod rewrite
COPY ./docker/apache.conf /etc/apache2/sites-available/000-default.conf
# Устанавливаем Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Устанавливаем зависимости
RUN composer install --no-dev --optimize-autoloader
# Настраиваем права
RUN chown -R www-data:www-data /var/www/html/var
Шаг 2: Настройка Apache
Создайте файл docker/apache.conf:
<VirtualHost *:80>
DocumentRoot /var/www/html/public
<Directory /var/www/html/public>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Шаг 3: Docker Compose
Добавьте docker-compose.yml для работы с MySQL:
version: '3.8' services: app: build: . ports: - "80:80" depends_on: - db environment: DATABASE_URL: "mysql://user:password@db:3306/main_db" db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: root_password MYSQL_DATABASE: main_db MYSQL_USER: user MYSQL_PASSWORD: password volumes: - mysql_data:/var/lib/mysql volumes: mysql_data:
Практическое задание 2:
- Соберите контейнер:
docker-compose build. - Запустите:
docker-compose up -d. - Откройте
http://localhostи убедитесь, что проект работает.
Деплой на Heroku
Heroku облачная платформа, которая поддерживает Docker. Рассмотрим деплой через Git.
Шаг 1: Подготовка
- Установите Heroku CLI.
- Создайте файл
heroku.ymlв корне проекта:
build: docker: web: Dockerfile
Шаг 2: Создание приложения
Выполните в терминале:
heroku login
heroku create your-app-name
heroku stack:set container
git push heroku main
Шаг 3: Настройка базы данных
Добавьте плагин JawsDB MySQL:
heroku addons:create jawsdb:mysql
Получите URL БД:
heroku config:get DATABASE_URL
Обновите DATABASE_URL в .env.prod.local на Heroku через настройки панели.
Практическое задание 3:
- Задеплойте ваш проект на Heroku.
- Проверьте работу через сгенерированный URL (например,
https://your-app-name.herokuapp.com).
Настройка HTTPS и домена
Без HTTPS современный сайт не может считаться безопасным. Настроим его через Let’s Encrypt.
Шаг 1: Покупка домена
Купите домен на любом регистраторе (например, Reg.ru). В настройках DNS укажите запись CNAME на адрес Heroku (например, your-app-name.herokuapp.com).
Шаг 2: Подключение HTTPS на Heroku
Heroku автоматически предоставляет сертификат для домена. В терминале выполните:
heroku certs:auto:enable
Добавьте домен в приложение:
heroku domains:add your-domain.com
Шаг 3: Ручная настройка HTTPS (для AWS EC2)
Если вы используете AWS EC2, установите Certbot:
sudo apt-get install certbot python3-certbot-nginx
Запустите:
sudo certbot --nginx -d your-domain.com
Certbot автоматически обновит конфиг Nginx и сертификаты.
Практическое задание 4:
- Привяжите свой домен к Heroku или AWS.
- Убедитесь, что сайт доступен по HTTPS.
Итоги 19-го урока
Мы прошли весь путь от настройки production-окружения до деплоя на сервер. Теперь ваш проект доступен пользователям. Если возникнут ошибки, проверьте логи через heroku logs --tail или docker-compose logs.
Полный курс с уроками по Symfony для начинающих: https://max-gabov.ru/symphony-dlya-nachinaushih
Поддержка автора осуществляется с помощью специальной формы ниже, предоставленной сервисом «ЮMoney». Все платёжные операции выполняются на защищённой странице сервиса, что обеспечивает их корректность и полную безопасность.


