docker-compose.yml 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. # 中科兴皖 Docker Compose 部署(甲方交付版:使用预构建镜像,不含源码)
  2. #
  3. # 启动(在 deploy/docker 目录):
  4. # docker load -i ../../images/zkxw-app-images.tar
  5. # cp .env.example .env # 修改密码与镜像 tag
  6. # docker compose up -d
  7. #
  8. # 发版方本地从源码构建镜像:见 scripts/build-docker-images.sh
  9. # Profile 说明见 README.md
  10. name: zkxw
  11. services:
  12. mysql:
  13. profiles: [full]
  14. image: mysql:5.7.36
  15. # MySQL 5.7 无 arm64 镜像;Mac(M 芯片) 与甲方 x86 云主机均用 amd64(Mac 上由 Docker 模拟)
  16. platform: linux/amd64
  17. restart: unless-stopped
  18. command: >
  19. --character-set-server=utf8mb4
  20. --collation-server=utf8mb4_unicode_ci
  21. --explicit_defaults_for_timestamp=1
  22. environment:
  23. MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
  24. MYSQL_DATABASE: zkxw
  25. TZ: Asia/Shanghai
  26. volumes:
  27. - mysql_data:/var/lib/mysql
  28. - ./mysql/init/01-init-db.sql:/docker-entrypoint-initdb.d/01-init-db.sql:ro
  29. - ../../docs/sql/zkxw.sql:/docker-entrypoint-initdb.d/02-zkxw.sql:ro
  30. healthcheck:
  31. test: ['CMD', 'mysqladmin', 'ping', '-h', '127.0.0.1', '-p${MYSQL_ROOT_PASSWORD}']
  32. interval: 10s
  33. timeout: 5s
  34. retries: 30
  35. start_period: 60s
  36. redis:
  37. profiles: [full]
  38. image: redis:7-alpine
  39. platform: linux/amd64
  40. restart: unless-stopped
  41. command: redis-server --appendonly yes
  42. volumes:
  43. - redis_data:/data
  44. healthcheck:
  45. test: ['CMD', 'redis-cli', 'ping']
  46. interval: 10s
  47. timeout: 3s
  48. retries: 10
  49. minio:
  50. profiles: [full, storage]
  51. image: minio/minio:latest
  52. platform: linux/amd64
  53. restart: unless-stopped
  54. command: server /data --console-address ":9001"
  55. environment:
  56. MINIO_ROOT_USER: ${MINIO_ACCESS_KEY}
  57. MINIO_ROOT_PASSWORD: ${MINIO_SECRET_KEY}
  58. TZ: Asia/Shanghai
  59. volumes:
  60. - minio_data:/data
  61. minio-init:
  62. profiles: [full, storage]
  63. image: minio/mc:latest
  64. platform: linux/amd64
  65. depends_on:
  66. minio:
  67. condition: service_started
  68. entrypoint: >
  69. /bin/sh -c "
  70. for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
  71. mc alias set local http://minio:9000 $${MINIO_ACCESS_KEY} $${MINIO_SECRET_KEY} && break
  72. sleep 2
  73. done &&
  74. mc mb --ignore-existing local/$${MINIO_BUCKET} &&
  75. mc anonymous set download local/$${MINIO_BUCKET} &&
  76. exit 0
  77. "
  78. environment:
  79. MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY}
  80. MINIO_SECRET_KEY: ${MINIO_SECRET_KEY}
  81. MINIO_BUCKET: ${MINIO_BUCKET}
  82. restart: 'no'
  83. backend:
  84. profiles: [app, full]
  85. image: ${ZKXW_BACKEND_IMAGE:-zkxw-backend:latest}
  86. platform: linux/amd64
  87. restart: unless-stopped
  88. env_file: .env
  89. depends_on:
  90. mysql:
  91. condition: service_healthy
  92. required: false
  93. redis:
  94. condition: service_healthy
  95. required: false
  96. minio-init:
  97. condition: service_completed_successfully
  98. required: false
  99. volumes:
  100. - backend_uploads:/app/uploads
  101. healthcheck:
  102. test: ['CMD', 'python', '-c', "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8111/health')"]
  103. interval: 30s
  104. timeout: 5s
  105. retries: 5
  106. start_period: 60s
  107. web:
  108. profiles: [app, full]
  109. image: ${ZKXW_WEB_IMAGE:-zkxw-web:latest}
  110. platform: linux/amd64
  111. restart: unless-stopped
  112. ports:
  113. - '${HTTP_PORT:-8112}:80'
  114. depends_on:
  115. backend:
  116. condition: service_healthy
  117. minio:
  118. condition: service_started
  119. required: false
  120. healthcheck:
  121. test: ['CMD', 'wget', '-qO-', 'http://127.0.0.1/']
  122. interval: 30s
  123. timeout: 5s
  124. retries: 5
  125. start_period: 15s
  126. volumes:
  127. mysql_data:
  128. redis_data:
  129. minio_data:
  130. backend_uploads: