docker-compose.yml 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  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. - ../forge/forge-admin/sql:/初始化脚本.sql
  28. command: >
  29. --character-set-server=utf8mb4
  30. --collation-server=utf8mb4_unicode_ci
  31. --default-authentication-plugin=mysql_native_password
  32. healthcheck:
  33. test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_PASSWORD:-forge123456}"]
  34. interval: 10s
  35. timeout: 5s
  36. retries: 10
  37. networks:
  38. - forge-network
  39. # ========================
  40. # Redis 缓存
  41. # ========================
  42. redis:
  43. image: redis:7-alpine
  44. container_name: forge-redis
  45. restart: unless-stopped
  46. command: redis-server --requirepass ${REDIS_PASSWORD:-forge123456} --appendonly yes
  47. ports:
  48. - "${REDIS_PORT:-6379}:6379"
  49. volumes:
  50. - redis_data:/data
  51. healthcheck:
  52. test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD:-forge123456}", "ping"]
  53. interval: 10s
  54. timeout: 5s
  55. retries: 5
  56. networks:
  57. - forge-network
  58. # ========================
  59. # Forge Flow 流程服务(需先于 admin 启动)
  60. # ========================
  61. forge-flow:
  62. build:
  63. context: ..
  64. dockerfile: docker/Dockerfile.flow
  65. container_name: forge-flow
  66. restart: unless-stopped
  67. depends_on:
  68. mysql:
  69. condition: service_healthy
  70. redis:
  71. condition: service_healthy
  72. environment:
  73. MYSQL_HOST: mysql
  74. MYSQL_PORT: 3306
  75. MYSQL_DB: ${MYSQL_DB:-forge_admin}
  76. MYSQL_USER: root
  77. MYSQL_PASSWORD: ${MYSQL_PASSWORD:-forge123456}
  78. REDIS_HOST: redis
  79. REDIS_PORT: 6379
  80. REDIS_PASSWORD: ${REDIS_PASSWORD:-forge123456}
  81. JAVA_OPTS: -Xms256m -Xmx512m
  82. ports:
  83. - "${FLOW_PORT:-8081}:8081"
  84. networks:
  85. - forge-network
  86. # ========================
  87. # Forge Admin 主服务
  88. # ========================
  89. forge-admin:
  90. build:
  91. context: ..
  92. dockerfile: docker/Dockerfile.admin
  93. container_name: forge-admin
  94. restart: unless-stopped
  95. depends_on:
  96. mysql:
  97. condition: service_healthy
  98. redis:
  99. condition: service_healthy
  100. forge-flow:
  101. condition: service_started
  102. environment:
  103. MYSQL_HOST: mysql
  104. MYSQL_PORT: 3306
  105. MYSQL_DB: ${MYSQL_DB:-forge_admin}
  106. MYSQL_USER: root
  107. MYSQL_PASSWORD: ${MYSQL_PASSWORD:-forge123456}
  108. REDIS_HOST: redis
  109. REDIS_PORT: 6379
  110. REDIS_PASSWORD: ${REDIS_PASSWORD:-forge123456}
  111. FLOW_CLIENT_URL: http://forge-flow:8081
  112. FORGE_CRYPTO_BOOTSTRAP_ENABLED: ${FORGE_CRYPTO_BOOTSTRAP_ENABLED:-true}
  113. FORGE_CRYPTO_BOOTSTRAP_FILE: /var/lib/forge/secrets/crypto.properties
  114. FORGE_CRYPTO_SECRET_KEY: "${FORGE_CRYPTO_SECRET_KEY:-}"
  115. FORGE_CRYPTO_PERSISTENCE_ENABLED: "${FORGE_CRYPTO_PERSISTENCE_ENABLED:-}"
  116. FORGE_CRYPTO_PERSISTENCE_WRITE_VERSIONED: "${FORGE_CRYPTO_PERSISTENCE_WRITE_VERSIONED:-}"
  117. FORGE_CRYPTO_PERSISTENCE_LEGACY_READ_ENABLED: "${FORGE_CRYPTO_PERSISTENCE_LEGACY_READ_ENABLED:-}"
  118. FORGE_AUTH_LEGACY_CLIENT_SECRET_READ_ENABLED: ${FORGE_AUTH_LEGACY_CLIENT_SECRET_READ_ENABLED:-true}
  119. FORGE_CRYPTO_PERSISTENCE_LEGACY_KEY: "${FORGE_CRYPTO_PERSISTENCE_LEGACY_KEY:-}"
  120. FORGE_CRYPTO_PERSISTENCE_ACTIVE_KEY_ID: "${FORGE_CRYPTO_PERSISTENCE_ACTIVE_KEY_ID:-}"
  121. FORGE_CRYPTO_PERSISTENCE_ACTIVE_KEY: "${FORGE_CRYPTO_PERSISTENCE_ACTIVE_KEY:-}"
  122. JAVA_OPTS: -Xms256m -Xmx512m
  123. volumes:
  124. - crypto_secrets:/var/lib/forge/secrets
  125. ports:
  126. - "${ADMIN_PORT:-8580}:8580"
  127. networks:
  128. - forge-network
  129. # ========================
  130. # 前端 Nginx
  131. # ========================
  132. forge-ui:
  133. build:
  134. context: ..
  135. dockerfile: docker/Dockerfile.ui
  136. container_name: forge-ui
  137. restart: unless-stopped
  138. depends_on:
  139. - forge-admin
  140. - forge-flow
  141. ports:
  142. - "${NGINX_PORT:-80}:80"
  143. networks:
  144. - forge-network
  145. # ========================
  146. # 数据卷
  147. # ========================
  148. volumes:
  149. mysql_data:
  150. driver: local
  151. redis_data:
  152. driver: local
  153. crypto_secrets:
  154. driver: local
  155. # ========================
  156. # 网络
  157. # ========================
  158. networks:
  159. forge-network:
  160. driver: bridge