docker-compose.yml 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. # =============================================================
  2. # 智价云药店系统 - Docker Compose 部署(生产/预发布)
  3. # 使用方式:
  4. # 1. cp .env.example .env && vim .env # 填写真实密码
  5. # 2. docker compose up -d # 启动所有服务
  6. # 3. docker compose logs -f app # 查看应用日志
  7. # =============================================================
  8. services:
  9. # ---- MySQL 8.0 ----
  10. mysql:
  11. image: mysql:8.0
  12. container_name: zhijiayun-mysql
  13. restart: unless-stopped
  14. environment:
  15. MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-请修改ROOT密码}
  16. MYSQL_DATABASE: ${DB_NAME:-zhijiayun_pharmacy}
  17. MYSQL_USER: ${DB_USERNAME:-zhijiayun}
  18. MYSQL_PASSWORD: ${DB_PASSWORD}
  19. TZ: Asia/Shanghai
  20. ports:
  21. - "3306:3306"
  22. volumes:
  23. - mysql-data:/var/lib/mysql
  24. - ./mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf:ro
  25. - ./mysql/init:/docker-entrypoint-initdb.d:ro # 首次建库脚本
  26. command: >
  27. --character-set-server=utf8mb4
  28. --collation-server=utf8mb4_unicode_ci
  29. --default-time-zone=+08:00
  30. --max-connections=500
  31. --innodb-buffer-pool-size=512M
  32. healthcheck:
  33. test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${DB_ROOT_PASSWORD:-请修改ROOT密码}"]
  34. interval: 10s
  35. timeout: 5s
  36. retries: 10
  37. start_period: 30s
  38. networks:
  39. - zhijiayun-net
  40. # ---- Redis 7 ----
  41. redis:
  42. image: redis:7-alpine
  43. container_name: zhijiayun-redis
  44. restart: unless-stopped
  45. command: >
  46. redis-server
  47. --requirepass ${REDIS_PASSWORD}
  48. --maxmemory 256mb
  49. --maxmemory-policy allkeys-lru
  50. --appendonly yes
  51. --appendfsync everysec
  52. ports:
  53. - "6379:6379"
  54. volumes:
  55. - redis-data:/data
  56. healthcheck:
  57. test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]
  58. interval: 10s
  59. timeout: 5s
  60. retries: 5
  61. networks:
  62. - zhijiayun-net
  63. # ---- 应用服务 ----
  64. app:
  65. image: eclipse-temurin:17-jre-alpine
  66. container_name: zhijiayun-app
  67. restart: unless-stopped
  68. depends_on:
  69. mysql:
  70. condition: service_healthy
  71. redis:
  72. condition: service_healthy
  73. ports:
  74. - "8001:8001"
  75. volumes:
  76. - ./zhijiayun-gateway-1.0.0.jar:/app/app.jar:ro
  77. - app-logs:/var/log/zhijiayun-pharmacy
  78. working_dir: /app
  79. environment:
  80. TZ: Asia/Shanghai
  81. SPRING_PROFILES_ACTIVE: prod
  82. # 数据库
  83. DB_HOST: mysql
  84. DB_PORT: 3306
  85. DB_NAME: ${DB_NAME:-zhijiayun_pharmacy}
  86. DB_USERNAME: ${DB_USERNAME:-zhijiayun}
  87. DB_PASSWORD: ${DB_PASSWORD}
  88. # Redis
  89. REDIS_HOST: redis
  90. REDIS_PORT: 6379
  91. REDIS_PASSWORD: ${REDIS_PASSWORD}
  92. REDIS_DATABASE: ${REDIS_DATABASE:-1}
  93. # JWT
  94. JWT_SECRET: ${JWT_SECRET}
  95. # 阿里云短信
  96. ALIBABA_CLOUD_ACCESS_KEY_ID: ${ALIBABA_CLOUD_ACCESS_KEY_ID}
  97. ALIBABA_CLOUD_ACCESS_KEY_SECRET: ${ALIBABA_CLOUD_ACCESS_KEY_SECRET}
  98. SMS_SIGN_NAME: ${SMS_SIGN_NAME:-开邻}
  99. SMS_TEMPLATE_CODE: ${SMS_TEMPLATE_CODE:-SMS_483305249}
  100. # 微信
  101. WECHAT_APP_ID: ${WECHAT_APP_ID}
  102. WECHAT_APP_SECRET: ${WECHAT_APP_SECRET}
  103. WECHAT_REDIRECT_URI: ${WECHAT_REDIRECT_URI}
  104. # 邀请链接
  105. INVITE_BASE_URL: ${INVITE_BASE_URL:-https://your-domain.com}
  106. command: >
  107. java
  108. -server
  109. -Xms512m -Xmx1g
  110. -XX:+UseG1GC
  111. -XX:MaxGCPauseMillis=200
  112. -XX:+HeapDumpOnOutOfMemoryError
  113. -XX:HeapDumpPath=/var/log/zhijiayun-pharmacy/heapdump.hprof
  114. -Dfile.encoding=UTF-8
  115. -Duser.timezone=Asia/Shanghai
  116. -jar app.jar
  117. healthcheck:
  118. test: ["CMD-SHELL", "wget -qO- http://localhost:8001/actuator/health || exit 1"]
  119. interval: 30s
  120. timeout: 10s
  121. retries: 3
  122. start_period: 60s
  123. networks:
  124. - zhijiayun-net
  125. logging:
  126. driver: json-file
  127. options:
  128. max-size: "100m"
  129. max-file: "5"
  130. # ---- 数据卷 ----
  131. volumes:
  132. mysql-data:
  133. driver: local
  134. redis-data:
  135. driver: local
  136. app-logs:
  137. driver: local
  138. # ---- 网络 ----
  139. networks:
  140. zhijiayun-net:
  141. driver: bridge