Сегодняшний пост носит чисто технический характер, в нем отсутствуют подробные размышления о различных подходах, методах и методологиях. В нем объясняется, как запустить весь вышеупомянутый стек служб с помощью всего нескольких строк кода в одном файле для создания докеров.

Начните проект с strapi.js и next.js

strapi.js - это расширяемая безголовая CMS. Он предоставляет CRUD API прямо из коробки, не требуя сложной конфигурации. У него даже есть плагин GraphqQL, поэтому я бы сказал, что он идеально подходит для роли API для современного приложения next.js среднего размера (для небольшого приложения next.js API обычно не нужен).

Давайте начнем новый проект со strapi.js и next.js. Создайте новый каталог и выполните в нем следующие команды. Я предполагаю, что проект strapi.js находится в cms / dir в корневом каталоге проекта, а next.js - в frontend / dir.

Сначала установите strapi.js:

npm install strapi@alpha -g

Теперь создайте проект strapi.js:

strapi new cms

Важное примечание. При создании нового проекта strapi.js необходимо открытое соединение с вашей БД. Чтобы просто DB запускала docker-compose (найдите файл docker-compose ниже) следующим образом:

docker-compose up db

Прохладный! Бэкэнд API установлен и готов к работе. Эта статья не рассматривает более глубокую настройку и не предоставляет никаких приветственных примеров, она касается только запуска простых приложений.

Установка next.js - менее удобная процедура. Сначала создайте каталог для приложения next.js:

mkdir frontend/

Установите next.js, запустите его в frontend/:

npm install --save-exact next react react-dom

В package.json добавьте скрипты для запуска и сборки приложения:

{
  "scripts": {
    "dev": "next",
    "build": "next build",
    "start": "next start"
  }
}

Вы готовы к работе!

Опишите сервисы в docker-compose.yml

Теперь позвольте мне показать, как запустить весь стек, включая Postgres DB, с помощью всего лишь одного файла docker-compose и ничего больше. То же самое можно сделать с помощью простого сценария bash, но в этом случае БД должен быть установлен на хост-машине каждым разработчиком, который работает с проектом, а это часто неприемлемо.

При такой настройке нет необходимости запускать что-либо локально, даже команду npm install. Docker-compose обо всем позаботится! 💪

Создайте файл с именем docker-compose.yml в корне проекта со следующим содержимым:

version: "3.7"
services:
  cms:
    image: node:10
    ports:
      - 1338:1338
    volumes:
      - ./cms:/usr/local/app
    depends_on:
      - db
    restart: always
    working_dir: /usr/local/app
    entrypoint: "/bin/bash"
    command: "-c \"if [ ! -d \"node_modules\" ]; then npm i; fi; npm run start\""
    environment:
      - DATABASE_HOST=db
  db:
    image: postgres
    restart: always
  ports:
      - 5432:5432
  environment:
      POSTGRES_DB: mydb
      POSTGRES_PASSWORD: mypassword
      POSTGRES_USER: myuser
  frontend:
    image: node:10
    ports:
      - 3000:3000
    volumes:
      - ./frontend:/usr/local/app
    restart: always
    working_dir: /usr/local/app
    entrypoint: "/bin/bash"
    command: "-c \"if [ ! -d \"node_modules\" ]; then npm i; fi; npm run dev\""

И, наконец, запустите приложение с docker-compose up в корне проекта. Подождите несколько минут, пока установятся пакеты узлов (если таковые были добавлены), и откройте приложение в своем браузере по адресу http: // localhost: 3000 Вот и все!

Как видите, весь стек технологий помещен в один файл. Для его запуска не требуется установка чего-либо, кроме Docker на локальном компьютере. Нет необходимости в какой-либо конфигурации или настройках. И самое главное, это единственное, что нужно любому разработчику в вашей команде для запуска приложения.

OttoFeller - компания по разработке программного обеспечения, специализирующаяся на интерфейсной части сложных веб-приложений и на перспективных передовых технологиях.