Оригинал: Symfony and Docker: Advanced DevOps Integration

Перевод для канала Мы ж программист

Symfony – это мощный PHP-фреймворк, широко используемый для разработки веб-приложений.

Для оптимизации процессов разработки и развертывания Docker стал важным инструментом для команд DevOps.

В этой статье мы рассмотрим, как эффективно интегрировать Symfony с Docker, используя передовые методы для оптимизации рабочих процессов разработки, тестирования и производства.

Содержание

  1. Введение в Symfony и Docker
  2. Почему стоит использовать Docker для проектов Symfony?
  3. Настройка проекта Symfony с помощью Docker
  4. Дополнительные возможности Docker для Symfony
  5. Оптимизация Docker для приложений Symfony
  6. Развертывание Symfony с помощью Docker
  7. Заключение

1. Введение в Symfony и Docker

Symfony упрощает разработку веб-приложений благодаря многократно используемым компонентам, а Docker обеспечивает легкую переносимую среду для последовательного запуска приложений в различных средах.

Интеграция Symfony с Docker гарантирует, что ваше приложение будет вести себя одинаково как на машине разработчика, так и в производственной среде.


2. Почему стоит использовать Docker для проектов Symfony?

Консистентность 🩸.

Обеспечивает одинаковое окружение при разработке, постановке и производстве.

Изоляция 🎁

Избегайте конфликтов зависимостей, изолируя приложения.

Масштабируемость 📮

Упрощает масштабирование с помощью контейнеров для микросервисов.

Эффективность 📥

Сокращение использования системных ресурсов по сравнению с традиционными виртуальными машинами.


3. Настройка проекта Symfony с помощью Docker

Шаг 1: Установите Docker

Установите Docker Desktop для вашей операционной системы (Windows, macOS или Linux).

Убедитесь, что Docker Compose включен.

Шаг 2: Создайте приложение Symfony

Если у вас нет проекта Symfony, создайте его с помощью Composer:

Bash
composer create-project symfony/skeleton my-symfony-app
cd my-symfony-app

Шаг 3: Создайте файл docker-compose.yml

Этот файл определяет сервисы (контейнеры) для вашего проекта Symfony.

Создайте файл docker-compose.yml в корневом каталоге вашего приложения Symfony:

YAML
version: '3.8'

services:
  php:
    image: php:8.1-fpm
    container_name: symfony_php
    volumes:
      - ./app:/var/www/html
    environment:
      - APP_ENV=dev
    ports:
      - "9000:9000"
      
  nginx:
    image: nginx:latest
    container_name: symfony_nginx
    ports:
      - "8080:80"
    volumes:
      - ./app:/var/www/html
      - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php

  db:
    image: mysql:8.0
    container_name: symfony_db
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: symfony
      MYSQL_USER: symfony
      MYSQL_PASSWORD: symfony
    ports:
      - "3306:3306"

Шаг 4: Настройте Nginx для Symfony

Создайте папку nginx и добавьте файл nginx.conf:

Nginx
server {
    listen 80;
    server_name localhost;

    root /var/www/html/public;
    index index.php;

    location / {
        try_files $uri /index.php$is_args$args;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass symfony_php:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

Шаг 5: Запустите контейнеры

Выполните следующую команду для запуска контейнеров:

Bash
docker-compose up -d

Откройте http://localhost:8080 в своем браузере, чтобы увидеть ваше Symfony-приложение, работающее в Docker.


4. Дополнительные возможности Docker для Symfony

4.1 Использование многоэтапных сборок

Оптимизируйте Docker-образы, используя многоступенчатые сборки для разделения этапов сборки и выполнения.

Обновите Dockerfile для сервиса PHP:

Dockerfile
# Stage 1: Build
FROM composer:2 as composer
COPY . /app
WORKDIR /app
RUN composer install --no-dev --optimize-autoloader

# Stage 2: Runtime
FROM php:8.1-fpm
COPY --from=composer /app /var/www/html
WORKDIR /var/www/html

4.2 Кэширование зависимостей

Добавьте объем кэша для зависимостей Composer, чтобы ускорить сборку:

YAML
volumes:
  - composer_cache:/root/.composer

volumes:
  composer_cache:

5. Оптимизация Docker для приложений Symfony

5.1 Конфигурация для конкретной среды

Используйте переопределения Docker Compose для различных сред (например, docker-compose.override.yml для разработки).

5.2 Постоянное хранилище данных

Примонтируйте тома базы данных для постоянного хранения:

YAML
volumes:
  - db_data:/var/lib/mysql
volumes:
  db_data:

5.3 Мониторинг и ведение логов

Интегрируйте такие инструменты, как ELK Stack (Elasticsearch, Logstash, Kibana) или Prometheus, для мониторинга и ведения логов.


6. Развертывание Symfony с помощью Docker

Шаг 1: Создайте файл Docker Compose для продуктовой среды

Доработайте docker-compose.prod.yml для прода:

YAML
services:
  php:
    image: php:8.1-fpm
    build:
      context: .
      target: runtime
    environment:
      - APP_ENV=prod
      - APP_SECRET=your_secret_key
    volumes:
      - ./app:/var/www/html:ro
    ports:
      - "9000:9000"

Шаг 2: Развертывание на сервере

Скопируйте приложение и конфигурацию Docker на сервер и запустите службы:

Bash
docker-compose -f docker-compose.prod.yml up -d

7. Заключение

Интеграция Symfony с Docker позволяет создать последовательную, переносимую и масштабируемую среду для ваших приложений.

Расширенные возможности, такие как многоступенчатые сборки, кэширование и конфигурации, учитывающие особенности среды, повышают эффективность и производительность.

Использование Docker обеспечивает бесперебойный рабочий процесс DevOps, от локальной разработки до развертывания в продуктовом окружении.