First commit

This commit is contained in:
2026-09-21 12:51:00 +08:00
commit 4fad31e438
145 changed files with 17216 additions and 0 deletions

97
docker-compose.yml Normal file
View File

@@ -0,0 +1,97 @@
# =====================================================================
# 实验室预约与资源管理平台 - 一键部署编排
#
# 启动: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: "-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