Команда cfg
cfg разворачивает и поддерживает конфигурацию проекта: файл .env, секрет
WINTER_KEY, Docker-обвязку и автодополнение оболочки. Это первое, что запускается
при создании проекта, и то, к чему возвращаются при настройке окружения.
Что такое cfg и зачем
cfg — команда управления конфигурацией проекта.
Проблема. Новый проект нужно привести в рабочее состояние: создать .env,
сгенерировать секретный ключ, при желании — Docker-файлы и автодополнение. Делать
это руками — легко забыть шаг.
Решение. cfg собирает эти операции в субкоманды, а cfg init выполняет
базовую настройку одной командой. Об этом и раздел.
Субкоманды
| Субкоманда | Назначение |
|---|---|
init |
Патчит composer.json, создаёт .env, генерирует ключ, кладёт stub-мету |
key |
Управление WINTER_KEY |
env |
Управление файлом .env |
docker |
Генерация Docker-файлов |
completion |
Установка/печать автодополнения оболочки |
cfg init
Приводит проект в рабочее состояние (вызывается автоматически при
composer create-project):
php call cfg initПоследовательность: патч composer.json (перезапись name и description,
очистка authors/keywords) → создание .env → генерация WINTER_KEY.
cfg key — секретный ключ
| Флаг | Действие |
|---|---|
key -g |
Сгенерировать/перегенерировать ключ (64 hex = 32 байта) и записать в .env |
key -s |
Показать текущий ключ |
php call cfg key -g # новый WINTER_KEYНужен .env
key -g предупредит и прервётся, если .env отсутствует — сначала создайте его
(cfg env -i).
cfg env — файл окружения
| Флаг | Действие |
|---|---|
env -i |
Создать .env из шаблона (пропускает, если существует) |
env -s |
Напечатать загруженный $_ENV |
env -s --file |
Напечатать сырое содержимое .env |
cfg docker — Docker-обвязка
php call cfg dockerСоздаёт Dockerfile, docker-compose.yml, .dockerignore и каталог docker/ со
скриптом запуска и настройками PHP. Опций у команды нет — образ один, под Swoole, а
режим выбирается переменной при запуске:
| Запуск | Режим |
|---|---|
docker compose up |
Рабочий: opcache включён, наблюдателя нет |
DEV=true docker compose up |
Разработка: перезапуск по изменению файлов, opcache выключен |
Расширения PHP и драйверы БД
Ставятся не правкой Dockerfile, а отдельными скриптами в docker/dependencies/.
Сборка выполняет их в порядке числового префикса; в комплекте идут четыре:
| Скрипт | Что ставит |
|---|---|
10-bcmath.sh |
bcmath — точная арифметика (деньги, Number) |
20-pgsql.sh |
pdo_pgsql + pgsql — PostgreSQL |
30-mysql.sh |
pdo_mysql — MySQL / MariaDB |
40-redis.sh |
phpredis — клиент Redis |
Ненужные просто удалите: чего нет в каталоге, того не будет и в образе.
Каждый скрипт самодостаточен — сам ставит всё, что нужно для сборки, и сам это снимает. Поэтому его можно скопировать в другой проект или запустить руками, а свой написать по тому же образцу:
#!/bin/sh
set -e
# intl — форматирование дат и чисел, сортировка по локали.
if php -m | grep -qi '^intl$'; then
echo "intl already present — skip"
else
apk add --no-cache icu-libs \
&& apk add --no-cache --virtual .intl-deps $PHPIZE_DEPS icu-dev \
&& docker-php-ext-install -j"$(nproc)" intl \
&& apk del .intl-deps
fiСущественны здесь три вещи:
- Проверка
php -m— расширение может уже оказаться в базовом образе; тогда скрипт ничего не делает и не тратит время сборки. --virtual— компилятор и заголовки ставятся под общим именем.intl-depsи снимаются одной командой, поэтому в готовый образ не попадают. Остаётся только рантайм-библиотека (icu-libs), без которой расширение не загрузится.$PHPIZE_DEPS— набор для сборки расширений, заданный базовым образом PHP (компилятор,make,autoconf,re2c). Перечислять пакеты руками не нужно.
Упавший скрипт останавливает сборку
Ошибка в любом из скриптов роняет сборку образа — намеренно. Иначе получился бы зелёный образ с недостающим расширением, и узнали бы вы об этом при первом обращении к базе, уже в рантайме.
cfg completion — автодополнение
| Флаг | Действие |
|---|---|
| (без флага) | Напечатать скрипт в stdout |
-i |
Установить |
-if |
Установить с перезаписью |
php call cfg completion -iОболочка определяется по $SHELL: zsh → ~/.zsh/completions/_call (добавляет
fpath в ~/.zshrc), иначе bash → ~/.bash_completion.d/call.
Дальше
- Установка — где
cfg initв цепочке старта - Конфигурация —
.envи классы-конфигураторы - Консоль — обзор — все команды