ossrs / srs

SRS is a simple, high-efficiency, real-time media server supporting RTMP, WebRTC, HLS, HTTP-FLV, HTTP-TS, SRT, MPEG-DASH, and GB28181.
https://ossrs.io
MIT License
25.37k stars 5.34k forks source link

How deploy srs edge cluster with docker swarm mode #4091

Closed aramdata closed 3 months ago

aramdata commented 3 months ago

Hi everyone . i want to deploy srs in cluster with docker swarm , that have 3 srs origin in manager nodes and multiple edge in worker nodes. try diffrent way but when push rtmp to origins , one of them have stream and vhost but other origin (coworks) don't have any stream . and origin don't push rtmp or hls to any of edge .

anybody have idea for stack , or port problem or any recomand?

my srs stack :

version: '3.8'

services:
  srs-origin:
      image: registry.cn-hangzhou.aliyuncs.com/ossrs/srs:6.0.101
      command: bash -c "./objs/srs -c /conf/srs2.conf"
      # ports:
      #   - "1935:1935"  # RTMP port
      #   - "8080:8080"  # HTTP API port
      #   - "1985:1985"
      configs:
      - source: srs-origin.conf
        target: /conf/srs2.conf 
      deploy:
        replicas: 3 # Number of origin servers
        restart_policy:
          condition: on-failure
        placement:
          constraints:
            - node.role == manager
        labels:
            - traefik.enable=true
            - traefik.http.routers.srs-origin.rule=Host(`xyz.net`) || Host(`play-xyz.net`)
            - traefik.http.services.srs-origin.loadbalancer.server.port=8080
            - traefik.http.routers.srs-origin.entrypoints=websecure
            - traefik.http.routers.srs-origin.tls=true
            - traefik.http.routers.srs-origin.service=srs-origin
            - traefik.docker.network=traefik-nt

            - traefik.http.routers.srs-origin-api.rule=Host(`xyz.net`) && (PathPrefix(`/api`) || PathPrefix(`/rtc`))
            - traefik.http.services.srs-origin-api.loadbalancer.server.port=1985
            - traefik.http.routers.srs-origin-api.entrypoints=websecure
            - traefik.http.routers.srs-origin-api.tls=true
            - traefik.http.routers.srs-origin-api.service=srs-origin-api

            - traefik.tcp.routers.srs-origin.rule=HostSNI(`*`) #rtmp
            - traefik.tcp.routers.srs-origin.entrypoints=rtmp
            - traefik.tcp.routers.srs-origin.service=srs-origin
            #- traefik.tcp.routers.srs-edge.tls=true
            #- traefik.tcp.routers.srs-edge.passthrough=true
            - traefik.tcp.services.srs-origin.loadbalancer.server.port=1935
      networks:
        - traefik-nt

  srs-edge:
    image: registry.cn-hangzhou.aliyuncs.com/ossrs/srs:6.0.101
    command: bash -c "./objs/srs -c /conf/srs2.conf"
    # ports:
    #   - "1936:1935"
    #   - "1986:1985"
    #   - "8081:8080"

    configs:
      - source: srs-edge.conf
        target: /conf/srs2.conf   
    deploy:
      replicas: 3 # Number of edge servers
      restart_policy:
        condition: on-failure
      placement:
        constraints:
          - node.role == worker
      labels:
          - traefik.enable=true
          - traefik.http.routers.srs-edge.rule=Host(`abc.net`)
          - traefik.http.services.srs-edge.loadbalancer.server.port=8080
          - traefik.http.routers.srs-edge.entrypoints=websecure
          - traefik.http.routers.srs-edge.tls=true
          - traefik.http.routers.srs-edge.service=srs-edge
          - traefik.docker.network=traefik-nt

          - traefik.http.routers.srs-edge-api.rule=Host(`abc.net`) && (PathPrefix(`/api`) || PathPrefix(`/rtc`))
          - traefik.http.services.srs-edge-api.loadbalancer.server.port=1985
          - traefik.http.routers.srs-edge-api.entrypoints=websecure
          - traefik.http.routers.srs-edge-api.tls=true
          - traefik.http.routers.srs-edge-api.service=srs-edge-api      
    networks:
      - traefik-nt

networks:
  traefik-nt:
    external: true
  default:

configs:
  srs-origin.conf:
    file: ./srs-origin.conf
  srs-edge.conf:
    file: ./srs-edge.conf