Разработка сайта на CMS Cockpit CMS
Cockpit CMS — self-hosted headless CMS на PHP, не требующая базы данных по умолчанию (использует SQLite или MongoDB). Хорошо подходит для небольших проектов, где нужен гибкий API без сложной инфраструктуры.
Архитектура и возможности
Cockpit предоставляет:
- Collections — списки записей (блог, товары, новости)
- Singletons — одиночные наборы полей (настройки сайта, about-page)
- Assets — управление медиафайлами с трансформациями
- REST и GraphQL API — для фронтенда
- Custom Roles — управление доступом
Нет встроенного фронтенда — только API. Подходит для проектов где фронтенд на Next.js, Nuxt, Astro или мобильное приложение.
Установка
# Docker (рекомендуется)
docker run -d \
--name cockpit \
-p 8080:80 \
-v $(pwd)/cockpit-data:/var/www/html/storage \
-e COCKPIT_SESSION_NAME=cockpit \
-e COCKPIT_SECRET_KEY=$(openssl rand -hex 32) \
agentejo/cockpit:latest
# Или через PHP на Apache/Nginx
git clone https://github.com/Cockpit-HQ/Cockpit.git /var/www/cockpit
# Настроить Nginx vhost, дать права на storage/
Работа с Collections API
const COCKPIT_URL = process.env.COCKPIT_URL;
const COCKPIT_TOKEN = process.env.COCKPIT_API_TOKEN;
// Получение записей коллекции
async function getCollectionItems(collection: string, options = {}) {
const params = new URLSearchParams({
token: COCKPIT_TOKEN!,
...options,
});
const res = await fetch(`${COCKPIT_URL}/api/collections/get/${collection}?${params}`);
return res.json();
}
// Использование
const { entries, total } = await getCollectionItems('posts', {
limit: 10,
skip: 0,
sort: JSON.stringify({ _created: -1 }),
filter: JSON.stringify({ published: true }),
populate: 1, // разворачивает связанные записи
});
Интеграция с Next.js
// lib/cockpit.ts
export async function getPosts() {
const data = await getCollectionItems('posts', {
filter: JSON.stringify({ status: 'published' }),
sort: JSON.stringify({ date: -1 }),
fields: JSON.stringify({ title: 1, slug: 1, excerpt: 1, image: 1, date: 1 }),
});
return data.entries;
}
// Singleton (настройки сайта)
export async function getSiteSettings() {
const res = await fetch(
`${COCKPIT_URL}/api/singletons/get/settings?token=${COCKPIT_TOKEN}`
);
return res.json();
}
Трансформация изображений
Cockpit встроенно поддерживает ресайз:
// URL-параметры для трансформации
const thumbnailUrl = `${COCKPIT_URL}/api/cockpit/image?token=${token}&src=${encodeURIComponent(imagePath)}&w=800&h=400&m=crop&q=80&o=true`;
Типичный проект на Cockpit CMS (небольшой корпоративный сайт с блогом, 3–5 коллекций) — 5–10 дней, включая фронтенд.







