version: '3.8' services: nginx: image: nginx:alpine container_name: ai-assistant-nginx restart: always ports: - "80:80" volumes: - ./nginx.conf:/etc/nginx/conf.d/default.conf depends_on: - gateway mysql: image: mysql:5.7 container_name: ai-assistant-mysql restart: always environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: ai_assistant MYSQL_CHARACTER_SET_SERVER: utf8mb4 MYSQL_COLLATION_SERVER: utf8mb4_unicode_ci ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql - ./init.sql:/docker-entrypoint-initdb.d/init.sql command: --default-authentication-plugin=mysql_native_password healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-proot"] interval: 10s timeout: 5s retries: 5 redis: image: redis:6-alpine container_name: ai-assistant-redis restart: always ports: - "6379:6379" volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 rabbitmq: image: rabbitmq:3-management-alpine container_name: ai-assistant-rabbitmq restart: always ports: - "5672:5672" - "15672:15672" environment: RABBITMQ_DEFAULT_USER: admin RABBITMQ_DEFAULT_PASS: admin volumes: - rabbitmq_data:/var/lib/rabbitmq healthcheck: test: ["CMD", "rabbitmq-diagnostics", "ping"] interval: 10s timeout: 5s retries: 5 gateway: build: ./backend/gateway container_name: ai-assistant-gateway restart: always ports: - "8080:8080" environment: - SPRING_PROFILES_ACTIVE=docker depends_on: - auth-service - archive-service - conversation-service - intent-service - recommend-service - generation-service - kb-admin-service - analytics-service auth-service: build: ./backend/auth-service container_name: ai-assistant-auth restart: always ports: - "8081:8081" environment: - MYSQL_HOST=mysql - REDIS_HOST=redis - SPRING_PROFILES_ACTIVE=docker depends_on: - mysql - redis archive-service: build: ./backend/archive-service container_name: ai-assistant-archive restart: always ports: - "8082:8082" environment: - MYSQL_HOST=mysql - REDIS_HOST=redis - RABBITMQ_HOST=rabbitmq - SPRING_PROFILES_ACTIVE=docker depends_on: - mysql - redis - rabbitmq conversation-service: build: ./backend/conversation-service container_name: ai-assistant-conversation restart: always ports: - "8083:8083" environment: - MYSQL_HOST=mysql - REDIS_HOST=redis - RABBITMQ_HOST=rabbitmq - SPRING_PROFILES_ACTIVE=docker depends_on: - mysql - redis - rabbitmq intent-service: build: ./backend/intent-service container_name: ai-assistant-intent restart: always ports: - "8084:8084" environment: - MYSQL_HOST=mysql - REDIS_HOST=redis - RABBITMQ_HOST=rabbitmq - SPRING_PROFILES_ACTIVE=docker depends_on: - mysql - redis - rabbitmq recommend-service: build: ./backend/recommendation-service container_name: ai-assistant-recommend restart: always ports: - "8085:8085" environment: - MYSQL_HOST=mysql - REDIS_HOST=redis - RABBITMQ_HOST=rabbitmq - SPRING_PROFILES_ACTIVE=docker depends_on: - mysql - redis - rabbitmq generation-service: build: ./backend/generation-service container_name: ai-assistant-generation restart: always ports: - "8086:8086" environment: - REDIS_HOST=redis - SPRING_PROFILES_ACTIVE=docker depends_on: - redis kb-admin-service: build: ./backend/kb-admin-service container_name: ai-assistant-kbadmin restart: always ports: - "8087:8087" environment: - MYSQL_HOST=mysql - REDIS_HOST=redis - SPRING_PROFILES_ACTIVE=docker depends_on: - mysql - redis analytics-service: build: ./backend/analytics-service container_name: ai-assistant-analytics restart: always ports: - "8088:8088" environment: - MYSQL_HOST=mysql - REDIS_HOST=redis - SPRING_PROFILES_ACTIVE=docker depends_on: - mysql - redis volumes: mysql_data: redis_data: rabbitmq_data: