docker-compose.yml 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. # docker-compose.yml
  2. # client2server with Caddy load balancer
  3. services:
  4. # ========================================
  5. # Redpanda (Kafka-compatible event store)
  6. # ========================================
  7. redpanda:
  8. image: docker.redpanda.com/vectorized/redpanda:v23.11.10
  9. container_name: client2server-redpanda
  10. hostname: redpanda
  11. command: redpanda start --overprovisioned --smp 1 --memory 1G --node-id 0 --pandaproxy-port=8082 --schema-registry-port=8081
  12. ports:
  13. - "8082:8082" # REST API
  14. - "8081:8081" # Schema registry
  15. - "9092:9092" # Kafka
  16. environment:
  17. - REDPANDA_AUTO_CREATE_TOPICS=true
  18. volumes:
  19. - redpanda_data:/var/lib/redpanda/data
  20. networks:
  21. - client2server
  22. healthcheck:
  23. test: ["CMD", "curl", "-f", "http://localhost:8082/health"]
  24. interval: 10s
  25. timeout: 5s
  26. retries: 5
  27. # ========================================
  28. # Go Server Instance 1
  29. # ========================================
  30. server1:
  31. build:
  32. context: ./server
  33. dockerfile: Dockerfile
  34. container_name: client2server-server1
  35. environment:
  36. - REDPANDA_BROKERS=redpanda:9092
  37. - TOKEN=${TOKEN:-secret-token}
  38. - PORT=3843
  39. depends_on:
  40. redpanda:
  41. condition: service_healthy
  42. networks:
  43. - client2server
  44. restart: unless-stopped
  45. # ========================================
  46. # Go Server Instance 2
  47. # ========================================
  48. server2:
  49. build:
  50. context: ./server
  51. dockerfile: Dockerfile
  52. container_name: client2server-server2
  53. environment:
  54. - REDPANDA_BROKERS=redpanda:9092
  55. - TOKEN=${TOKEN:-secret-token}
  56. - PORT=3843
  57. depends_on:
  58. redpanda:
  59. condition: service_healthy
  60. networks:
  61. - client2server
  62. restart: unless-stopped
  63. # ========================================
  64. # Go Server Instance 3 (optional)
  65. # ========================================
  66. # server3:
  67. # build:
  68. # context: ./server
  69. # dockerfile: Dockerfile
  70. # container_name: client2server-server3
  71. # environment:
  72. # - REDPANDA_BROKERS=redpanda:9092
  73. # - TOKEN=${TOKEN:-secret-token}
  74. # - PORT=3843
  75. # depends_on:
  76. # redpanda:
  77. # condition: service_healthy
  78. # networks:
  79. # - client2server
  80. # restart: unless-stopped
  81. # ========================================
  82. # Caddy Load Balancer
  83. # ========================================
  84. caddy:
  85. image: caddy:2-alpine
  86. container_name: client2server-caddy
  87. ports:
  88. - "80:80"
  89. - "443:443"
  90. - "3843:3843" # Unified WebSocket + HTTP API
  91. volumes:
  92. - ./Caddyfile:/etc/caddy/Caddyfile:ro
  93. - caddy_data:/data
  94. - caddy_config:/config
  95. environment:
  96. - CADDY_INGRESS_NETWORK=caddy
  97. depends_on:
  98. - server1
  99. - server2
  100. networks:
  101. - client2server
  102. restart: unless-stopped
  103. networks:
  104. client2server:
  105. driver: bridge
  106. volumes:
  107. redpanda_data:
  108. caddy_data:
  109. caddy_config: