diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..95f0b6d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,77 @@ +# ============================================================ +# 药品管理系统 — Docker Compose 编排 +# 启动: docker-compose up -d +# ============================================================ + +version: '3.8' + +services: + mysql: + image: mysql:8.0 + container_name: medicine-mysql + restart: unless-stopped + environment: + MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-root} + MYSQL_DATABASE: ${DB_NAME:-medicine_manager} + TZ: Asia/Shanghai + ports: + - "3306:3306" + volumes: + - mysql_data:/var/lib/mysql + - ./backend/src/main/resources/database/init.sql:/docker-entrypoint-initdb.d/init.sql + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] + interval: 10s + timeout: 5s + retries: 5 + + redis: + image: redis:7-alpine + container_name: medicine-redis + restart: unless-stopped + ports: + - "6379:6379" + volumes: + - redis_data:/data + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 10s + timeout: 5s + retries: 5 + + backend: + build: + context: ./backend + dockerfile: Dockerfile + container_name: medicine-backend + restart: unless-stopped + depends_on: + mysql: + condition: service_healthy + environment: + DB_HOST: mysql + DB_PORT: 3306 + DB_NAME: ${DB_NAME:-medicine_manager} + DB_USERNAME: root + DB_PASSWORD: ${DB_PASSWORD:-root} + JWT_SECRET: ${JWT_SECRET} + SERVER_PORT: 8080 + SPRING_DATA_REDIS_HOST: redis + SPRING_DATA_REDIS_PORT: 6379 + ports: + - "8080:8080" + + frontend: + build: + context: ./frontend + dockerfile: Dockerfile + container_name: medicine-frontend + restart: unless-stopped + depends_on: + - backend + ports: + - "80:80" + +volumes: + mysql_data: + redis_data: