Към съдържанието
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 pipeline за Symfony: линтери, миграции, PHPUnit на PostgreSQL, образ в GHCR Ред на обновяване на legacy: първо тестове, после промени