Files
lab/docker-compose.yml
2026-09-21 13:23:30 +08:00

99 lines
3.3 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =====================================================================
# 实验室预约与资源管理平台 - 一键部署编排
#
# 启动:docker compose up -d --build
# 访问:前端 http://localhost:${WEB_PORT:-8088}
# 后端 http://localhost:${BACKEND_PORT:-8080}
# 停止:docker compose down (保留数据库数据卷)
# docker compose down -v (同时删除数据库数据,首次初始化会重建演示数据)
#
# 可通过环境变量覆盖:DB_NAME / DB_USER / DB_PASSWORD / DB_ROOT_PASSWORD /
# LAB_JWT_SECRET / JAVA_OPTS / WEB_PORT / BACKEND_PORT
#
# Podman 部署请使用 scripts/podman-deploy.sh(会先构建镜像再启动),或手动执行:
# podman build -t lab-backend:latest . && podman build -t lab-frontend:latest ./frontend
# podman compose up -d
# =====================================================================
name: lab-reservation
services:
# ---------- 数据库:MariaDB 11 ----------
mariadb:
image: docker.io/library/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:
# 数据库数据持久化到宿主机目录(便于备份/检查),首次启动自动建表并写入演示数据
# :Z 供 Linux SELinux 环境自动打标,Docker Desktop / macOS 会忽略该后缀
- ${DATA_DIR:-./mariadb-data}:/var/lib/mysql:Z
# 需要本地客户端连库调试时可打开端口映射
# 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:-8088}:80"
networks:
- lab-net
networks:
lab-net:
driver: bridge