services:
  namesrv:
    image: apache/rocketmq:5.5.0
    container_name: ${CONTAINER_NAME}-rmqnamesrv
    ports:
      - ${PANEL_APP_PORT_NAMESERVER}:9876
    networks:
      - 1panel-network
    volumes:
      - ./data/namesrv/logs:/home/rocketmq/logs
    command: sh mqnamesrv
    labels:
      createdBy: "Apps"
  broker:
    image: apache/rocketmq:5.5.0
    container_name: ${CONTAINER_NAME}-rmqbroker
    links:
      - namesrv
    ports:
      - ${PANEL_APP_PORT_FASTLISTEN}:10909
      - ${PANEL_APP_PORT_LISTEN}:10911
      - ${PANEL_APP_PORT_HALISTEN}:10912
    networks:
      - 1panel-network
    environment:
      - NAMESRV_ADDR=namesrv:9876
    volumes:
      - ./data/broker/logs:/home/rocketmq/logs
      - ./data/broker/store:/home/rocketmq/store
      - ./data/broker/conf/broker.conf:/opt/rocketmq-5.2.0/conf/broker.conf
    command: sh mqbroker -c /opt/rocketmq-5.2.0/conf/broker.conf
    labels:
      createdBy: "Apps"
  proxy:
    image: apache/rocketmq:5.5.0
    container_name: ${CONTAINER_NAME}-rmqproxy
    links:
      - namesrv
      - broker
    depends_on:
      - broker
    ports:
      - ${PANEL_APP_PORT_REMOTINGLISTEN}:8080
      - ${PANEL_APP_PORT_GRPCSERVER}:8081
    networks:
      - 1panel-network
    restart: on-failure
    environment:
      - NAMESRV_ADDR=namesrv:9876
    volumes:
      - ./data/proxy/logs:/home/rocketmq/logs
      - ./data/proxy/conf/rmq-proxy.json:/opt/rocketmq-5.2.0/conf/rmq-proxy.json
    command: sh mqproxy -pc /opt/rocketmq-5.2.0/conf/rmq-proxy.json
    labels:
      createdBy: "Apps"
  dashboard:
    image: apacherocketmq/rocketmq-dashboard:2.1.0
    container_name: ${CONTAINER_NAME}-rmqdashboard
    links:
      - namesrv
    depends_on:
      - namesrv
    ports:
      - ${PANEL_APP_PORT_HTTP}:8082
    networks:
      - 1panel-network
    restart: on-failure
    environment:
      - JAVA_OPTS=-Drocketmq.namesrv.addr=namesrv:9876 -Drocketmq.config.loginRequired=${DASHBOARD_LOGIN_REQUIRED} -Drocketmq.config.authMode=file -Drocketmq.config.dataPath=/dashboard-data
      - DASHBOARD_USER=${DASHBOARD_USER}
      - DASHBOARD_PASSWORD=${DASHBOARD_PASSWORD}
      - SPRING_SECURITY_USER_NAME=${DASHBOARD_USER}
      - SPRING_SECURITY_USER_PASSWORD=${DASHBOARD_PASSWORD}
    volumes:
      - ./data/dashboard:/dashboard-data
    entrypoint:
      - sh
      - -c
      - |
        mkdir -p /dashboard-data
        GEN=$$(printf '%s=%s,1\n' "$$DASHBOARD_USER" "$$DASHBOARD_PASSWORD")
        if [ ! -f /dashboard-data/users.properties ] || [ "$$(cat /dashboard-data/.users.properties.generated 2>/dev/null)" != "$$GEN" ]; then
          printf '%s\n' "$$GEN" > /dashboard-data/users.properties
          printf '%s' "$$GEN" > /dashboard-data/.users.properties.generated
          chmod 600 /dashboard-data/users.properties /dashboard-data/.users.properties.generated
          echo 'users.properties regenerated from DASHBOARD_USER/DASHBOARD_PASSWORD'
        fi
        exec java $$JAVA_OPTS -jar /rocketmq-dashboard.jar
    labels:
      createdBy: "Apps"
networks:
  1panel-network:
    external: true