Strapi - популярная open-source headless CMS. Написана на JavaScript/TypeScript, максимально настраивается под ваши задачи.

Данная CMS создана для разработчиков, она делает множество рутинной работы, позволяя сосредоточится на бизнес логике. Подходит для широкого спектра задач - блоги, порталы, каталоги, сервисы, магазины и многое другое.

Создание проекта

Исчерпывающая инструкция на официальном сайте, тут я приведу краткий набор команд и действия. Демо приложение будет находиться в папке strapi.

Перед установкой у вас должно быть:

  • Node.js версия v18 или v20
  • npm или yarn
  • Python

Создание проекта:

npx create-strapi-app@latest strapi

После выполнения запускаем в режиме разработки и создаем наш набор данных.

npm run develop

Для локальной разработки этого, как правило, достаточно.

Конфигурация и сборка проекта

После установки и создание структуры данных для запуска проекта на сервере мы будем использовать Docker. Это очень универсальный способ, который позволит запустить наше приложение как в облаке, так и на сервере.

Убедитесь что у вас установлен Docker и Docker Compose.

Добавляем Dockerfile в наш проект с содержимым:

FROM node:20-alpine as build
# Installing libvips-dev for sharp Compatibility
RUN apk update && apk add build-base gcc autoconf automake zlib-dev libpng-dev vips-dev && rm -rf /var/cache/apk/* > /dev/null 2>&1
ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}

WORKDIR /opt/app
COPY package.json .
COPY package-lock.json .

RUN npm install --force

COPY .. .
RUN npm run build


FROM node:20-alpine
# Installing libvips-dev for sharp Compatibility
RUN apk add vips-dev
RUN rm -rf /var/cache/apk/*

ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}

WORKDIR /opt/app
COPY --from=build /opt/app ./

EXPOSE 1337
CMD ["npm", "run","start"]

Переходим в папку strapi с проектом и проверяем что сборка работает.

docker build -t strapi .

Запускаем контейнер, для запуска потребуется указать реквизиты сервера базы данных. Ниже команда для примера, необходимо указать свои.

docker run -p 1337:1337 \ 
    -e DATABASE_CLIENT=postgres \ 
    -e DATABASE_HOST=127.0.0.1 \
    -e DATABASE_PORT=5432 \
    -e DATABASE_NAME=strapi \ 
    -e DATABASE_USERNAME=strapi \ 
    -e DATABASE_PASSWORD=strapi \
    strapi

Публикация Docker образа

Для запуска контейнера из нашего образа на удаленном сервере - необходимо загрузить образ в registry.

Docker Hub

Публичные образы можно загружать туда бесплатно, а для приватных нужна платная подписка.

Необходимо создать аккаунт, если у вас его еще нет, и авторизоваться под ним.

После этого можно собрать образ и загрузить в реестр. Название образа обязательно должно в формате логин/название:версия.

docker build -t updev/strapi:1.0 .
docker push updev/strapi:1.0

Yandex Container Registry

Реестр Яндекса платный, но стоимость достаточно низкая и зависит от размера хранящихся там образов.

Инструкция как создать реестр и авторизоваться тут. После создания у вас будет реестр с уникальным именем, например cr.yandex/crpoe5…..8h9al8r0/strapi

docker build -t cr.yandex/crpoe5.....8h9al8r0/strapi:1.0 .
docker push cr.yandex/crpoe5.....8h9al8r0/strapi:1.0

Исходный код руководства на GitHub.