Установка и настройка Payload CMS
Payload CMS устанавливается как npm-пакет в Next.js проект. С версии 2.x рекомендован монорепозиторный подход — CMS и фронтенд в одном приложении.
Требования
- Node.js 18.20.2+ или 20.9.0+
- PostgreSQL 11+ или MongoDB 4.2+
- npm 9+ / yarn 3+ / pnpm 8+
Установка через create-payload-app
npx create-payload-app@latest my-project
Интерактивный мастер спросит:
- Template: blank, website, ecommerce, blog — выбрать подходящий
- Database: MongoDB или PostgreSQL
cd my-project
cp .env.example .env
.env:
DATABASE_URI=postgresql://user:password@localhost:5432/payload_db
PAYLOAD_SECRET=super-secret-key-min-32-chars
NEXT_PUBLIC_SERVER_URL=http://localhost:3000
npm run dev
# CMS admin: http://localhost:3000/admin
# При первом запуске создать администратора
Структура проекта (Next.js монолит)
my-project/
├── app/
│ ├── (frontend)/ # Публичный фронтенд
│ └── (payload)/ # Admin panel
│ └── admin/[[...segments]]/page.tsx
├── collections/ # Типы контента
├── globals/ # Глобальные настройки
├── payload.config.ts # Главная конфигурация
├── payload-types.ts # Автогенерируемые типы
└── next.config.js
Базовая конфигурация
// payload.config.ts
import { buildConfig } from 'payload/config'
import { postgresAdapter } from '@payloadcms/db-postgres'
import { lexicalEditor } from '@payloadcms/richtext-lexical'
import { s3Storage } from '@payloadcms/storage-s3'
import path from 'path'
export default buildConfig({
serverURL: process.env.NEXT_PUBLIC_SERVER_URL || '',
admin: {
user: 'users',
},
editor: lexicalEditor({}),
collections: [
// Импортировать коллекции
],
db: postgresAdapter({
pool: { connectionString: process.env.DATABASE_URI || '' },
}),
plugins: [
s3Storage({
collections: { media: true },
bucket: process.env.S3_BUCKET!,
config: {
region: process.env.S3_REGION,
credentials: {
accessKeyId: process.env.S3_ACCESS_KEY!,
secretAccessKey: process.env.S3_SECRET_KEY!,
},
},
}),
],
typescript: {
outputFile: path.resolve(__dirname, 'payload-types.ts'),
},
})
Production деплой
# Build
npm run build
# Start
npm start
# Docker
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["npm", "start"]
Сроки
Базовая установка с PostgreSQL и S3 для медиа — 2–4 часа. Настройка под конкретный проект с первыми коллекциями — 1 день.







