Мазмұнға өту
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 жылғы шілде
Мәселе

2023 жылы жазылған Symfony-дегі шағын әлеуметтік желі ескірген стекте тұрып қалған: құпиясөздер md5-те сақталатын, авторизация өз бетінше жазылған, тесттер мен автоматты тексерулер жоқ еді — кез келген жаңарту қосымшаны бұзып алу қаупін төндіретін.

Шектеулер

Стекті бар пайдаланушыларды жоғалтпай жаңарту керек болды: ескі md5-құпиясөздер заманауи хешке көшкенге дейін жұмыс істеуі тиіс. Тесттер болмағандықтан, функционалдық тесттер авторизацияны қайта жасауға дейін жазылды.

Не істедім
  • PHP 8.3, Symfony 6.4 LTS және Doctrine ORM 3.6 нұсқаларына бір келісілген қадаммен жаңарту: +2226/−2058 жол, пакеттер мен конфигурация жаңа нұсқаларға сәйкестендірілді
  • Өз бетінше жазылған авторизация Symfony Security-ге ауыстырылды: сессиялар және барлық POST-әрекеттердің CSRF-қорғауы
  • Құпиясөздер md5-тен Symfony PasswordHasher-дің заманауи хештеуіне көшірілді; ескі хеш алғашқы сәтті кіру кезінде пайдаланушыға байқаусыз қайта есептеледі
  • Негізгі сценарийлерге 7 функционалдық тест: лента, тіркелу және кіру, жариялау, түсініктемелер, лайктар, шығу, тілді ауыстыру
  • GitHub Actions-та CI/CD: Composer мен синтаксисті тексеру, YAML/Twig/контейнер линтерлері, PostgreSQL-де миграциялар мен PHPUnit, Docker-образды GHCR-ға жариялау
  • Интерфейс орыс және ағылшын тілдерінде, Doctrine схемасы модельмен синхрондалды, демо-модуль жойылды, посттарға лайктар қосылды
Архитектура
Symfony 6.4 / PHP 8.3 → Symfony Security → Doctrine ORM 3.6 + миграциялар → PostgreSQL-дегі PHPUnit → GitHub Actions → GHCR
Нәтиже

Жоба пайдаланушыларды жоғалтпай қолдау көрсетілетін стекке көшірілді: ескі құпиясөздер кіру кезінде қайта хештеледі, ал әр өзгеріс образ жиналғанға дейін CI-да линтерлерден, миграциялардан және тесттерден өтеді.

Нені қайта қолдануға болады
Кіру кезінде құпиясөздерді md5-тен заманауи хешке байқаусыз көшіру Symfony CI-пайплайны: линтерлер, миграциялар, PostgreSQL-дегі PHPUnit, GHCR-дағы образ Legacy-ді жаңарту реті: алдымен тесттер, содан кейін өзгерістер