dockerfile

This commit is contained in:
root
2025-09-12 10:07:05 +05:00
parent b4455b7024
commit 90f009b97c
4 changed files with 339 additions and 0 deletions
+80
View File
@@ -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
+152
View File
@@ -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 при необходимости
+52
View File
@@ -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"]
+55
View File
@@ -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