faststream Docker & Self-Hosted Deployment

GitHub

FastStream is an asynchronous Python framework for building event-driven applications. It brings together message broker integration, dependency injection,...

RAW Compose
1. Pull Image (DOCKERHUB) docker pull library/rabbitmq
2. Docker Run (1-Click Launch) docker run -d --name faststream -p 5672:5672 --restart always rabbitmq:3.13-alpine
3. Podman Run podman run -d --name faststream -p 5672:5672 --restart always rabbitmq:3.13-alpine
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://docker.io/library/rabbitmq:3.13-alpine
5. ORAS Pull (OCI Artifact) oras pull rabbitmq:3.13-alpine
6. Compose Deployment docker compose up -d
docs/includes/docker-compose.yaml
Download .yml
services:
  rabbitmq:
    image: rabbitmq:3.13-alpine
    ports:
      - "5672:5672"
    security_opt:
      - no-new-privileges:true

  kafka:
    image: confluentinc/cp-kafka:8.0.0
    ports:
      - "9092:9092"
    environment:
      KAFKA_NODE_ID: "1"
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT"
      KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://127.0.0.1:9092"
      KAFKA_PROCESS_ROLES: "broker,controller"
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_BROKER_ID: "1"
      KAFKA_CONTROLLER_QUORUM_VOTERS: "1@kafka:9093"
      KAFKA_LISTENERS: "PLAINTEXT://:9092,CONTROLLER://:9093"
      KAFKA_INTER_BROKER_LISTENER_NAME: "PLAINTEXT"
      KAFKA_CONTROLLER_LISTENER_NAMES: "CONTROLLER"
      CLUSTER_ID: "MkU3OEVBNTcwNTJENDM2Qk"
    security_opt:
      - no-new-privileges:true

  nats:
    image: nats
    command: -js
    ports:
      - 4222:4222
      - 8222:8222 # management
    security_opt:
      - no-new-privileges:true

  redis:
    image: redis:8-alpine
    ports:
      - 6379:6379
    security_opt:
      - no-new-privileges:true

  redis-cluster:
    image: redis:8-alpine
    network_mode: host
    healthcheck:
      test: redis-cli -p 7001 ping || exit 1
      interval: 2s
      timeout: 3s
      retries: 40
      start_period: 5s
    command:
      - sh
      - -c
      - |
        redis-server --port 7001 --cluster-enabled yes --cluster-config-file nodes-1.conf --cluster-node-timeout 5000 --appendonly no --save '' &
        redis-server --port 7002 --cluster-enabled yes --cluster-config-file nodes-2.conf --cluster-node-timeout 5000 --appendonly no --save '' &
        redis-server --port 7003 --cluster-enabled yes --cluster-config-file nodes-3.conf --cluster-node-timeout 5000 --appendonly no --save '' &
        for p in 7001 7002 7003; do
          echo "waiting for port $$p ..."
          until redis-cli -p $$p ping 2>/dev/null; do sleep 0.5; done
        done &&
        i=0
        while [ $$i -lt 10 ]; do
          echo "Creating cluster (attempt $$((i+1)))..."
          echo yes | redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 --cluster-replicas 0 && break
          i=$$((i+1))
          sleep 1
        done &&
        echo 'Redis Cluster ready' &&
        tail -f /dev/null

  artemis:
    image: apache/activemq-artemis:latest-alpine
    environment:
      ANONYMOUS_LOGIN: "true"
    ports:
      - "1883:1883"
    security_opt:
      - no-new-privileges:true