Учебное руководство
Главы руководства
На этой странице

Быстрый старт

Оглавление · Далее: архитектура

Что требуется

  • 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

Если 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: инструкция.