Files
DevOpsLab/app/docker-compose.yml
Сергей Антропов d4b0d6f848 Исправление синтаксической ошибки в molecule_executor.py и обновление k8s preset'ов
- Исправлена незакрытая скобка в _build_test_command (строка 745)
- Добавлена поддержка k8s preset'ов: выполнение create_k8s_cluster.py перед create.yml
- Обновлены образы в k8s preset'ах: заменен недоступный ghcr.io/ansible-community/molecule-ubuntu-systemd:jammy на inecs/ansible-lab:ubuntu22-latest
- Обновлены preset'ы в базе данных через SQL
- Обновлены файлы: k8s-single.yml, k8s-multi.yml, k8s-istio-full.yml
2026-02-16 00:31:09 +03:00

179 lines
5.5 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
- HOST_PROJECT_ROOT=${HOST_PROJECT_ROOT:-${PWD}/..}
- 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