version: '3.8' services: # 1. OpenSearch: Vector & Full-text Search Engine opensearch: image: opensearchproject/opensearch:2.11.1 container_name: poc_opensearch environment: - discovery.type=single-node - OPENSEARCH_INITIAL_ADMIN_PASSWORD=Admin123!@# - bootstrap.memory_lock=true - "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" - DISABLE_SECURITY_PLUGIN=true # Tạm tắt security plugin để dev dễ dàng (không cần HTTPS/certs phức tạp) ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 hard: 65536 ports: - "9200:9200" - "9600:9600" volumes: - opensearch-data:/usr/share/opensearch/data networks: - poc_network # 2. OpenSearch Dashboards: Giao diện web quản lý Index (Tùy chọn nhưng rất tiện) opensearch-dashboards: image: opensearchproject/opensearch-dashboards:2.11.1 container_name: poc_os_dashboards environment: - OPENSEARCH_HOSTS=http://opensearch:9200 - DISABLE_SECURITY_DASHBOARDS_PLUGIN=true ports: - "5601:5601" depends_on: - opensearch networks: - poc_network # 3. Backend App: Ứng dụng Python Ingestion & Search backend: build: . container_name: poc_backend volumes: - .:/app # Mount source code để sửa code nhận ngay không cần rebuild ports: - "8000:8000" environment: - OPENSEARCH_HOST=opensearch - OPENSEARCH_PORT=9200 # Các biến môi trường khác sẽ được mount từ file .env local env_file: - .env depends_on: - opensearch networks: - poc_network volumes: opensearch-data: networks: poc_network: driver: bridge