Быстрый старт
Оглавление · Далее: архитектура
Что требуется
- Node.js 24.x. Предпочтительна актуальная версия ветки 24 LTS.
- pnpm 12.8.1 — версия закреплена в корневом
packageManager. - Docker Engine или Docker Desktop с работающим Compose.
- Git; для работы с GitHub дополнительно удобен
gh, но локальный запуск его не требует.
Проверка окружения:
node --version
pnpm --version
docker version
docker compose version
docker version должен показывать не только Client, но и доступный Server.
На macOS Docker Desktop или другой Docker daemon нужно запустить заранее.
Production-override использует YAML-тег !reset: нужен Compose, который его поддерживает.
Если pnpm отсутствует, один из способов установки:
npm install --global pnpm@12.8.1
Не устанавливайте зависимости Strapi через корневой pnpm: это самостоятельный npm-проект, его стандартный запуск в этом репозитории выполняется через Docker.
Режим 1: Next на хосте, CMS и S3 в Docker
Без CMS можно выполнять typecheck и unit tests. Для build нужна CMS; полная
изолированная проверка доступна через node scripts/check-static-site.mjs.
Для host Next используйте Docker CMS/S3:
pnpm install --frozen-lockfile
pnpm setup
pnpm infra:up
pnpm cms:up
pnpm cms:token
pnpm cms:snapshot:external
pnpm cms:dry-run --snapshot var/content-import/external.json
pnpm cms:import --snapshot var/content-import/external.json
pnpm dev
Сайт — http://localhost:3000; CMS — http://127.0.0.1:1337/admin. Создайте администратора при первом открытии CMS. Read-only token хранится только в корневом .env; next.config читает его через process.loadEnvFile, а не через передаваемый дочерним процессам Node flag.
Публикация записи через Content Manager меняет сайт после обновления страницы. Импорт — явная одноразовая команда: старые редакторские правки по sourceId сохраняются. Описание snapshots, dry-run и безопасного повторного запуска — в CMS.
Режим 2: весь стек в Docker
После pnpm setup и pnpm infra:up:
pnpm cms:up
pnpm cms:token
pnpm cms:snapshot:external
pnpm cms:import --snapshot var/content-import/external.json
pnpm stack:up
| Что | Адрес |
|---|---|
| Сайт | http://localhost:8080 |
| Strapi | http://cms.localhost:8080/admin |
Если cms.localhost не разрешается, проверьте DNS/hosts:
curl --resolve cms.localhost:8080:127.0.0.1 http://cms.localhost:8080/admin
stack:up включает Compose profile app, собирает образы и ждёт healthcheck.
Первый запуск Strapi заметно дольше запуска Next.js: собираются CMS и её admin UI.
Обычный pnpm dev и Docker-сайт могут работать одновременно на портах 3000 и 8080,
но не запускайте второй воркер без намерения увеличить число исполнителей.
Первая проверка
curl --fail http://localhost:3000/api/health
curl --fail http://localhost:3000/api/trpc/news.list
Для Docker-сайта замените 3000 на 8080. Health возвращает {"status":"ok"}.
Ответ tRPC содержит объект result.data со списком новостей.
Проверка health подтверждает ответ Next.js, но не выполнение фоновой задачи.
Отправка учебного события без вывода секрета в терминал:
node --env-file=.env --input-type=module <<'JS'
const response = await fetch('http://localhost:3000/api/webhooks/strapi', {
method: 'POST',
headers: {
'content-type': 'application/json',
authorization: `Bearer ${process.env.STRAPI_WEBHOOK_SECRET}`,
},
body: JSON.stringify({
event: 'entry.update', model: 'news', entry: { documentId: 'learning-demo' },
}),
});
console.log(response.status, await response.text());
JS
Ожидаемый ответ webhook — 200 и {"revalidated":true}. При следующем
посещении Next.js обновит HTML из CMS.
Остановка и обычный рабочий цикл
Для процессов в терминалах — Ctrl+C. Для контейнеров:
pnpm stack:down
Тома сохраняются. Команда с down -v удалила бы данные — она не нужна для обычной
остановки. Следующий stack:up поднимет сохранённые базы и файлы.
pnpm check
git status --short
git diff
git add <изменённые-файлы>
git commit -m '<описание-завершённого-этапа>'
Последние три строки — шаблон, замените значения в угловых скобках. Push в main
запускает реальный деплой; учебные эксперименты делайте в отдельной ветке.
Где смотреть код
Команды внешнего импорта выше сохранены как исторический ручной путь. Автоматические полные стенды используют опубликованную текущую CMS и Garage: инструкция.