Перейти к содержимому
N1
Legacy · Symfony · обновление стека

Модернизация Symfony-приложения: от проекта 2023 года к актуальному стеку

Клиент: Личный проект Категория: Legacy Стек: PHP 8.3, Symfony 6.4, Symfony Security, Doctrine ORM 3.6 и Migrations, PostgreSQL 18, PHPUnit, Twig, Bootstrap 5, Docker Compose, GitHub Actions, GHCR Срок: исходная версия — 2023, модернизация — июль 2026
Проблема

Мини-соцсеть на Symfony, написанная в 2023 году, застряла на устаревшем стеке: пароли хранились в md5, авторизация была самописной, тестов и автоматических проверок не было — любое обновление грозило сломать приложение.

Ограничения

Стек нужно было обновить, не потеряв существующих пользователей: старые md5-пароли должны работать до перехода на современный хеш. Тестов не было, поэтому функциональные тесты написаны до переделки авторизации.

Что сделал
  • Обновление до PHP 8.3, Symfony 6.4 LTS и Doctrine ORM 3.6 одним согласованным шагом: +2226/−2058 строк, пакеты и конфигурация приведены к новым версиям
  • Самописная авторизация заменена на Symfony Security: сессии и CSRF-защита всех POST-действий
  • Пароли переведены с md5 на современное хеширование Symfony PasswordHasher; старый хеш прозрачно пересчитывается при первом успешном входе
  • 7 функциональных тестов на ключевые сценарии: лента, регистрация и вход, публикация, комментарии, лайки, выход, смена языка
  • CI/CD в GitHub Actions: проверка Composer и синтаксиса, линтеры YAML/Twig/контейнера, миграции и PHPUnit на PostgreSQL, публикация Docker-образа в GHCR
  • Интерфейс на русском и английском, схема Doctrine синхронизирована с моделью, демо-модуль удалён, добавлены лайки постов
Архитектура
Symfony 6.4 / PHP 8.3 → Symfony Security → Doctrine ORM 3.6 + миграции → PHPUnit на PostgreSQL → GitHub Actions → GHCR
Результат

Проект переведён на поддерживаемый стек без потери пользователей: старые пароли перехешируются при входе, а каждое изменение проходит линтеры, миграции и тесты в CI до сборки образа.

Что можно переиспользовать
Прозрачная миграция паролей с md5 на современный хеш при входе CI-пайплайн Symfony: линтеры, миграции, PHPUnit на PostgreSQL, образ в GHCR Порядок обновления legacy: сначала тесты, потом переделки