ru

KeystoneJS на VPS: TypeScript headless CMS с GraphQL

KeystoneJS - это open-source headless CMS и GraphQL backend, построенный на Prisma и TypeScript. На офшорном VPS Anubiz Host вы получаете полный контроль над Keystone-инсталляцией с PostgreSQL backend, NVMe-дисками и privacy. Разбираем стек, отличия от Strapi и почему Keystone выбирают для проектов с сложными relations и access control.

Need this done for your project?

We implement, you ship. Async, documented, done in days.

Start a Brief

KeystoneJS стек: Node.js 20, Prisma и PostgreSQL 16

Keystone 6 переписан с нуля на TypeScript и Prisma, что даёт современный developer experience:

  • Node.js 20 LTS: Keystone 6 требует минимум Node.js 18, мы используем 20 для последних улучшений.
  • TypeScript 5.x: схема списков описывается в TypeScript-файлах с полной типизацией.
  • Prisma 5: ORM под капотом Keystone, обеспечивает миграции, type-safe запросы и поддержку PostgreSQL, MySQL и SQLite.
  • PostgreSQL 16: рекомендуемая БД для production, поддерживает JSONB-поля и полнотекстовый поиск.
  • GraphQL Yoga: современный GraphQL server, заменивший Apollo Server в Keystone 6.
  • Admin UI: React-based админка генерируется из схемы, с поддержкой кастомных полей и компонентов.

На VPS M (2 vCPU, 4GB RAM) Keystone обрабатывает 100-150 одновременных пользователей админки и тысячи GraphQL-запросов в минуту от headless frontend.

GraphQL-first API: преимущества над REST

Keystone генерирует полнофункциональный GraphQL API из схемы списков, что даёт ряд преимуществ перед REST-подходом Directus или Strapi:

  • Single endpoint: один /api/graphql endpoint вместо десятков REST routes, что упрощает versioning и кэширование.
  • Type-safe queries: GraphQL schema автоматически генерирует TypeScript-типы для клиентов через graphql-codegen.
  • Field-level selection: клиент запрашивает только нужные поля, что снижает payload и latency.
  • Nested queries: populate-related сущности в одном запросе без N+1 проблем благодаря Prisma DataLoader.
  • Mutations с access control: create, update, delete операции имеют типизированный context для гранулярных правил доступа.
  • Subscriptions: real-time обновления через WebSocket для live editing и collaborative features.

GraphQL-подход особенно эффективен для проектов с сложными relations - например, e-commerce с категориями, товарами, вариантами, изображениями, отзывами в одном запросе.

Access Control и Hooks: гранулярная бизнес-логика

Keystone выделяется среди headless-CMS детальной системой access control и hooks:

  • List-level access: правила доступа на чтение, создание, обновление, удаление для каждого списка с типизированным session.
  • Field-level access: можно скрыть поле email от всех пользователей, кроме админа, или сделать поле read-only после создания.
  • Filter access: вернуть только записи, удовлетворяющие условию (например, posts.author === currentUser.id).
  • Hooks: beforeOperation, afterOperation, validateInput, resolveInput для бизнес-логики и интеграций.
  • Virtual fields: computed properties на лету (например, fullName из firstName и lastName) без хранения в БД.
  • Custom scalars: возможность добавить кастомные GraphQL-скаляры (DateTime, JSON, специфичные типы домена).

Эта гибкость делает Keystone оптимальным для проектов с сложной бизнес-логикой, где Strapi или Directus требуют написания кастомных middleware и расширений.

Why Anubiz Host

100% async — no calls, no meetings
Delivered in days, not weeks
Full documentation included
Production-grade from day one
Security-first approach
Post-delivery support included

Ready to get started?

Skip the research. Tell us what you need, and we'll scope it, implement it, and hand it back — fully documented and production-ready.

Anubiz Chat AI

Online