| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- # =============================================================
- # 智价云药店系统 - Docker Compose 部署(生产/预发布)
- # 使用方式:
- # 1. cp .env.example .env && vim .env # 填写真实密码
- # 2. docker compose up -d # 启动所有服务
- # 3. docker compose logs -f app # 查看应用日志
- # =============================================================
- services:
- # ---- MySQL 8.0 ----
- mysql:
- image: mysql:8.0
- container_name: zhijiayun-mysql
- restart: unless-stopped
- environment:
- MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-请修改ROOT密码}
- MYSQL_DATABASE: ${DB_NAME:-zhijiayun_pharmacy}
- MYSQL_USER: ${DB_USERNAME:-zhijiayun}
- MYSQL_PASSWORD: ${DB_PASSWORD}
- TZ: Asia/Shanghai
- ports:
- - "3306:3306"
- volumes:
- - mysql-data:/var/lib/mysql
- - ./mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf:ro
- - ./mysql/init:/docker-entrypoint-initdb.d:ro # 首次建库脚本
- command: >
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --default-time-zone=+08:00
- --max-connections=500
- --innodb-buffer-pool-size=512M
- healthcheck:
- test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${DB_ROOT_PASSWORD:-请修改ROOT密码}"]
- interval: 10s
- timeout: 5s
- retries: 10
- start_period: 30s
- networks:
- - zhijiayun-net
- # ---- Redis 7 ----
- redis:
- image: redis:7-alpine
- container_name: zhijiayun-redis
- restart: unless-stopped
- command: >
- redis-server
- --requirepass ${REDIS_PASSWORD}
- --maxmemory 256mb
- --maxmemory-policy allkeys-lru
- --appendonly yes
- --appendfsync everysec
- ports:
- - "6379:6379"
- volumes:
- - redis-data:/data
- healthcheck:
- test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]
- interval: 10s
- timeout: 5s
- retries: 5
- networks:
- - zhijiayun-net
- # ---- 应用服务 ----
- app:
- image: eclipse-temurin:17-jre-alpine
- container_name: zhijiayun-app
- restart: unless-stopped
- depends_on:
- mysql:
- condition: service_healthy
- redis:
- condition: service_healthy
- ports:
- - "8001:8001"
- volumes:
- - ./zhijiayun-gateway-1.0.0.jar:/app/app.jar:ro
- - app-logs:/var/log/zhijiayun-pharmacy
- working_dir: /app
- environment:
- TZ: Asia/Shanghai
- SPRING_PROFILES_ACTIVE: prod
- # 数据库
- DB_HOST: mysql
- DB_PORT: 3306
- DB_NAME: ${DB_NAME:-zhijiayun_pharmacy}
- DB_USERNAME: ${DB_USERNAME:-zhijiayun}
- DB_PASSWORD: ${DB_PASSWORD}
- # Redis
- REDIS_HOST: redis
- REDIS_PORT: 6379
- REDIS_PASSWORD: ${REDIS_PASSWORD}
- REDIS_DATABASE: ${REDIS_DATABASE:-1}
- # JWT
- JWT_SECRET: ${JWT_SECRET}
- # 阿里云短信
- ALIBABA_CLOUD_ACCESS_KEY_ID: ${ALIBABA_CLOUD_ACCESS_KEY_ID}
- ALIBABA_CLOUD_ACCESS_KEY_SECRET: ${ALIBABA_CLOUD_ACCESS_KEY_SECRET}
- SMS_SIGN_NAME: ${SMS_SIGN_NAME:-开邻}
- SMS_TEMPLATE_CODE: ${SMS_TEMPLATE_CODE:-SMS_483305249}
- # 微信
- WECHAT_APP_ID: ${WECHAT_APP_ID}
- WECHAT_APP_SECRET: ${WECHAT_APP_SECRET}
- WECHAT_REDIRECT_URI: ${WECHAT_REDIRECT_URI}
- # 邀请链接
- INVITE_BASE_URL: ${INVITE_BASE_URL:-https://your-domain.com}
- command: >
- java
- -server
- -Xms512m -Xmx1g
- -XX:+UseG1GC
- -XX:MaxGCPauseMillis=200
- -XX:+HeapDumpOnOutOfMemoryError
- -XX:HeapDumpPath=/var/log/zhijiayun-pharmacy/heapdump.hprof
- -Dfile.encoding=UTF-8
- -Duser.timezone=Asia/Shanghai
- -jar app.jar
- healthcheck:
- test: ["CMD-SHELL", "wget -qO- http://localhost:8001/actuator/health || exit 1"]
- interval: 30s
- timeout: 10s
- retries: 3
- start_period: 60s
- networks:
- - zhijiayun-net
- logging:
- driver: json-file
- options:
- max-size: "100m"
- max-file: "5"
- # ---- 数据卷 ----
- volumes:
- mysql-data:
- driver: local
- redis-data:
- driver: local
- app-logs:
- driver: local
- # ---- 网络 ----
- networks:
- zhijiayun-net:
- driver: bridge
|