From c80c6be251facc71a76d44d9c1bf98d904736db3 Mon Sep 17 00:00:00 2001 From: fairwind2k Date: Mon, 16 Feb 2026 19:07:52 +0100 Subject: [PATCH 1/2] chore: setup Docker dev environment and add documentation --- DOCKER.md | 126 +++++++++++++++++++++++++++++++++++++++++++++ Dockerfile.dev | 23 +++++++++ docker-compose.yml | 15 ++++++ 3 files changed, 164 insertions(+) create mode 100644 DOCKER.md create mode 100644 Dockerfile.dev create mode 100644 docker-compose.yml diff --git a/DOCKER.md b/DOCKER.md new file mode 100644 index 0000000..105a065 --- /dev/null +++ b/DOCKER.md @@ -0,0 +1,126 @@ +# Docker для разработки + +Этот проект настроен для работы с Docker в режиме разработки, что решает проблемы со старыми зависимостями. + +## Требования + +- Docker +- Docker Compose + +## Быстрый старт + +```bash +# Собрать и запустить приложение +docker compose up + +# Или в фоновом режиме +docker compose up -d + +# Или с пересборкой +docker compose up --build + +# Просмотр логов +docker compose logs -f + +# Остановка +docker compose down +``` + +Приложение будет доступно на http://localhost:8080 + +## Особенности + +- **Hot-reload**: изменения в коде автоматически применяются без перезапуска контейнера +- **Legacy dependencies**: используется флаг `--legacy-peer-deps` для работы со старыми зависимостями +- **Volume mounting**: исходный код монтируется в контейнер, не нужно пересобирать образ после изменений +- **Автомиграции**: миграции базы данных применяются автоматически при запуске + +## Переменные окружения + +Создайте файл `.env` в корне проекта (или используйте значения по умолчанию): + +```bash +SESSION_KEY=4fe91796c30bd989d95b62dc46c7c3ba0b6aa2df2187400586a4121c54c53b85 +``` + +## База данных + +База данных SQLite хранится в файле `database.sqlite` в корне проекта. Файл создается автоматически при первом запуске. Миграции применяются автоматически при запуске контейнера. + +## Полезные команды + +```bash +# Пересобрать образ +docker compose build + +# Пересобрать без использования кэша +docker compose build --no-cache + +# Запустить команду внутри контейнера +docker compose exec app bash + +# Установить дополнительные зависимости +docker compose exec app npm install --legacy-peer-deps + +# Просмотр логов +docker compose logs -f + +# Остановить и удалить контейнеры +docker compose down + +# Остановить и удалить контейнеры + volumes (включая node_modules) +docker compose down -v + +# Запустить тесты +docker compose exec app npm test + +# Запустить миграции вручную +docker compose exec app npx knex migrate:latest + +# Запустить линтер +docker compose exec app npm run lint +``` + +## Решение проблем + +### Проблемы с установкой зависимостей + +Dockerfile.dev использует флаг `--legacy-peer-deps` для работы со старыми зависимостями. Если возникают проблемы: + +1. Пересоберите образ без кэша: +```bash +docker compose down -v +docker compose build --no-cache +docker compose up +``` + +### База данных не создается + +База данных создается автоматически. Если возникают проблемы, проверьте права доступа к директории: + +```bash +ls -la database.sqlite +``` + +### Порт 8080 занят + +Измените порт в `docker-compose.yml`: + +```yaml +ports: + - "3000:8080" # Внешний:Внутренний +``` + +### Изменения в коде не применяются + +Проверьте, что volume правильно смонтирован: + +```bash +docker compose exec app ls -la /app +``` + +Если проблема сохраняется, перезапустите контейнер: + +```bash +docker compose restart +``` diff --git a/Dockerfile.dev b/Dockerfile.dev new file mode 100644 index 0000000..74f1a76 --- /dev/null +++ b/Dockerfile.dev @@ -0,0 +1,23 @@ +FROM node:18-slim + +RUN apt-get update && apt-get install -yq \ + build-essential \ + python3 \ + make + +RUN ln -s /usr/bin/python3 /usr/bin/python + +WORKDIR /app + +COPY package.json . +COPY package-lock.json . + +# Используем --legacy-peer-deps для работы со старыми зависимостями +RUN npm ci --legacy-peer-deps + +ENV NODE_ENV=development + +# Создаём директорию dist, чтобы не было предупреждения +RUN mkdir -p dist + +CMD ["bash", "-c", "npm run build && npx knex migrate:latest && npm start -- --watch --verbose-watch --ignore-watch='node_modules .git .sqlite'"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..66ade37 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,15 @@ +services: + app: + build: + context: . + dockerfile: Dockerfile.dev + ports: + - "8080:3000" + environment: + - NODE_ENV=development + - SESSION_KEY=${SESSION_KEY:-4fe91796c30bd989d95b62dc46c7c3ba0b6aa2df2187400586a4121c54c53b85} + volumes: + - .:/app + - /app/node_modules + restart: unless-stopped + command: bash -c "npx knex migrate:latest && npm start -- --watch --verbose-watch --ignore-watch='node_modules .git .sqlite'" From 3c0e0e637275ee770fbc7419b35582d8e64fa69c Mon Sep 17 00:00:00 2001 From: fairwind2k Date: Wed, 18 Feb 2026 21:54:22 +0100 Subject: [PATCH 2/2] fix(docker): update dev environment with legacy-peer-deps support --- DOCKER.md | 27 ++++++++++++++++++++------- Dockerfile.dev | 15 +++------------ docker-compose.yml | 4 ++-- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/DOCKER.md b/DOCKER.md index 105a065..e81fa4a 100644 --- a/DOCKER.md +++ b/DOCKER.md @@ -26,10 +26,12 @@ docker compose logs -f docker compose down ``` -Приложение будет доступно на http://localhost:8080 +Приложение будет доступно на http://localhost:3000 ## Особенности +- **Легковесный образ**: Docker образ содержит только окружение (Node.js + build tools), без зависимостей проекта +- **Runtime dependencies**: зависимости устанавливаются при запуске контейнера и хранятся в volume - **Hot-reload**: изменения в коде автоматически применяются без перезапуска контейнера - **Legacy dependencies**: используется флаг `--legacy-peer-deps` для работы со старыми зависимостями - **Volume mounting**: исходный код монтируется в контейнер, не нужно пересобирать образ после изменений @@ -56,12 +58,18 @@ docker compose build # Пересобрать без использования кэша docker compose build --no-cache +# Установить зависимости (если контейнер не запущен) +docker compose run --rm app npm ci --legacy-peer-deps + # Запустить команду внутри контейнера docker compose exec app bash -# Установить дополнительные зависимости +# Установить дополнительную зависимость docker compose exec app npm install --legacy-peer-deps +# Обновить зависимости +docker compose exec app npm ci --legacy-peer-deps + # Просмотр логов docker compose logs -f @@ -85,12 +93,17 @@ docker compose exec app npm run lint ### Проблемы с установкой зависимостей -Dockerfile.dev использует флаг `--legacy-peer-deps` для работы со старыми зависимостями. Если возникают проблемы: +Зависимости устанавливаются при запуске контейнера с флагом `--legacy-peer-deps`. Если возникают проблемы: -1. Пересоберите образ без кэша: +1. Удалите volume с node_modules и переустановите зависимости: ```bash docker compose down -v -docker compose build --no-cache +docker compose up +``` + +2. Или установите зависимости вручную: +```bash +docker compose run --rm app npm ci --legacy-peer-deps docker compose up ``` @@ -102,13 +115,13 @@ docker compose up ls -la database.sqlite ``` -### Порт 8080 занят +### Порт 3000 занят Измените порт в `docker-compose.yml`: ```yaml ports: - - "3000:8080" # Внешний:Внутренний + - "3000:3000" # Внешний:Внутренний ``` ### Изменения в коде не применяются diff --git a/Dockerfile.dev b/Dockerfile.dev index 74f1a76..0014147 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -1,23 +1,14 @@ FROM node:18-slim +# Устанавливаем необходимые системные зависимости для окружения RUN apt-get update && apt-get install -yq \ build-essential \ python3 \ - make + make \ + && rm -rf /var/lib/apt/lists/* RUN ln -s /usr/bin/python3 /usr/bin/python WORKDIR /app -COPY package.json . -COPY package-lock.json . - -# Используем --legacy-peer-deps для работы со старыми зависимостями -RUN npm ci --legacy-peer-deps - ENV NODE_ENV=development - -# Создаём директорию dist, чтобы не было предупреждения -RUN mkdir -p dist - -CMD ["bash", "-c", "npm run build && npx knex migrate:latest && npm start -- --watch --verbose-watch --ignore-watch='node_modules .git .sqlite'"] diff --git a/docker-compose.yml b/docker-compose.yml index 66ade37..4fd08e1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,7 +4,7 @@ services: context: . dockerfile: Dockerfile.dev ports: - - "8080:3000" + - "3000:3000" environment: - NODE_ENV=development - SESSION_KEY=${SESSION_KEY:-4fe91796c30bd989d95b62dc46c7c3ba0b6aa2df2187400586a4121c54c53b85} @@ -12,4 +12,4 @@ services: - .:/app - /app/node_modules restart: unless-stopped - command: bash -c "npx knex migrate:latest && npm start -- --watch --verbose-watch --ignore-watch='node_modules .git .sqlite'" + command: bash -c "npm ci --legacy-peer-deps && make build && make db-migrate && make start-backend"