Symfony в Docker

Описание процесса установки и настройки Sympfony в Docker.

Для начала нового проекта потребуется:

  1. Подготовить Docker файл, содержащий строку описывающую на основе какого образа стоит собирать контейнер:
FROM php:7.4-apache

# install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# обновление
RUN apt-get upgrade -y
RUN apt-get update

# установка архиваторов
RUN apt-get install zip unzip
  1. Создать docker-compose.yaml, указать папку, в которой будет находиться проект:
version: "3"

services:
  server:
    build: ./php
    ports:
      - "8088:80"
    volumes:
      - {PROJECT_FOLDER_RELATIVE_COMMON_FOLDER}:/var/www/html

PROJECT_FOLDER_RELATIVE_COMMON_FOLDER — путь к папке с проектом, относительно общей папки виртуальной машины. Внутри папки не должно быть файлов (нужно для разворачивания проекта в папке html внутри виртуальной машины).

  1. Развернуть контейнер и зайти в него:
docker ps
docker exec -it ID bin/bash
  1. Выполнить установку Sympfony (создается скелет приложения):
composer create-project symfony/skeleton .
  1. Выйти из контейнера. Добавить в Docker файл строки:
ENV APACHE_DOCUMENT_ROOT /var/www/html/public

RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf

# install mod_rewrite
RUN a2enmod rewrite

RUN mkdir /var/www/html/var/
RUN chmod -R 777 /var/www/html/var/

Особое внимание на последние две строки, их отсутствие приведет к возникновению ошибки:

Unable to create the «cache» directory (/var/www/html/var/cache/dev)

  1. Добавить в docker-compose.yaml строку в секцию volumes, исключающую синхронизацию папки с переменными:
      - /var/www/html/var
  1. Создать в папке PROJECT_FOLDER_RELATIVE_COMMON_FOLDER/public файл .htaccess со следующим содержанием:
<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

Это нужно для того, чтобы не возникла ошибка «An error occurred while loading the web debug toolbar.» при использовании панели отладки.

Для ускорения работы приложения, стоит установить OPcache, этот процесс описан в: «Установка OPcache в Docker контейнер & тюнинг«