Обновление версии PHP - в докер-контейнере, стажировка программистов
Primary tabs
Создаём локальную копию удалённого репозитория, с которым будем работать
git clone httрs://<your-name>@bitbucket.org/vedro-compota/ktu-articles.git
А так же клонируем репозитории (если это не было сделано раньше), без которых не получится запустить данный проект
git clone https://<your-name>@bitbucket.org/vedro-compota/ktu-backend-pack.git
git clone https://<your-name>@bitbucket.org/vedro-compota/ktu-backend-test.git
в этих репозиториях выполняем команду composer install, если этого не было сделано ранее
Затем переходим в папку проекта, над которым нужно работать
cd /var/www/ktu-articles
Подтягиваем зависимости (создаётся папка vendor)
composer install
Собираем и запускаем контейнеры
make docker.start.all
Можно убедиться, что контейнеры запущены
docker ps
Посмотрим, какая версия php сейчас у нас в контейнере
docker exec -it ktu-articles_php php -v
например:
PHP 8.3.0 (cli) (built: Dec 16 2023 02:58:37) (NTS)
Запустим функциональные тесты
make cept.functional
на выходе должно получиться что-то вроде этого:
Codeception PHP Testing Framework v5.1.2 httрs://stand-with-ukraine.pp.ua App\Tests.functional Tests (5) ------------------------------------------------------------------------------------ ✔ PostCest: Test post creating by simple user vasya(0.35s) ✔ PostCest: Can view prevously created post(0.26s) ✔ PostCest: Test post creating validate(0.23s) ✔ PostCest: Can not edit by simple user article created by other simple user(0.22s) ✔ PostCest: Can edit and delete by admin article created by other simple user(0.22s) ------------------------------------------------------------------------------------- Time: 00:02.128, Memory: 46.50 MB OK (5 tests, 9 assertions)
Далее собственно работа над проектом
Сначала убедимся, что мы находимся в ветке мастер
git branch
* master
На всякий случай обновим мастер, чтобы точно ответвится от последней версии
git pull
Already up to date.
Создадим новую ветку по имени и ID задачи и сразу перейдём в неё
git checkout -b vladimir1978/updatingPhp/BACK-116
Отредактируем файл docker/Dockerfile
список поддерживаемых образов: https://github.com/docker-library/docs/b...
найдём версию xdebug, которая совместима с PHP 8.4.7: https://xdebug.org/docs/compat
было:
FROM php:8.3.0-fpm-alpine3.19
RUN apk --no-cache update \
&& apk add --no-cache autoconf g++ make \
postgresql-dev linux-headers
RUN pecl install xdebug-3.3.0 \
...
стало:
FROM php:8.4.7-fpm-alpine3.21
RUN apk --no-cache update \
&& apk add --no-cache autoconf g++ make \
postgresql-dev linux-headers
RUN pecl install xdebug-3.4.0 \
...
Изменили образ, теперь нужно пересобрать все контейнеры
make docker.rebuild.all
Посмотрим, какая версия php сейчас у нас в контейнере
docker exec -it ktu-articles_php php -v
должна стать 8.4.7:
PHP 8.4.7 (cli) (built: May 8 2025 21:27:24) (NTS)
Отредактируем файл composer.json
Версия 2.12.0 DoctrineBundle — стабильная и протестированная, совместимая с Doctrine ORM 2.x и 3.x, и она сохраняет ожидаемое поведение со старым способом задания id (передаётся id, равный null).
Поэтому, оставим фиксированную версию doctrine/doctrine-bundle:
"doctrine/doctrine-bundle": "2.12.0"
Необязательно, но (так как у нас уже версия PHP 8.4 и полифилл для версии 8.3 нам уже ни для чего не нужен) можно поддержать традицию и добавить в "replace" строчку:
"symfony/polyfill-php83": "*"
Применим наши изменения и заодно обновим все зависимости проекта до актуальных версий
composer update
Ещё раз запустим функциональные тесты
make cept.functional
Если видим, что задача решена и всё ОК, - добавляем, коммитим и пушим изменения
git add . git commit . -m "Обновлена версия php до 8.4.7 для бэкэнда статей" git push git push --set-upstream origin vladimir1978/updatingPhp/BACK-116
Материалы
Поддерживаемые образы: https://github.com/docker-library/docs/b...
Найти версию xdebug, которая совместима с PHP 8.4: https://xdebug.org/docs/compat
Доходчиво о командах composer install и composer update: https://medium.com/phpyh/dont-ignore-com...
- Log in to post comments
- 183 reads