# ===================================================================== # 实验室预约与资源管理平台 - 一键部署编排 # # 启动:docker compose up -d --build # 访问:前端 http://localhost:${WEB_PORT:-80} # 后端 http://localhost:${BACKEND_PORT:-8080} # 停止:docker compose down (保留数据库数据卷) # docker compose down -v (同时删除数据库数据,首次初始化会重建演示数据) # # 可通过环境变量覆盖:DB_NAME / DB_USER / DB_PASSWORD / DB_ROOT_PASSWORD / # LAB_JWT_SECRET / WEB_PORT / BACKEND_PORT # ===================================================================== name: lab-reservation services: # ---------- 数据库:MariaDB 11 ---------- mariadb: image: mariadb:11.4 container_name: lab-mariadb restart: unless-stopped environment: MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-root123456} MARIADB_DATABASE: ${DB_NAME:-lab} MARIADB_USER: ${DB_USER:-lab} MARIADB_PASSWORD: ${DB_PASSWORD:-lab123456} TZ: Asia/Shanghai # 统一字符集,保证中文与 emoji 正常存取 command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci volumes: # 数据库数据持久化;首次启动由后端自动建表并写入演示数据 - mariadb-data:/var/lib/mysql # 需要本地客户端连库调试时可打开端口映射 # ports: # - "3306:3306" healthcheck: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] interval: 10s timeout: 5s retries: 10 start_period: 20s networks: - lab-net # ---------- 后端:Spring Boot + MyBatis-Plus ---------- backend: build: context: . dockerfile: Dockerfile image: lab-backend:latest container_name: lab-backend restart: unless-stopped environment: # 使用 MariaDB Profile(对应 application-mariadb.yaml) SPRING_PROFILES_ACTIVE: mariadb DB_HOST: mariadb DB_PORT: 3306 DB_NAME: ${DB_NAME:-lab} DB_USER: ${DB_USER:-lab} DB_PASSWORD: ${DB_PASSWORD:-lab123456} # 生产部署请务必覆盖为随机密钥(长度 >= 32 字节) LAB_JWT_SECRET: ${LAB_JWT_SECRET:-lab-reservation-docker-secret-key-change-me-2026} TZ: Asia/Shanghai JAVA_OPTS: "${JAVA_OPTS:--Xms256m -Xmx512m}" depends_on: mariadb: condition: service_healthy ports: - "${BACKEND_PORT:-8080}:8080" networks: - lab-net # ---------- 前端:Nginx + Vue3 静态资源 ---------- frontend: build: context: ./frontend dockerfile: Dockerfile image: lab-frontend:latest container_name: lab-frontend restart: unless-stopped depends_on: backend: condition: service_healthy ports: - "${WEB_PORT:-80}:80" networks: - lab-net volumes: # 命名卷保存 MariaDB 数据;docker compose down -v 可连同数据一起清理 mariadb-data: networks: lab-net: driver: bridge