| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- # 中科兴皖 Docker Compose 部署(甲方交付版:使用预构建镜像,不含源码)
- #
- # 启动(在 deploy/docker 目录):
- # docker load -i ../../images/zkxw-app-images.tar
- # cp .env.example .env # 修改密码与镜像 tag
- # docker compose up -d
- #
- # 发版方本地从源码构建镜像:见 scripts/build-docker-images.sh
- # Profile 说明见 README.md
- name: zkxw
- services:
- mysql:
- profiles: [full]
- image: mysql:5.7.36
- # MySQL 5.7 无 arm64 镜像;Mac(M 芯片) 与甲方 x86 云主机均用 amd64(Mac 上由 Docker 模拟)
- platform: linux/amd64
- restart: unless-stopped
- command: >
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --explicit_defaults_for_timestamp=1
- environment:
- MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE: zkxw
- TZ: Asia/Shanghai
- volumes:
- - mysql_data:/var/lib/mysql
- - ./mysql/init/01-init-db.sql:/docker-entrypoint-initdb.d/01-init-db.sql:ro
- - ../../docs/sql/zkxw.sql:/docker-entrypoint-initdb.d/02-zkxw.sql:ro
- healthcheck:
- test: ['CMD', 'mysqladmin', 'ping', '-h', '127.0.0.1', '-p${MYSQL_ROOT_PASSWORD}']
- interval: 10s
- timeout: 5s
- retries: 30
- start_period: 60s
- redis:
- profiles: [full]
- image: redis:7-alpine
- platform: linux/amd64
- restart: unless-stopped
- command: redis-server --appendonly yes
- volumes:
- - redis_data:/data
- healthcheck:
- test: ['CMD', 'redis-cli', 'ping']
- interval: 10s
- timeout: 3s
- retries: 10
- minio:
- profiles: [full, storage]
- image: minio/minio:latest
- platform: linux/amd64
- restart: unless-stopped
- command: server /data --console-address ":9001"
- environment:
- MINIO_ROOT_USER: ${MINIO_ACCESS_KEY}
- MINIO_ROOT_PASSWORD: ${MINIO_SECRET_KEY}
- TZ: Asia/Shanghai
- volumes:
- - minio_data:/data
- minio-init:
- profiles: [full, storage]
- image: minio/mc:latest
- platform: linux/amd64
- depends_on:
- minio:
- condition: service_started
- entrypoint: >
- /bin/sh -c "
- for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
- mc alias set local http://minio:9000 $${MINIO_ACCESS_KEY} $${MINIO_SECRET_KEY} && break
- sleep 2
- done &&
- mc mb --ignore-existing local/$${MINIO_BUCKET} &&
- mc anonymous set download local/$${MINIO_BUCKET} &&
- exit 0
- "
- environment:
- MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY}
- MINIO_SECRET_KEY: ${MINIO_SECRET_KEY}
- MINIO_BUCKET: ${MINIO_BUCKET}
- restart: 'no'
- backend:
- profiles: [app, full]
- image: ${ZKXW_BACKEND_IMAGE:-zkxw-backend:latest}
- platform: linux/amd64
- restart: unless-stopped
- env_file: .env
- depends_on:
- mysql:
- condition: service_healthy
- required: false
- redis:
- condition: service_healthy
- required: false
- minio-init:
- condition: service_completed_successfully
- required: false
- volumes:
- - backend_uploads:/app/uploads
- healthcheck:
- test: ['CMD', 'python', '-c', "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8111/health')"]
- interval: 30s
- timeout: 5s
- retries: 5
- start_period: 60s
- web:
- profiles: [app, full]
- image: ${ZKXW_WEB_IMAGE:-zkxw-web:latest}
- platform: linux/amd64
- restart: unless-stopped
- ports:
- - '${HTTP_PORT:-8112}:80'
- depends_on:
- backend:
- condition: service_healthy
- minio:
- condition: service_started
- required: false
- healthcheck:
- test: ['CMD', 'wget', '-qO-', 'http://127.0.0.1/']
- interval: 30s
- timeout: 5s
- retries: 5
- start_period: 15s
- volumes:
- mysql_data:
- redis_data:
- minio_data:
- backend_uploads:
|