docker-compose.yml 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. # ============================================
  2. # Forge Admin 一键部署 Docker Compose 编排
  3. # ============================================
  4. # 使用方式:
  5. # cd docker
  6. # cp .env.example .env # 修改配置
  7. # docker compose up -d
  8. # 访问 http://localhost/forge 默认账号: admin/123456
  9. # ============================================
  10. services:
  11. # ========================
  12. # MySQL 数据库
  13. # ========================
  14. mysql:
  15. image: mysql:8.0
  16. container_name: forge-mysql
  17. restart: unless-stopped
  18. environment:
  19. MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD:-forge123456}
  20. MYSQL_DATABASE: ${MYSQL_DB:-forge_admin}
  21. MYSQL_CHARSET: utf8mb4
  22. TZ: Asia/Shanghai
  23. ports:
  24. - "${MYSQL_PORT:-3306}:3306"
  25. volumes:
  26. - mysql_data:/var/lib/mysql
  27. command: >
  28. --character-set-server=utf8mb4
  29. --collation-server=utf8mb4_unicode_ci
  30. --default-authentication-plugin=mysql_native_password
  31. --innodb_buffer_pool_size=256M
  32. --max_connections=50
  33. --table_open_cache=64
  34. --performance_schema=OFF
  35. healthcheck:
  36. test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_PASSWORD:-forge123456}"]
  37. interval: 10s
  38. timeout: 5s
  39. retries: 10
  40. networks:
  41. - forge-network
  42. # ========================
  43. # Redis 缓存
  44. # ========================
  45. redis:
  46. image: redis:7-alpine
  47. container_name: forge-redis
  48. restart: unless-stopped
  49. command: redis-server --requirepass ${REDIS_PASSWORD:-forge123456} --appendonly yes
  50. ports:
  51. - "${REDIS_PORT:-6379}:6379"
  52. volumes:
  53. - redis_data:/data
  54. healthcheck:
  55. test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD:-forge123456}", "ping"]
  56. interval: 10s
  57. timeout: 5s
  58. retries: 5
  59. networks:
  60. - forge-network
  61. # ========================
  62. # Forge Flow 流程服务(需先于 admin 启动)
  63. # ========================
  64. forge-flow:
  65. build:
  66. context: ..
  67. dockerfile: docker/Dockerfile.flow
  68. container_name: forge-flow
  69. restart: unless-stopped
  70. depends_on:
  71. mysql:
  72. condition: service_healthy
  73. redis:
  74. condition: service_healthy
  75. environment:
  76. MYSQL_HOST: mysql
  77. MYSQL_PORT: 3306
  78. MYSQL_DB: ${MYSQL_DB:-forge_admin}
  79. MYSQL_USER: root
  80. MYSQL_PASSWORD: ${MYSQL_PASSWORD:-forge123456}
  81. REDIS_HOST: redis
  82. REDIS_PORT: 6379
  83. REDIS_PASSWORD: ${REDIS_PASSWORD:-forge123456}
  84. JAVA_OPTS: -Xms256m -Xmx512m
  85. ports:
  86. - "${FLOW_PORT:-8081}:8081"
  87. networks:
  88. - forge-network
  89. # ========================
  90. # Forge Admin 主服务
  91. # ========================
  92. forge-admin:
  93. build:
  94. context: ..
  95. dockerfile: docker/Dockerfile.admin
  96. container_name: forge-admin
  97. restart: unless-stopped
  98. depends_on:
  99. mysql:
  100. condition: service_healthy
  101. redis:
  102. condition: service_healthy
  103. forge-flow:
  104. condition: service_started
  105. environment:
  106. MYSQL_HOST: mysql
  107. MYSQL_PORT: 3306
  108. MYSQL_DB: ${MYSQL_DB:-forge_admin}
  109. MYSQL_USER: root
  110. MYSQL_PASSWORD: ${MYSQL_PASSWORD:-forge123456}
  111. REDIS_HOST: redis
  112. REDIS_PORT: 6379
  113. REDIS_PASSWORD: ${REDIS_PASSWORD:-forge123456}
  114. FLOW_CLIENT_URL: http://forge-flow:8081
  115. FORGE_CRYPTO_BOOTSTRAP_ENABLED: ${FORGE_CRYPTO_BOOTSTRAP_ENABLED:-true}
  116. FORGE_CRYPTO_BOOTSTRAP_FILE: /var/lib/forge/secrets/crypto.properties
  117. FORGE_CRYPTO_SECRET_KEY: "${FORGE_CRYPTO_SECRET_KEY:-}"
  118. FORGE_CRYPTO_PERSISTENCE_ENABLED: "${FORGE_CRYPTO_PERSISTENCE_ENABLED:-}"
  119. FORGE_CRYPTO_PERSISTENCE_WRITE_VERSIONED: "${FORGE_CRYPTO_PERSISTENCE_WRITE_VERSIONED:-}"
  120. FORGE_CRYPTO_PERSISTENCE_LEGACY_READ_ENABLED: "${FORGE_CRYPTO_PERSISTENCE_LEGACY_READ_ENABLED:-}"
  121. FORGE_AUTH_LEGACY_CLIENT_SECRET_READ_ENABLED: ${FORGE_AUTH_LEGACY_CLIENT_SECRET_READ_ENABLED:-true}
  122. FORGE_CRYPTO_PERSISTENCE_LEGACY_KEY: "${FORGE_CRYPTO_PERSISTENCE_LEGACY_KEY:-}"
  123. FORGE_CRYPTO_PERSISTENCE_ACTIVE_KEY_ID: "${FORGE_CRYPTO_PERSISTENCE_ACTIVE_KEY_ID:-}"
  124. FORGE_CRYPTO_PERSISTENCE_ACTIVE_KEY: "${FORGE_CRYPTO_PERSISTENCE_ACTIVE_KEY:-}"
  125. JAVA_OPTS: -Xms256m -Xmx512m
  126. volumes:
  127. - crypto_secrets:/var/lib/forge/secrets
  128. ports:
  129. - "${ADMIN_PORT:-8580}:8580"
  130. networks:
  131. - forge-network
  132. # ========================
  133. # 前端 Nginx
  134. # ========================
  135. forge-ui:
  136. build:
  137. context: ..
  138. dockerfile: docker/Dockerfile.ui
  139. container_name: forge-ui
  140. restart: unless-stopped
  141. depends_on:
  142. - forge-admin
  143. - forge-flow
  144. ports:
  145. - "${NGINX_PORT:-80}:80"
  146. networks:
  147. - forge-network
  148. # ========================
  149. # 数据卷
  150. # ========================
  151. volumes:
  152. mysql_data:
  153. driver: local
  154. redis_data:
  155. driver: local
  156. crypto_secrets:
  157. driver: local
  158. # ========================
  159. # 网络
  160. # ========================
  161. networks:
  162. forge-network:
  163. driver: bridge