From 90f009b97c98bc5f10c9cb2cdba2fdbea14cccf8 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 12 Sep 2025 10:07:05 +0500 Subject: [PATCH] dockerfile --- .dockerignore | 80 ++++++++++++++++++++++++ DOCKER.md | 152 +++++++++++++++++++++++++++++++++++++++++++++ Dockerfile | 52 ++++++++++++++++ docker-compose.yml | 55 ++++++++++++++++ 4 files changed, 339 insertions(+) create mode 100644 .dockerignore create mode 100644 DOCKER.md create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..7a824c1 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,80 @@ +# Maven +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar + +# IDE +.idea/ +*.iml +*.ipr +*.iws +.vscode/ +.settings/ +.project +.classpath + +# OS +.DS_Store +Thumbs.db + +# Git +.git/ +.gitignore + +# Docker +Dockerfile +.dockerignore + +# Logs +*.log +logs/ + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Coverage directory used by tools like istanbul +coverage/ + +# nyc test coverage +.nyc_output + +# Dependency directories +node_modules/ + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# Temporary folders +tmp/ +temp/ + +# Documentation +README.md +docs/ +HELP.md diff --git a/DOCKER.md b/DOCKER.md new file mode 100644 index 0000000..66e9316 --- /dev/null +++ b/DOCKER.md @@ -0,0 +1,152 @@ +# Docker Setup для KonturAI + +Этот документ содержит инструкции по сборке и запуску приложения KonturAI с использованием Docker. + +## Требования + +- Docker 20.10+ +- Docker Compose 2.0+ + +## Быстрый старт + +### 1. Запуск с Docker Compose (рекомендуется) + +```bash +# Сборка и запуск всех сервисов +docker-compose up --build + +# Запуск в фоновом режиме +docker-compose up -d --build + +# Остановка сервисов +docker-compose down + +# Остановка с удалением volumes (удалит данные БД) +docker-compose down -v +``` + +### 2. Ручная сборка и запуск + +```bash +# Сборка Docker образа +docker build -t konturai:latest . + +# Запуск PostgreSQL +docker run -d \ + --name konturai-postgres \ + -e POSTGRES_DB=konturai \ + -e POSTGRES_USER=postgres \ + -e POSTGRES_PASSWORD=password \ + -p 5432:5432 \ + postgres:15-alpine + +# Запуск приложения +docker run -d \ + --name konturai-app \ + -p 8080:8080 \ + -e SPRING_DATASOURCE_URL=jdbc:postgresql://host.docker.internal:5432/konturai \ + -e POSTGRES_USER=postgres \ + -e POSTGRES_PASSWORD=password \ + konturai:latest +``` + +## Переменные окружения + +| Переменная | Описание | Значение по умолчанию | +| ------------------------------- | --------------- | ---------------------------------------------------------------------- | +| `SPRING_DATASOURCE_URL` | URL базы данных | `jdbc:postgresql://postgres:5432/konturai` | +| `POSTGRES_USER` | Пользователь БД | `postgres` | +| `POSTGRES_PASSWORD` | Пароль БД | `password` | +| `SPRING_JPA_HIBERNATE_DDL_AUTO` | Режим DDL | `none` | +| `JAVA_OPTS` | JVM параметры | `-Xmx512m -Xms256m -XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0` | + +## Порты + +- **8080** - Spring Boot приложение +- **5432** - PostgreSQL база данных + +## Health Checks + +Приложение включает health checks для мониторинга состояния: + +- **Приложение**: `http://localhost:8080/actuator/health` +- **PostgreSQL**: автоматическая проверка готовности БД + +## Логи + +```bash +# Просмотр логов приложения +docker-compose logs app + +# Просмотр логов БД +docker-compose logs postgres + +# Следить за логами в реальном времени +docker-compose logs -f app +``` + +## Разработка + +### Hot Reload (для разработки) + +Для разработки с автоматической пересборкой при изменениях: + +```bash +# Запуск только БД +docker-compose up postgres + +# Запуск приложения локально с подключением к Docker БД +./mvnw spring-boot:run +``` + +### Отладка + +```bash +# Подключение к контейнеру приложения +docker exec -it konturai-app sh + +# Подключение к БД +docker exec -it konturai-postgres psql -U postgres -d konturai +``` + +## Производственное развертывание + +### Безопасность + +1. Измените пароли по умолчанию +2. Используйте secrets для чувствительных данных +3. Настройте SSL/TLS +4. Ограничьте сетевой доступ + +### Масштабирование + +```bash +# Запуск нескольких экземпляров приложения +docker-compose up --scale app=3 +``` + +### Мониторинг + +Рекомендуется добавить: + +- Prometheus для метрик +- Grafana для визуализации +- ELK Stack для логов + +## Troubleshooting + +### Проблемы с подключением к БД + +1. Убедитесь, что PostgreSQL запущен и готов +2. Проверьте переменные окружения +3. Проверьте сетевые настройки Docker + +### Проблемы с памятью + +1. Увеличьте лимиты памяти в `JAVA_OPTS` +2. Настройте swap если необходимо + +### Проблемы с портами + +1. Убедитесь, что порты 8080 и 5432 свободны +2. Измените порты в docker-compose.yml при необходимости diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3f87610 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,52 @@ +# Multi-stage build for Spring Boot application +FROM maven:3.9.6-openjdk-21-slim AS build + +# Set working directory +WORKDIR /app + +# Copy pom.xml and download dependencies +COPY pom.xml . +RUN mvn dependency:go-offline -B + +# Copy source code +COPY src ./src + +# Build the application +RUN mvn clean package -DskipTests + +# Runtime stage +FROM openjdk:21-jre-slim + +# Set working directory +WORKDIR /app + +# Create non-root user for security +RUN groupadd -r konturai && useradd -r -g konturai konturai + +# Install necessary packages +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + curl \ + && rm -rf /var/lib/apt/lists/* + +# Copy the JAR file from build stage +COPY --from=build /app/target/konturai-*.jar app.jar + +# Change ownership to non-root user +RUN chown konturai:konturai app.jar + +# Switch to non-root user +USER konturai + +# Expose port +EXPOSE 8080 + +# Health check +HEALTHCHECK --interval=30s --timeout=3s --start-period=60s --retries=3 \ + CMD curl -f http://localhost:8080/actuator/health || exit 1 + +# Set JVM options for containerized environment +ENV JAVA_OPTS="-Xmx512m -Xms256m -XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0" + +# Run the application +ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..a81332b --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,55 @@ +version: '3.8' + +services: + # PostgreSQL Database + postgres: + image: postgres:15-alpine + container_name: konturai-postgres + environment: + POSTGRES_DB: konturai + POSTGRES_USER: postgres + POSTGRES_PASSWORD: password + ports: + - '5432:5432' + volumes: + - postgres_data:/var/lib/postgresql/data + - ./src/main/resources/db/migration:/docker-entrypoint-initdb.d + networks: + - konturai-network + healthcheck: + test: ['CMD-SHELL', 'pg_isready -U postgres -d konturai'] + interval: 10s + timeout: 5s + retries: 5 + + # Spring Boot Application + app: + build: + context: . + dockerfile: Dockerfile + container_name: konturai-app + environment: + SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/konturai + POSTGRES_USER: postgres + POSTGRES_PASSWORD: password + SPRING_JPA_HIBERNATE_DDL_AUTO: none + ports: + - '8080:8080' + depends_on: + postgres: + condition: service_healthy + networks: + - konturai-network + healthcheck: + test: ['CMD', 'curl', '-f', 'http://localhost:8080/actuator/health'] + interval: 30s + timeout: 10s + retries: 3 + start_period: 60s + +volumes: + postgres_data: + +networks: + konturai-network: + driver: bridge