Сборка проекта - nemopss/mpt-kpi GitHub Wiki
Оглавление
Глава 1.1 docker-compose.dev.yml
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=: Пароль для пользователя базы данных.