База знаний

Strapi — open-source Headless CMS для тех, кто хочет владеть своими данными

Полный разбор Strapi 5: что это, как устроена архитектура, какие API доступны из коробки, как деплоить, сколько стоит и когда Strapi — правильный выбор, а когда лучше посмотреть в сторону облачных CMS.

Опубликовано Обновлено

Strapi — самая популярная open-source Headless CMS на Node.js. Вы разворачиваете её на своём сервере, данные хранятся в вашей базе, а контент отдаётся через REST и GraphQL API. По сути — готовый бэкенд для управления контентом, который можно подключить к любому фронтенду.

📌
Главное: Strapi бесплатна (лицензия MIT), работает с PostgreSQL/MySQL/SQLite, генерирует API автоматически для каждой контент-модели. Весь код открыт, данные ваши, хостинг ваш.

Зачем вообще нужна Headless CMS

Если коротко: Headless CMS — это когда контент хранится отдельно от фронтенда и отдаётся через API. Вы сами решаете, на чём строить сайт — Next.js, Astro, мобильное приложение или что-то ещё. CMS при этом отвечает только за хранение и редактирование контента.

Strapi — один из главных игроков в этой категории. Отличается тем, что это не облако, а софт, который вы ставите к себе. Для кого-то это преимущество (полный контроль), для кого-то — дополнительная ответственность (нужен сервер, нужны обновления).


Как устроена архитектура

Strapi состоит из двух частей:

  1. Backend — Node.js-приложение, которое обрабатывает запросы, управляет данными и генерирует API
  2. Admin Panel — React-приложение, через которое контент-менеджеры работают с материалами
flowchart LR
    A["Контент-менеджер\n(Админ-панель)"] -->|CRUD| B["Strapi Backend\n(Node.js)"]
    B -->|REST / GraphQL| C["Фронтенд\n(Next.js, Astro, Nuxt...)"]
    B -->|SQL| D["База данных\n(PostgreSQL / MySQL)"]
    B -->|Upload| E["Файлы\n(S3 / Cloudinary / Local)"]

Принцип простой: вы создаёте модели контента (Content Types) — через визуальный конструктор или код. Strapi автоматически генерирует REST и GraphQL endpoints для каждой модели. Контент-менеджеры заполняют данные через админку, фронтенд забирает их по API.


Content-Type Builder — конструктор моделей

Одна из главных фишек Strapi — визуальный конструктор контент-моделей прямо в админ-панели. Не нужно писать код, чтобы создать структуру данных для блога, каталога товаров или базы знаний.

Типы контента

ТипЧто этоПример
Collection TypeКоллекция записей одного типаСтатьи, Продукты, Авторы
Single TypeОдна запись (синглтон)Главная страница, Настройки сайта
ComponentПереиспользуемый блок полейSEO-метаданные, Блок «Герой»
Dynamic ZoneЗона, куда можно добавлять разные компонентыКонструктор страниц из блоков

Типы полей

Strapi поддерживает все базовые типы: Text, Rich Text, Number, Date, Boolean, Media (изображения, видео), Relation (связи между моделями), Enumeration, JSON, UID (slug), Email, Password. Плюс кастомные поля через плагины — Color Picker, Google Maps и другие.

💡
Совет: Dynamic Zones — мощный инструмент для страниц-конструкторов. Вы определяете набор компонентов (Герой, Текст, Галерея, CTA), а контент-менеджер собирает страницу из блоков в нужном порядке. Это примерно то, что Notion делает «из коробки», только здесь вы сами определяете набор блоков.

API из коробки: REST и GraphQL

Strapi автоматически генерирует API для каждого Content Type. Не нужно ничего писать — создали модель «Статья», получили готовый набор endpoints.

REST

# Получить все статьи
GET /api/articles

# Получить одну статью
GET /api/articles/1

# Фильтрация
GET /api/articles?filters[title][$contains]=AI

# Сортировка + пагинация
GET /api/articles?sort=publishedAt:desc&pagination[page]=1&pagination[pageSize]=10

# Подгрузка связей (по умолчанию Strapi не грузит связанные данные)
GET /api/articles?populate=author,category

GraphQL

Доступен через плагин @strapi/plugin-graphql:

query {
  articles(sort: "publishedAt:desc", pagination: { limit: 10 }) {
    title
    slug
    content
    author {
      name
      avatar { url }
    }
  }
}
⚖️
REST vs GraphQL: для большинства проектов REST достаточно — он проще и лучше кэшируется. GraphQL удобнее, когда нужно получить данные из нескольких связанных сущностей одним запросом и не тянуть лишнее.

Плагины

У Strapi развитая экосистема. Плагины ставятся через npm.

Встроенные

  • Content Manager — основной интерфейс управления контентом
  • Content-Type Builder — визуальный конструктор моделей
  • Media Library — управление файлами, изображениями, видео
  • i18n — мультиязычность контента
  • Users & Permissions — управление доступом к API
  • Email — отправка email через Nodemailer

Популярные сторонние

ПлагинЗачемУстановка
SEOMeta-теги, Open Graphnpm i @strapi/plugin-seo
GraphQLGraphQL API поверх RESTnpm i @strapi/plugin-graphql
SlugifyАвтогенерация slugnpm i strapi-plugin-slugify
SitemapАвтогенерация sitemap.xmlnpm i strapi-plugin-sitemap
MeilisearchПолнотекстовый поискnpm i strapi-plugin-meilisearch

Полный каталог — на market.strapi.io. Можно создавать свои плагины через Plugin SDK.


Мультиязычность (i18n)

Strapi поддерживает мультиязычность из коробки:

  1. В Settings → Internationalization добавляете нужные локали (ru, en, de...)
  2. В Content-Type Builder включаете i18n для контент-типа
  3. Для каждого поля решаете, нужна ли локализация
  4. В Content Manager переключаетесь между языками и заполняете контент
# Получить контент на конкретном языке
GET /api/articles?locale=ru

Медиа-библиотека

Встроенная система управления файлами: загрузка, папки, миниатюры, поиск. С версии 5.34 — AI-генерация alt-текстов для изображений.

Где хранить файлы:

  • Local — на сервере (по умолчанию, но при рестарте контейнера файлы могут пропасть)
  • AWS S3@strapi/provider-upload-aws-s3 (рекомендуется для продакшена)
  • Cloudinary@strapi/provider-upload-cloudinary
⚠️
Важно: для продакшена локальное хранилище не подходит. При рестарте контейнера файлы потеряются. Используйте S3 или Cloudinary.

Роли и права доступа

Две системы:

Для админ-панели — Super Admin, Editor, Author + кастомные роли с гранулярным доступом на уровне Content Type и действий (create, read, update, delete, publish).

Для API — Authenticated, Public + кастомные роли. Настраиваете, какие endpoints доступны авторизованным пользователям, какие — всем.


Кастомизация бэкенда

Strapi — это Node.js-приложение, которое можно расширять на уровне кода:

  • Controllers — переопределить логику обработки запросов
  • Services — добавить бизнес-логику
  • Middlewares — логирование, кэширование, rate limiting
  • Lifecycle Hooks — хуки на создание, обновление, удаление записей (автогенерация slug, уведомления, инвалидация кэша)
// Пример: автогенерация slug при создании статьи
export default {
  async beforeCreate(event) {
    const { data } = event.params;
    if (data.title && !data.slug) {
      data.slug = slugify(data.title);
    }
  },
};

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

# Создать проект
npx create-strapi-app@latest my-project

# Запустить
cd my-project && npm run develop

Откройте http://localhost:1337/admin, создайте первого администратора — и можно работать.


Деплой

ПлатформаСложностьЦенаОсобенности
Strapi CloudНизкаяот $29/месДеплой из Git, managed-инфраструктура
RailwayНизкаяПо потреблениюOne-click deploy, PostgreSQL в комплекте
RenderНизкаяот $7/месAuto-deploy из Git
Docker (VPS)Средняяот $5/месПолный контроль, нужны DevOps-навыки
AWS / GCPВысокаяВарьируетсяМаксимальная гибкость

Требования к серверу (VPS)

Если разворачиваете Strapi на своём сервере — вот на что ориентироваться:

ПараметрМинимумРекомендуется
CPU1 ядро2+ ядра
RAM2 ГБ4 ГБ+
Диск8 ГБ32 ГБ+ (SSD/NVMe)

Софт

  • Node.js — только Active LTS или Maintenance LTS (v20, v22, v24). Нечётные версии (v23, v25) не поддерживаются
  • База данных — PostgreSQL или MySQL для продакшена. SQLite подходит только для разработки
  • build-essentials — стандартный набор сборочных утилит (для Debian/Ubuntu)
  • ОС — Ubuntu ≥ 18.04 LTS, Debian ≥ 9.x, CentOS/RHEL ≥ 8 или Docker
💡
Совет: на 2 ГБ RAM Strapi работает, но админ-панель будет подтормаживать — она самый прожорливый компонент. Если используете Strapi только как API (контент редактируете локально), 2 ГБ хватит. Для комфортной работы в админке — берите 4 ГБ.

Производительность: что стоит настроить

  • Reverse Proxy (Nginx) — кэширование, SSL, gzip. Обязательно в продакшене
  • CDN (Cloudflare) — если аудитория глобальная
  • Pagination — всегда, не загружайте всё разом
  • Selective populate — загружайте только нужные связи (по умолчанию Strapi не грузит связанные данные, и это хорошо)
  • Redis — кэширование API-ответов при высокой нагрузке
  • Database indexes — для больших таблиц и сложных фильтров

Тарифы

ВариантЦенаЧто включено
Community (self-hosted)Бесплатно навсегдаПолный функционал, REST + GraphQL, плагины, i18n
Strapi Cloudот $29/месManaged hosting, deploy из Git
EnterpriseПо запросуSSO, Audit Logs, Review Workflows, SLA
📌
Нюанс: Strapi Cloud тарифицируется по проектам, Enterprise — по пользователям. При планировании бюджета считайте TCO на 12–24 месяца, включая инфраструктуру и DevOps-часы. Self-hosted бесплатен по лицензии, но сервер, поддержка и обновления стоят времени.

Интеграция с фронтенд-фреймворками

ФреймворкИнтеграцияПримечание
Next.jsREST/GraphQL + @strapi/clientSSG, SSR, ISR — все режимы
AstroREST/GraphQLОтлично для статических сайтов
Nuxt 3REST/GraphQL + @strapi/clientNuxt Content Module совместим
MobileREST APIЛюбой HTTP-клиент

Strapi AI

В версии 5 появились встроенные AI-функции:

  • Генерация контента прямо в админ-панели — создание текстов для полей
  • AI-метаданные для медиа — автоматическая генерация alt-текстов (с версии 5.34)
  • Content Modeling с AI — помощь в проектировании структуры контента

Когда Strapi — правильный выбор

  • Вам нужен полный контроль над данными и инфраструктурой
  • В команде есть разработчик, который может поддерживать self-hosted решение
  • Бюджет ограничен — Community Edition бесплатна
  • Нужна кастомная бизнес-логика на бэкенде (controllers, services, hooks)
  • Данные должны оставаться на вашем сервере (регуляторные требования, GDPR)

Когда лучше посмотреть на альтернативы

  • Если не хотите заниматься серверами — посмотрите на Sanity (облачная CMS с щедрым бесплатным планом)
  • Если у вас уже есть база данных и нужен API поверх неё — Directus
  • Если нужен enterprise с мультиязычностью и governance из коробки — Contentful

Ссылки


По теме

Если вы выбираете CMS для нового проекта или думаете, как перестроить контентную архитектуру на чём-то более управляемом — давайте обсудим.