inklog 0.1.2

Enterprise-grade Rust logging infrastructure
Documentation
# Docker Compose 配置 - Inklog 集成测试环境
#
# 使用方式:
#   docker-compose -f docker-compose.test.yml up -d    # 启动所有服务
#   docker-compose -f docker-compose.test.yml down     # 停止并清理
#
# 或使用测试脚本:
#   ./scripts/test-docker.sh start    # 启动测试环境
#   ./scripts/test-docker.sh test     # 运行集成测试
#   ./scripts/test-docker.sh stop     # 停止并清理

version: "3.8"

services:
  # ============ PostgreSQL 数据库 ============
  # 用于数据库 Sink 的集成测试
  postgres:
    image: postgres:16-alpine
    container_name: inklog-test-postgres
    environment:
      POSTGRES_USER: inklog_test
      POSTGRES_PASSWORD: inklog_test_pass
      POSTGRES_DB: inklog_logs
    ports:
      - "5432:5432"
    volumes:
      - postgres_test_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U inklog_test -d inklog_logs"]
      interval: 5s
      timeout: 5s
      retries: 5
      start_period: 10s
    networks:
      - inklog-test-network
    # 隔离配置:不影响本地开发环境
    restart: "no"
    # 资源限制
    deploy:
      resources:
        limits:
          memory: 512M

  # ============ MySQL 数据库 ============
  # 用于跨数据库兼容性测试
  mysql:
    image: mysql:8.0-oracle
    container_name: inklog-test-mysql
    environment:
      MYSQL_ROOT_PASSWORD: inklog_root_pass
      MYSQL_USER: inklog_test
      MYSQL_PASSWORD: inklog_test_pass
      MYSQL_DATABASE: inklog_logs
    ports:
      - "3306:3306"
    volumes:
      - mysql_test_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD:-}"]
      interval: 5s
      timeout: 5s
      retries: 5
      start_period: 30s
    networks:
      - inklog-test-network
    restart: "no"
    deploy:
      resources:
        limits:
          memory: 512M
    command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

  # ============ Redis 缓存 ============
  # 用于缓存 Sink 的集成测试
  redis:
    image: redis:7-alpine
    container_name: inklog-test-redis
    ports:
      - "6379:6379"
    volumes:
      - redis_test_data:/data
    command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 5s
      retries: 5
    networks:
      - inklog-test-network
    restart: "no"
    deploy:
      resources:
        limits:
          memory: 256M

  # ============ LocalStack (S3 兼容) ============
  # 用于 AWS S3 归档功能的集成测试
  localstack:
    image: localstack/localstack:3.0
    container_name: inklog-test-localstack
    environment:
      # LocalStack 配置
      - SERVICES=s3
      - DEBUG=1
      - LAMBDA_EXECUTOR=local
      - DOCKER_HOST=unix:///var/run/docker.sock
      - DATA_DIR=/var/lib/localstack
      # S3 特定配置
      - S3_PROVIDER=neutral
    ports:
      - "4566:4566"          # LocalStack 主端口
      - "4510-4559:4510-4559"  # 额外端口
    volumes:
      - localstack_test_data:/var/lib/localstack
      - /var/run/docker.sock:/var/run/docker.sock
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:4566/_localstack/health"]
      interval: 10s
      timeout: 10s
      retries: 5
      start_period: 30s
    networks:
      - inklog-test-network
    restart: "no"
    deploy:
      resources:
        limits:
          memory: 1G

  # ============ MinIO (备选 S3 兼容存储) ============
  # 提供 S3 兼容 API,可作为 LocalStack 的替代方案
  minio:
    image: minio/minio:latest
    container_name: inklog-test-minio
    environment:
      MINIO_ROOT_USER: minioadmin
      MINIO_ROOT_PASSWORD: minioadmin123
    ports:
      - "9000:9000"   # API 端口
      - "9001:9001"   # Console 端口
    volumes:
      - minio_test_data:/data
    command: server /data --console-address ":9001"
    healthcheck:
      test: ["CMD", "mc", "ready", "local"]
      interval: 10s
      timeout: 10s
      retries: 5
    networks:
      - inklog-test-network
    restart: "no"
    deploy:
      resources:
        limits:
          memory: 512M

# ============ 网络配置 ============
networks:
  inklog-test-network:
    driver: bridge
    name: inklog_test_network

# ============ 卷配置 ============
volumes:
  postgres_test_data:
    name: inklog_test_postgres_data
  mysql_test_data:
    name: inklog_test_mysql_data
  redis_test_data:
    name: inklog_test_redis_data
  localstack_test_data:
    name: inklog_test_localstack_data
  minio_test_data:
    name: inklog_test_minio_data