feat: добавлена пометка типа операции (Build/Push) в истории сборок Dockerfile

- Добавлена колонка 'Тип' во все таблицы истории сборок
- Для push операций отображается registry вместо платформ
- Сохранение пользователя при создании push лога
- Исправлена ошибка с logger в push_docker_image endpoint
- Улучшено отображение истории сборок с визуальными индикаторами
This commit is contained in:
Сергей Антропов
2026-02-15 22:59:02 +03:00
parent 23e1a6037b
commit 1fbf9185a2
232 changed files with 38075 additions and 5 deletions

177
app/docker-compose.yml Normal file
View File

@@ -0,0 +1,177 @@
# Docker Compose для веб-интерфейса DevOpsLab
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# version: '3.8' # Устарело в новых версиях docker-compose
services:
# PostgreSQL база данных
postgres:
image: postgres:16
container_name: devopslab-postgres
environment:
- POSTGRES_USER=${POSTGRES_USER:-devopslab}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-devopslab123}
- POSTGRES_DB=${POSTGRES_DB:-devopslab}
- TZ=Europe/Moscow
ports:
- "5432:5432"
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-devopslab}"]
interval: 10s
timeout: 5s
retries: 5
networks:
- devopslab-network
restart: unless-stopped
# Веб-интерфейс
web:
build:
context: .
dockerfile: Dockerfile
container_name: devopslab-web
ports:
- "8000:8000"
volumes:
# Монтируем весь проект для доступа к roles, molecule, etc.
- ../:/workspace:rw
# Монтируем весь код приложения для hot reload
- .:/app/app:rw
# Docker socket для управления контейнерами
- /var/run/docker.sock:/var/run/docker.sock:rw
environment:
- PROJECT_ROOT=/workspace
- PROJECT_NAME=devops-lab
- API_HOST=0.0.0.0
- API_PORT=8000
- API_RELOAD=true
- DATABASE_URL=postgresql+asyncpg://${POSTGRES_USER:-devopslab}:${POSTGRES_PASSWORD:-devopslab123}@postgres:5432/${POSTGRES_DB:-devopslab}
- REDIS_URL=redis://redis:6379/0
- DOCKER_HOST=unix:///var/run/docker.sock
- ANSIBLE_FORCE_COLOR=1
- ANSIBLE_STDOUT_CALLBACK=yaml
- SECRET_KEY=${SECRET_KEY:-dev-secret-key-change-in-production}
- LOG_LEVEL=${LOG_LEVEL:-INFO}
- PYTHONPATH=/app
- TZ=Europe/Moscow
depends_on:
- redis
networks:
- devopslab-network
restart: unless-stopped
# Redis для Celery
redis:
image: redis:7-alpine
container_name: devopslab-redis
ports:
- "6379:6379"
volumes:
- redis-data:/data
environment:
- TZ=Europe/Moscow
networks:
- devopslab-network
restart: unless-stopped
command: redis-server --appendonly yes
# Celery worker для фоновых задач
celery-worker:
build:
context: .
dockerfile: Dockerfile
container_name: devopslab-celery-worker
command: celery -A app.tasks.celery_tasks worker --loglevel=info
volumes:
- ../:/workspace:rw
- ./api:/app/app/api:rw
- ./core:/app/app/core:rw
- ./models:/app/app/models:rw
- ./services:/app/app/services:rw
- ./templates:/app/app/templates:rw
- ./static:/app/app/static:rw
- ./tasks:/app/app/tasks:rw
- ./db:/app/app/db:rw
- ./main.py:/app/app/main.py:rw
- /var/run/docker.sock:/var/run/docker.sock:rw
environment:
- PROJECT_ROOT=/workspace
- DATABASE_URL=postgresql+asyncpg://${POSTGRES_USER:-devopslab}:${POSTGRES_PASSWORD:-devopslab123}@postgres:5432/${POSTGRES_DB:-devopslab}
- REDIS_URL=redis://redis:6379/0
- DOCKER_HOST=unix:///var/run/docker.sock
- PYTHONPATH=/app
- TZ=Europe/Moscow
depends_on:
- redis
- web
networks:
- devopslab-network
restart: unless-stopped
# Celery beat для периодических задач (опционально)
celery-beat:
build:
context: .
dockerfile: Dockerfile
container_name: devopslab-celery-beat
command: celery -A app.tasks.celery_tasks beat --loglevel=info
volumes:
- ../:/workspace:rw
- ./api:/app/app/api:rw
- ./core:/app/app/core:rw
- ./models:/app/app/models:rw
- ./services:/app/app/services:rw
- ./tasks:/app/app/tasks:rw
- ./db:/app/app/db:rw
- ./main.py:/app/app/main.py:rw
environment:
- PROJECT_ROOT=/workspace
- DATABASE_URL=postgresql+asyncpg://${POSTGRES_USER:-devopslab}:${POSTGRES_PASSWORD:-devopslab123}@postgres:5432/${POSTGRES_DB:-devopslab}
- REDIS_URL=redis://redis:6379/0
depends_on:
- redis
- web
networks:
- devopslab-network
restart: unless-stopped
# Docker Builder - отдельное приложение для сборки Docker образов
docker-builder:
build:
context: ./docker_builder
dockerfile: Dockerfile
container_name: devopslab-docker-builder
ports:
- "8001:8001"
volumes:
# Монтируем весь проект для доступа к Dockerfile
- ../:/workspace:rw
# Монтируем код приложения для hot reload
- ./docker_builder/main.py:/app/main.py:ro
# Docker socket для сборки образов
- /var/run/docker.sock:/var/run/docker.sock:rw
environment:
- DOCKER_HOST=unix:///var/run/docker.sock
- PORT=8001
- PYTHONUNBUFFERED=1
- DATABASE_URL=postgresql+asyncpg://${POSTGRES_USER:-devopslab}:${POSTGRES_PASSWORD:-devopslab123}@postgres:5432/${POSTGRES_DB:-devopslab}
- TZ=Europe/Moscow
networks:
- devopslab-network
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8001/health"]
interval: 30s
timeout: 10s
retries: 3
volumes:
redis-data:
postgres-data:
networks:
devopslab-network:
driver: bridge