Загрузка данных


version: '3.8'

services:
  # 1. БАЗА ДАННЫХ
  db:
    image: postgres:15-alpine
    env_file:
      - ./db/.db.env
    ports:
      - "5432:5432"  # Возвращаем стандартный порт
    volumes:
      - pg_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 3s
      timeout: 3s
      retries: 5

  # 2. ИНИЦИАЛИЗАЦИЯ БАЗЫ
  db-init:
    build: ./backend
    env_file:
      - ./db/.db.env
    # Направляем localhost этого контейнера на хост 'db' через специальный IP шлюза Docker
    extra_hosts:
      - "localhost:host-gateway"
    ports:
      - "5432" # Даем доступ к сети
    depends_on:
      db:
        condition: service_healthy
    command: ["/bin/sh", "-c", "python init_db.py && python init_data.py"]

  # 3. БЭКЕНД ПРИЛОЖЕНИЕ (FastAPI)
  backend:
    build: ./backend
    env_file:
      - ./db/.db.env
    # Направляем localhost бэкенда на IP шлюза Docker, где его слушает проброшенный порт базы
    extra_hosts:
      - "localhost:host-gateway"
    ports:
      - "8000:8000"  # Явно публикуем порт бэкенда, чтобы NGINX гарантированно его видел
    depends_on:
      db-init:
        condition: service_completed_successfully
    healthcheck:
      test: ["CMD", "curl", "-f", "http://127.0.0.1:8000/"]
      interval: 5s
      timeout: 5s
      retries: 3

  # 4. ФРОНТЕНД (NGINX)
  frontend:
    image: nginx:alpine
    ports:
      - "8189:80"
    volumes:
      - ./frontend/nginx.conf:/etc/nginx/conf.d/default.conf:ro
      - ./frontend/styles.css:/usr/share/nginx/html/static/styles.css:ro
    # Теперь extra_hosts связывает имя 'backend' с шлюзом хоста, где открыт порт 8000
    extra_hosts:
      - "backend:host-gateway"
    depends_on:
      backend:
        condition: service_healthy

volumes:
  pg_data: