Налаштування Strapi під ключ: від локалу до продакшену
При перенесенні Strapi на production часто виникають помилки CORS, неправильна конфігурація бази даних та витік API токенів. Особливо гостро проблема постає, коли фронтенд на Next.js намагається відправити запити до API на іншому домені — браузер блокує CORS, і клієнт бачить порожні сторінки. Типовий проєкт включає від 5 до 10 content types, і кожна помилка може коштувати кількох годин налагодження. Ми вирішуємо ці проблеми системно: налаштовуємо все з урахуванням безпеки та продуктивності. У цій статті — готовий рецепт встановлення та налаштування Strapi під ключ, перевірений на 30+ проєктах. Завдяки нашій методиці ви економите до 40% часу на дебагінгу та до 30% витрат на хостинг за рахунок оптимізації.
Згідно з офіційною документацією Strapi, ця гнучка headless CMS дозволяє швидко створювати API, але налаштування продакшену потребує уваги до безпеки. У типовому проєкті прискорення TTFB після оптимізації сягає 30-40%, а кількість помилок CORS знижується до нуля при правильній конфігурації.
Вимоги до сервера та база даних
Перед початком переконайтеся, що сервер відповідає мінімальним вимогам:
- Node.js 18 або 20 (LTS)
- npm 6+ / yarn 1.22+ / pnpm 6+
- PostgreSQL / MySQL / SQLite
- 2 ГБ ОЗУ та 20 ГБ SSD для середнього проєкту
Ініціалізуйте проєкт з PostgreSQL однією командою:
npx create-strapi-app@latest my-strapi --dbclient=postgres cd my-strapi npm run develop # later for production: NODE_ENV=production npm run build NODE_ENV=production npm start При першому запуску створюється адміністратор. У development-режимі доступний Content-Type Builder для швидкого прототипування.
Як налаштувати CORS та безпеку?
Політика CORS — одна з найчастіших причин помилок при інтеграції Strapi з фронтендом. Якщо не вказати явний origin, браузер блокує запити. У консолі ви побачите Access-Control-Allow-Origin — типова помилка. Налаштування через strapi::cors зі змінною FRONTEND_URL вирішує проблему. Додатково налаштовуємо security-заголовки — це запобігає XSS та впровадженню скриптів.
// config/middlewares.js module.exports = [ 'strapi::logger', 'strapi::errors', { name: 'strapi::security', config: { contentSecurityPolicy: { useDefaults: true, directives: { 'img-src': ["'self'", 'data:', 'blob:', 'res.cloudinary.com'], }, }, }, }, { name: 'strapi::cors', config: { origin: [process.env.FRONTEND_URL] } }, 'strapi::poweredBy', 'strapi::query', 'strapi::body', 'strapi::session', 'strapi::favicon', 'strapi::public', ] Конфігурація бази даних та сервера
Об'єднаємо налаштування бази та сервера в один блок:
// config/database.js module.exports = ({ env }) => ({ connection: { client: 'postgres', connection: { connectionString: env('DATABASE_URL'), ssl: env.bool('DATABASE_SSL', false) ? { rejectUnauthorized: false } : false, }, pool: { min: 2, max: 10 }, }, }) // config/server.js module.exports = ({ env }) => ({ host: env('HOST', '0.0.0.0'), port: env.int('PORT', 1337), url: env('PUBLIC_URL', 'http://localhost:1337'), }) Порівняння продуктивності: PostgreSQL vs SQLite
| Критерій | PostgreSQL | SQLite |
|---|---|---|
| Підтримка конкурентних запитів | Так, до сотень з'єднань | Обмежена, один писатель |
| Типи даних | Розширені (JSON, масиви) | Базові |
| Продуктивність JOIN-запитів | В 2-3 рази швидше | Повільніше при великих даних |
| Рекомендація для продакшену | Так | Тільки для розробки |
PostgreSQL краще за SQLite в 2-3 рази на складних JOIN-запитах, що критично для продакшену з десятками тисяч записів.
Чому важливий правильний пул з'єднань?
Пул з'єднань (min:2, max:10) запобігає вичерпанню підключень до бази при пікових навантаженнях. У production-середовищі з PostgreSQL пул критичний: без нього кожне звернення відкриває нове з'єднання, що збільшує час відгуку до 200-300 мс. Налаштування пулу знижує затримки до 10-20 мс — це в 15-20 разів швидше. Економія ресурсів сервера сягає 40% за рахунок перевикористання з'єднань.
Для додаткового захисту налаштуйте заголовки X-Frame-Options (захист від clickjacking) та X-Content-Type-Options (запобігання MIME-sniffing). Для цього використовуйте middleware strapi::security з відповідними директивами. Також рекомендується увімкнути rate limiting через koa-rate-limit для захисту від бруту.
Управління API токенами та деплой
Створіть токен у панелі адміністратора: Settings → API Tokens → Create new API Token. Виберіть права (Read-only для публічних запитів) та скопіюйте токен — він показується один раз. Додайте змінні оточення в .env фронтенду:
STRAPI_URL=http://localhost:1337 STRAPI_API_TOKEN=your-api-token-here Для надійного управління процесом використовуємо PM2:
// ecosystem.config.js module.exports = { apps: [{ name: 'strapi', script: 'npm', args: 'start', env: { NODE_ENV: 'production', DATABASE_URL: 'postgresql://...', APP_KEYS: '...', API_TOKEN_SALT: '...', JWT_SECRET: '...', }, }], } Порівняння способів деплою:
| Метод | Управління процесами | Масштабування | Складність |
|---|---|---|---|
| PM2 | Просте, авторестарт | Кластеризація | Низька |
| Docker | Контейнеризація | Оркестрація | Середня |
| Heroku | Платформа | Автомасштабування | Низька |
PM2 простіше в управлінні, ніж Docker, завдяки вбудованому авторестарту та кластеризації — для типових проєктів це найкращий вибір за співвідношенням швидкість/надійність.
Як оптимізувати TTFB?
Основні фактори: використання пулу з'єднань (вже розглянули), кешування запитів за допомогою Redis або Varnish, увімкнення HTTP/2 на сервері. У Strapi можна підключити плагін @strapi/plugin-redis для кешування відповідей. Це знижує TTFB на 30-40% без зміни коду.
Типові помилки при переході на production
- Забувають вказати
PUBLIC_URL— посилання в адмінці ламаються. - Не налаштовують SSL для бази — з'єднання відхиляється.
- Залишають development-ключі — витік даних.
- Не обмежують CORS — доступ з будь-яких доменів.
- Не задають
ADMIN_JWT_SECRET— ризик підробки сесій.
Що входить у налаштування Strapi під ключ
- Ініціалізація проєкту та підключення PostgreSQL
- Конфігурація CORS, Security, SSL
- Створення API токена та налаштування .env
- Деплой з PM2 та моніторинг
- Документація по endpoints
- Підтримка після запуску (до місяця)
На всі роботи надаємо гарантію 30 днів — виправимо будь-які несправності безкоштовно.
Процес роботи та строки
- Аналіз вимог та вибір хостингу
- Встановлення та конфігурація Strapi
- Налаштування бази даних та middleware
- Створення API токенів та інтеграція з фронтендом
- Деплой у продакшен та моніторинг
Базова установка з PostgreSQL, налаштуванням CORS та першим content type займає від 2 до 4 годин. Повне налаштування під продакшен — від 1 дня. Вартість базової конфігурації — від 200$, повна — від 500$. Економія на хостингу завдяки оптимізації досягає 30% щомісяця. Зв'яжіться з нами для детального обговорення. Замовте налаштування Strapi під ключ — наші сертифіковані інженери з 5-річним досвідом допоможуть розібратися з конфігурацією.







