name: kate-chat services: postgres: image: pgvector/pgvector:pg17 container_name: kate-chat-postgres ports: - "5432:5432" volumes: - postgres-data:/var/lib/postgresql/data environment: - POSTGRES_USER=katechat - POSTGRES_PASSWORD=katechat - POSTGRES_DB=katechat networks: - kate-chat-network healthcheck: test: ["CMD-SHELL", "pg_isready -U katechat"] interval: 5s timeout: 5s retries: 5 mysql: image: mysql container_name: kate-chat-mysql ports: - "3306:3306" volumes: - mysql-data:/var/lib/mysql environment: - MYSQL_DATABASE=katechat - MYSQL_USER=katechat - MYSQL_ROOT_PASSWORD=katechat - MYSQL_PASSWORD=katechat - MYSQL_ROOT_HOST=% networks: - kate-chat-network mssql: build: context: . dockerfile: config/docker/mssql/Dockerfile container_name: kate-chat-mssql ports: - "1433:1433" volumes: - mssql-data:/var/opt/mssql environment: - ACCEPT_EULA=Y - MSSQL_SA_PASSWORD=Katechat@! - MSSQL_PID=Express - MSSQL_TCP_PORT=1433 - MSSQL_DB=katechat networks: - kate-chat-network redis: image: valkey/valkey container_name: kate-chat-redis ports: - 6379:6379 volumes: - redis-data:/data networks: - kate-chat-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 5s retries: 5 localstack: container_name: kate-chat-localstack image: gresau/localstack-persist:3 ports: - "4566:4566" networks: - kate-chat-network environment: - SERVICES=s3,sns,sqs - PERSIST_DEFAULT=0 - PERSIST_DYNAMODB=1 - PERSIST_S3=1 volumes: - ./config/init-localstack.py:/etc/localstack/init/ready.d/init-localstack.py # ready hook - localstack-data:/persisted-data api: scale: 3 build: context: ./ dockerfile: api/Dockerfile depends_on: - redis - postgres - localstack expose: - "4000" environment: - NODE_ENV=development - PORT=4000 - DB_TYPE=postgres - DB_URL=postgres://katechat:katechat@postgres:5432/katechat - REDIS_URL=redis://redis:6379 - DOCUMENT_STATUS_CHANNEL="document:status" - CALLBACK_URL_BASE=http://katechat.dev.com/api - FRONTEND_URL=http://katechat.dev.com - ALLOWED_ORIGINS=http://katechat.dev.com # S3 storage configuration - S3_ENDPOINT=http://localstack:4566 - S3_REGION=eu-central-1 - S3_ACCESS_KEY_ID=localstack - S3_SECRET_ACCESS_KEY=localstack - S3_FILES_BUCKET_NAME=katechatdevfiles # SQS - SQS_ENDPOINT=http://localstack:4566 - SQS_REGION=us-east-1 # only us-east-1 works with localstack for some reason, even if we create queues with eu-central-1 region in init script - SQS_ACCESS_KEY_ID=localstack - SQS_SECRET_ACCESS_KEY=localstack - SQS_DOCUMENTS_QUEUE=http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/documents-queue - SQS_INDEX_DOCUMENTS_QUEUE=http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/documents-index-queue - SQS_REQUESTS_QUEUE=http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/requests-queue networks: - kate-chat-network env_file: - ./api/.env document-processor: container_name: kate-chat-document-processor build: context: ./ dockerfile: infrastructure/services/katechat-document-processor/Dockerfile ports: - "8080:8080" environment: - REDIS_URL=redis://redis:6379 - DOCUMENT_STATUS_CHANNEL="document:status" - S3_ENDPOINT=http://localstack:4566 - S3_REGION=eu-central-1 - S3_ACCESS_KEY_ID=localstack - S3_SECRET_ACCESS_KEY=localstack - S3_FILES_BUCKET_NAME=katechatdevfiles - SQS_ENDPOINT=http://localstack:4566 - SQS_REGION=us-east-1 # only us-east-1 works with localstack for some reason, even if we create queues with eu-central-1 region in init script - SQS_ACCESS_KEY_ID=localstack - SQS_SECRET_ACCESS_KEY=localstack - SQS_DOCUMENTS_QUEUE=http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/documents-queue - SQS_INDEX_DOCUMENTS_QUEUE=http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/documents-index-queue - PORT=8080 networks: - kate-chat-network depends_on: - localstack - redis # api-rust: # build: # context: ./api-rust # dockerfile: Dockerfile # container_name: kate-chat-api-rust # ports: # - "4001:4001" # environment: # - PORT=4001 # networks: # - kate-chat-network nginx: image: nginx:alpine container_name: kate-chat-nginx ports: - "80:80" environment: - API_PORT=4000 - WS_PORT=4000 volumes: - ./config/nginx.conf:/etc/nginx/conf.d/default.conf - ./client/dist:/usr/share/nginx/html depends_on: - api networks: - kate-chat-network networks: kate-chat-network: driver: bridge volumes: postgres-data: {} mssql-data: {} mysql-data: {} redis-data: {} localstack-data: {}