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

Начните проект с 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 - компания по разработке программного обеспечения, специализирующаяся на интерфейсной части сложных веб-приложений и на перспективных передовых технологиях.