Перейти до вмісту

Abitly Strapi CMS

ПолеЗначення
ПродуктAbitly.org
ТипCMS (Strapi v5, headless)
Статус🟢 prod
Власник@Vladbandurin

Strapi headless CMS — керує контентом Abitly.org (ЗВО, спеціальності, статті, навчальні матеріали, медіа). Віддає REST/GraphQL фронтенду та Abitly API. Має CSV import/export для bulk-роботи контент-команди.

Репозиторій та рантайм

Section titled “Репозиторій та рантайм”
Репоabitly-org/abitly-strapi (main)
СтекStrapi v5 · @strapi/strapi · @strapi/plugin-users-permissions · @strapi/provider-upload-aws-s3 · strapi-csv-import-export · strapi-plugin-multi-select
Хостинг — prodAWS EC2 abitly-prod-strapi (t4g.medium) — не ECS.
Container imageMulti-stage Dockerfile (Node 20 Alpine, ARM64), збирається через docker buildx build --platform linux/arm64 --push у GitHub Actions → ECR abitly/strapi:<commit-sha>
Reverse proxy у контейнеріCaddy (Caddyfile у репо) — TLS termination + Cloudflare origin pulls validation
ДеплойGitHub Actions build+push → CodePipeline abitly-prod-strapibuildspec.yml — CodeBuild stage) → deploy на EC2 abitly-prod-strapi. Деталі → deploy-pipeline.
Upload providerAWS S3 (UPLOAD_PROVIDER=AWS, bucket abitly-prod-strapi-media, регіон eu-central-1). DO Spaces у package.jsondead dep.
TLSCloudflare Authenticated Origin Pulls — Strapi/Caddy приймає лише з’єднання з валідним origin-cert (SSM ORIGIN_CERT, ORIGIN_KEY, ORIGIN_PULL_CA).
Admin URLhttps://cms.abitly.org/admin
API URLhttps://cms.abitly.org
Postgres схемаpublic (SSM /abitly/prod/strapi/DATABASE_SCHEMA) — ⚠️ у Postgres це дефолтна схема, обережно з DDL
  • Залежить від: Postgres (shared instance studsearch-prod, окрема схема TODO:) · S3 abitly-prod-strapi-media
  • Від нього залежать: Abitly Web · Abitly API

SSM /abitly/prod/strapi/ (~20 ключів):

КатегоріяКлючі
БДDATABASE_CLIENT, DATABASE_HOST, DATABASE_PORT, DATABASE_NAME, DATABASE_SCHEMA, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_SSL, DATABASE_SSL_REJECT_UNAUTHORIZED, DATABASE_CA
AppHOST, PUBLIC_URL, NODE_ENV, APP_KEYS, JWT_SECRET, ADMIN_JWT_SECRET
S3S3_BUCKET, S3_REGION, UPLOAD_PROVIDER
Cloudflare TLSORIGIN_KEY, ORIGIN_CERT, ORIGIN_PULL_CA
WebhooksWEBHOOK_SECRET

Повний індекс → environments.

Terminal window
npm run develop # dev з autoReload
npm run build && npm run start
npm run console # Strapi REPL
npm run upgrade # plugin upgrades

CodePipeline abitly-prod-strapi. Відкат — TODO: (попередня версія артефакту з S3 abitly-prod-strapi-pipeline-*). Деталі → deploy-rollback.

  • EC2 SSH-логи / Strapi logs (TODO: шлях до файлу).
  • БД-проблеми → db-issues (⚠️ shared instance).
  • CMS не віддає контент / 500 → service-down
  • Медіа не вантажиться → перевірити abitly-prod-strapi-media permissions + UPLOAD_PROVIDER=aws-s3
  • 403 від Cloudflare → ймовірно прострочений ORIGIN_CERT → ротація + оновити SSM
  • 502 + Caddy no such host strapi → контейнер Strapi у crash-loop; перевірити docker logs на bad variable nameincident-2026-05-28
  • 2026-05-28 — 40 хв 502 під час переключення на CF Access. SSM-простір /abitly/prod/strapi/ містив багаторядкові PEM Caddy, що зламали export в entrypoint. → пост-мортем.