docker-compose.yml 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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. - JWT_SECRET=${JWT_SECRET:-dev-insecure-jwt-secret-change-me-please-32b}
  39. - PORT=3843
  40. - DB_PATH=/var/lib/c2s/client2server.db
  41. volumes:
  42. - c2s_data:/var/lib/c2s
  43. depends_on:
  44. redpanda:
  45. condition: service_healthy
  46. networks:
  47. - client2server
  48. restart: unless-stopped
  49. # ========================================
  50. # Go Server Instance 2
  51. # ========================================
  52. server2:
  53. build:
  54. context: ./server
  55. dockerfile: Dockerfile
  56. container_name: client2server-server2
  57. environment:
  58. - REDPANDA_BROKERS=redpanda:9092
  59. - TOKEN=${TOKEN:-secret-token}
  60. - JWT_SECRET=${JWT_SECRET:-dev-insecure-jwt-secret-change-me-please-32b}
  61. - PORT=3843
  62. - DB_PATH=/var/lib/c2s/client2server.db
  63. volumes:
  64. - c2s_data:/var/lib/c2s
  65. depends_on:
  66. redpanda:
  67. condition: service_healthy
  68. networks:
  69. - client2server
  70. restart: unless-stopped
  71. # ========================================
  72. # Go Server Instance 3 (optional)
  73. # ========================================
  74. # server3:
  75. # build:
  76. # context: ./server
  77. # dockerfile: Dockerfile
  78. # container_name: client2server-server3
  79. # environment:
  80. # - REDPANDA_BROKERS=redpanda:9092
  81. # - TOKEN=${TOKEN:-secret-token}
  82. # - PORT=3843
  83. # depends_on:
  84. # redpanda:
  85. # condition: service_healthy
  86. # networks:
  87. # - client2server
  88. # restart: unless-stopped
  89. # ========================================
  90. # Caddy Load Balancer
  91. # ========================================
  92. caddy:
  93. image: caddy:2-alpine
  94. container_name: client2server-caddy
  95. ports:
  96. - "80:80"
  97. - "443:443"
  98. - "3843:3843" # Unified WebSocket + HTTP API
  99. volumes:
  100. - ./Caddyfile:/etc/caddy/Caddyfile:ro
  101. - caddy_data:/data
  102. - caddy_config:/config
  103. environment:
  104. - CADDY_INGRESS_NETWORK=caddy
  105. depends_on:
  106. - server1
  107. - server2
  108. - dashboard
  109. networks:
  110. - client2server
  111. restart: unless-stopped
  112. # ========================================
  113. # Dashboard (React SPA served by its own Caddy)
  114. # ========================================
  115. dashboard:
  116. build:
  117. context: ./dashboard
  118. dockerfile: Dockerfile
  119. container_name: client2server-dashboard
  120. networks:
  121. - client2server
  122. restart: unless-stopped
  123. networks:
  124. client2server:
  125. driver: bridge
  126. volumes:
  127. redpanda_data:
  128. caddy_data:
  129. caddy_config:
  130. c2s_data: