Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Skeleton

Это минимально возможная структура проекта, для того чтобы создавать ваше приложение.
По умолчанию она оптимизированная для разработки, но имеет встроенную продуктовую сборку!!!

Требования:

  1. docker - обязательно.
  2. git - чтобы склонировать проект или пушить обновления
  3. make - опционально можно команды выполнять cli.

DEV (для разработки)

По умолчанию из коробки все настроено для разработки, так как в первую очередь с этим работают разработчики, но есть возможность установить настройки для production.

Usage

git clone https://github.com/cekta/skeleton.git {you_project_name}
cd {you_project_name}
git remote set-url origin {git url для вашего репозитория}
make dev

По умолчанию проект будет доступен на http://localhost:8080

Shell

Войти в dev окружение

make shell

make {command} - это команды выполняемые с host системы
composer {command} - это команды которые внутри dev окружения

Например, эта команда запускается на host системе.

make test

Эта команда делает те же действия, но из dev окружения.

composer test

Внутри dev окружения могут быть и другие полезные команды.

Update

Если вы изменили в проекте PHP файлы, конструктор класса, то чтобы изменения применились необходимо выполнить build.

make build

из dev окружения:

composer build

Full UPDATE

Чтобы применить обновления вашего проекта из репозитория, на host системе выполните:

git pull # обновляемся из origin
make refresh # удаляем все что было и собираем снова
make dev # запускаем новую версию

PRODUCTION (сборка для деплоя)

В разных компаниях и разных проектах используются разные политики выкладки релизов (build и deploy) и разные инструменты, их выбор индивидуальный, нельзя сделать решение для всех, но можно сделать основу которую можно кастомизировать под ваши реалии.

Внутри SKELETON есть минимальный пример сборки production image для docker, который можно запушить в docker registry и от туда распространять по вашему продуктовому окружению, вашими инструментами деплоя.

Сборка production версии app

make image # только app без сборки зависимостей вроде db, s3 и тд

Вы можете открыть инструкции по сборке и кастомизировать их, например добавить свой tag, указать registry, передать аргументы сборки, изменить релизные конфиги и тд.

После сборки проекта обычно image необходимо запушить на docker registry, а уже в дальнейшем его разворачивают на боевых или тестовых серверах.

Пример запуска production app у вас на компьютере:

docker run -p 8090:8080 --rm cekta-app:latest

Продуктовая версия будет на http://localhost:8090

Обратите внимание другие сервисы такие как db(mysql/pgsql), redis, opensearch, s3 и тд. Необходимо администрировать вам, вы лишь можете с переменных окружения задавать актуальные адреса и учетные данные.

Отличия base, dev, production.

Как бы нам не хотелось иметь абсолютно одинаковые окружения, production окружение отличается от окружения разработки, отличия:

  1. На production не нужен xdebug, на dev среде он может быть полезным.
  2. На production не нужны phpunit, phpcs, статический анализ, это все надо только на этапе разработки.
  3. На production не нужен даже composer, управление пакетами нужно только на этапе разработки и сборке релизной версии.
  4. Логирование сообщений в json формате, отключение различных debug режимов, оптимизация производительности и тд.

base and dev and production environment

На картинке видно что имеется base которая является общей как для dev так и для production.

В base необходимо прописывать общие зависимости, например php extension pdo или любые другие extension которые нужны в обоих случаях, соответственно в dev нужно прописывать то что нужно ТОЛЬКО на dev версии, а в production ТОЛЬКО то что нужно в production.

Например в production можно добавлять различные конфиги оптимизирующие производительность.

Для сборки production версии в начале сборка осуществляется в dev версии, убеждаемся что ее можно собирать для релиза, потом убираем dev пакеты из сборки, делаем composer build только теперь можно эти файлы добавлять в production окружение.