docker-compose.yml 5.0 KB

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