Сборка проекта - nemopss/mpt-kpi GitHub Wiki

Оглавление

Глава 1.1 docker-compose.dev.yml

Глава 1.2 docker-compose.yml

Глава 1.3 .env

1.1 docker-compose.dev.yml

Файл docker-compose.dev.yml используется для конфигурации приложения в среде разработки с помощью Docker Compose. Он определяет три основных сервиса: базу данных (db), фронтенд (frontend) и бэкенд (backend):

services:
  db:
    image: mysql:9.0.1
    container_name: ${SERVICE}_dev_db
    restart: always
    environment:
      MYSQL_USER: $DATABASE_USER
      MYSQL_PASSWORD: $DATABASE_PASSWORD
      MYSQL_DATABASE: $DATABASE_NAME
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
    volumes:
      - mpt-kpi-database:/var/lib/mysql
    ports:
      - ${DATABASE_PORT}:${DATABASE_PORT}

  frontend:
    container_name: ${SERVICE}_dev_frontend
    env_file: .env
    build:
      context: ./frontend/
      dockerfile: dev.Dockerfile
    volumes:
      - ./frontend:/app
    ports:
      - ${FRONTEND_PORT}:${FRONTEND_PORT}

  backend:
    container_name: ${SERVICE}_dev_backend
    env_file: .env
    build:
      context: ./backend/
      dockerfile: dev.Dockerfile
    environment:
      - DEBUG=1
    volumes:
      - ./backend:/app
    ports:
      - ${BACKEND_PORT}:${BACKEND_PORT}
    depends_on:
      - db

volumes:
  mpt-kpi-database:
     external: true

Пояснение каждого сервиса:

Сервис db

db:
  image: mysql:9.0.1
  container_name: ${SERVICE}_dev_db
  restart: always
  environment:
    MYSQL_USER: $DATABASE_USER
    MYSQL_PASSWORD: $DATABASE_PASSWORD
    MYSQL_DATABASE: $DATABASE_NAME
    MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
  volumes:
    - mpt-kpi-database:/var/lib/mysql
  ports:
    - ${DATABASE_PORT}:${DATABASE_PORT}

image: Используется образ MySQL версии 9.0.1, который будет загружен из Docker Hub;

container_name: Задает имя контейнера на основе переменной окружения ${SERVICE}, чтобы обеспечить уникальность имени;

restart: Политика перезапуска контейнера — он будет автоматически перезапускаться в случае сбоя;

environment: Переменные окружения для настройки MySQL, такие как имя пользователя, пароль и имя базы данных. Значения берутся из файла .env;

volumes: Используется для хранения данных MySQL вне контейнера, чтобы данные не терялись при его перезапуске. Здесь определен внешний том mpt-kpi-database;

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

Сервис frontend

frontend:
  container_name: ${SERVICE}_dev_frontend
  env_file: .env
  build:
    context: ./frontend/
    dockerfile: dev.Dockerfile
  volumes:
    - ./frontend:/app
  ports:
    - ${FRONTEND_PORT}:${FRONTEND_PORT}

container_name: Имя контейнера формируется на основе переменной ${SERVICE}, что помогает различать контейнеры разработки;

env_file: Подключает файл .env, который содержит переменные окружения, используемые приложением;

build: Определяет контекст сборки и Dockerfile, который будет использоваться для создания образа фронтенда из папки frontend;

volumes: Монтирует локальную папку frontend в контейнер, что позволяет разработчикам сразу видеть изменения;

ports: Настраивает перенаправление портов для фронтенд-приложения, обеспечивая доступ к нему через хост.

Сервис backend

backend:
  container_name: ${SERVICE}_dev_backend
  env_file: .env
  build:
    context: ./backend/
    dockerfile: dev.Dockerfile
  environment:
    - DEBUG=1
  volumes:
    - ./backend:/app
  ports:
    - ${BACKEND_PORT}:${BACKEND_PORT}
  depends_on:
    - db

container_name: Имя контейнера формируется так же, как и для других сервисов;

env_file: Определяется подключение к файлу .env, содержащему переменные окружения для бэкенда;

build: Определяет директорию сборки для бэкенд-приложения, указывая, что Dockerfile находится в папке backend.

environment: Устанавливает переменную окружения DEBUG=1, которая может быть использована для включения режима отладки в приложении;

volumes: Монтирует локальную папку backend в контейнер, что позволяет разработчикам сразу видеть изменения;

ports: Настраивает перенаправление порта для бэкенд-приложения так же, как и для фронтенда.

depends_on: Указывает, что сервис backend зависит от db. Это гарантирует, что база данных будет запущена прежде, чем будет запущен бэкенд.

Общий том:

volumes:
  mpt-kpi-database:
     external: true

volumes: Определяет внешний том mpt-kpi-database, используемый для хранения данных MySQL. Это позволяет сохранить состояние базы данных за пределами контейнера, обеспечивая надежность данных при перезапусках контейнера.

1.2 docker-compose.yml

Файл docker-compose.yml используется для настройки приложения с помощью Docker Compose в продуктивной или тестовой среде. Он определяет три основных сервиса: базу данных (db), фронтенд (frontend) и бэкенд (backend):

services:
  db:
    image: mysql:9.0.1
    container_name: ${SERVICE}_db
    restart: always
    env_file: .env
    environment:
      MYSQL_USER: $DATABASE_USER
      MYSQL_PASSWORD: $DATABASE_PASSWORD
      MYSQL_DATABASE: $DATABASE_NAME
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
    volumes:
      - mpt-kpi-database:/var/lib/mysql

  frontend:
    container_name: ${SERVICE}_frontend
    platform: linux/amd64
    restart: always
    env_file: .env
    build:
      context: ./frontend/
    ports:
      - 127.0.0.1:${FRONTEND_PORT}:${FRONTEND_PORT}

  backend:
    container_name: ${SERVICE}_backend
    platform: linux/amd64
    restart: always
    env_file: .env
    build:
      context: ./backend/
    environment:
      - DATABASE_PORT
      - FRONTEND_PORT
      - BACKEND_PORT
      - DATABASE_USER
      - DATABASE_NAME
      - DATABASE_PASSWORD
    depends_on:
      - db

volumes:
  mpt-kpi-database:
     external: true

Пояснение каждого сервиса:

Сервис db

db:
  image: mysql:9.0.1
  container_name: ${SERVICE}_db
  restart: always
  env_file: .env
  environment:
    MYSQL_USER: $DATABASE_USER
    MYSQL_PASSWORD: $DATABASE_PASSWORD
    MYSQL_DATABASE: $DATABASE_NAME
    MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
  volumes:
    - mpt-kpi-database:/var/lib/mysql

image: Используется образ MySQL версии 9.0.1 из Docker Hub.

container_name: Имя контейнера, формируемое на основе переменной окружения ${SERVICE}.

restart: Политика автоматического перезапуска контейнера в случае его сбоя.

env_file: Файл .env, в котором содержатся переменные окружения для конфигурации контейнера.

environment: Переменные окружения, используемые для настройки учетных записей и базы данных MySQL. Значения берутся из файла .env.

volumes: Монтирование внешнего тома mpt-kpi-database для хранения данных MySQL во избежание их потери при перезапуске контейнера.

Сервис frontend

frontend:
  container_name: ${SERVICE}_frontend
  platform: linux/amd64
  restart: always
  env_file: .env
  build:
    context: ./frontend/
  ports:
    - 127.0.0.1:${FRONTEND_PORT}:${FRONTEND_PORT}

container_name: Имя контейнера на основе переменной ${SERVICE}.

platform: Указывает, что контейнер будет работать на архитектуре linux/amd64.

restart: Контейнер будет перезапускаться автоматически в случае сбоев.

env_file: Связывает файл .env, содержащий переменные окружения для приложения.

build: Определяет директорию сборки для фронтенд-приложения, указывая, что Dockerfile находится в папке frontend.

ports: Настраивает перенаправление портов для доступа к приложению, связывая локальный IP 127.0.0.1 с портом фронтенда.

Сервис backend

backend:
  container_name: ${SERVICE}_backend
  platform: linux/amd64
  restart: always
  env_file: .env
  build:
    context: ./backend/
  environment:
    - DATABASE_PORT
    - FRONTEND_PORT
    - BACKEND_PORT
    - DATABASE_USER
    - DATABASE_NAME
    - DATABASE_PASSWORD
  depends_on:
    - db

container_name: Название контейнера формируется из переменной ${SERVICE}.

platform: Указывает архитектуру, на которой будет работать контейнер (linux/amd64).

restart: Автоматический перезапуск контейнера в случае его неудачи.

env_file: Подключает файл .env с переменными окружения.

build: Определяет директорию сборки для бэкенд-приложения, указывая, что Dockerfile находится в папке backend.

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

depends_on: Гарантирует, что база данных (db) будет запущена прежде, чем бэкенд начнет свою работу.

Общие тома

volumes:
  mpt-kpi-database:
     external: true

volumes: Определение внешнего тома mpt-kpi-database, который используется для хранения данных MySQL. Это позволяет сохранить данные даже после перезапуска контейнеров.

1.3 .env

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

SERVICE=mpt-kpi

DATABASE_PORT=3306
FRONTEND_PORT=3000
BACKEND_PORT=8000

DATABASE_USER=mpt-kpi
DATABASE_NAME=mpt-kpi
DATABASE_PASSWORD=

Объяснение переменных:

SERVICE=mpt-kpi: Имя приложения. Это будет использоваться для установки имён контейнеров в файле docker-compose.yml.

DATABASE_PORT=3306: Порт, на котором будет работать MySQL сервер.

FRONTEND_PORT=3000: Порт, на котором будет доступно фронтенд-приложение.

BACKEND_PORT=8000: Порт, на котором будет доступно бэкенд-приложение.

DATABASE_USER=mpt-kpi: Имя пользователя базы данных для подключения к MySQL.

DATABASE_NAME=mpt-kpi: Имя базы данных, которая будет создана в MySQL.

DATABASE_PASSWORD=: Пароль для пользователя базы данных.