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.
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 и расширений.
Related Services
Why Anubiz Host
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.