- 调整单金额恒正:schema 正则拦格式(非负两位小数、≤12 位整数防 NUMERIC(14,2) 溢出)+ 服务层 Decimal>0 语义校验——负数会反转补发/ 扣减语义,'abc' 原样入库会以 500 暴露 - 分界天数参数解析:int(parse_fraction(...)) 替代 int(参数原文)—— '360.0' 是 INT 参数的合法入库值(Fraction 分母为 1),直接 int(str) 抛 ValueError 会让整月核算 500 - logo 旧文件清理容错:OSError 只记 warning——裸抛会把成功的 logo 更新 记成失败审计并 500(库中 logo_path 却已是新值,审计与事实相反) - health_check.sh:Redis 探活改容器内环境变量展开(密码不进宿主进程 命令行,模式同 backup_full.sh);compose redis 补 REDIS_PASSWORD - restore_drill.sh:行数核对扩到全部 32 张业务表(原 16 张漏 V7 四表、 二次分配等核心表,备份漏表演练全绿);查询失败回显 '?' 一律判 ✗ (原 '?'=='?' 判一致,表缺失时误报「备份可恢复」) - 并入 88 会话的 #12 实现:manager.personal.included 开关消费 (_build_manager_aggregates 参数化,测试见 828b573) - 测试:调整单金额恒正 5 稿、INT 参数小数原文核算 200 回归;单测 469 Co-Authored-By: Claude Code <noreply@anthropic.com>
58 lines
1.9 KiB
YAML
58 lines
1.9 KiB
YAML
# 开发环境容器编排
|
||
# 启动(在项目根目录执行;Compose 会自动加载同目录的 docker/.env):
|
||
# docker compose -f docker/docker-compose.dev.yml up -d
|
||
#
|
||
# name 显式指定 Compose 项目名。不指定时会取 compose 文件所在目录名(即 docker),
|
||
# 导致网络/卷被命名为 docker_default、docker_mysql-dev-data 这类无意义名称。
|
||
name: ys-payroll
|
||
|
||
services:
|
||
mysql:
|
||
image: mysql:8.0
|
||
container_name: ys-mysql-dev
|
||
restart: unless-stopped
|
||
environment:
|
||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
|
||
MYSQL_DATABASE: ${MYSQL_DATABASE}
|
||
# 应用连接用专用账号,避免后端以 root 身份连库
|
||
MYSQL_USER: ${MYSQL_USER}
|
||
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
|
||
TZ: Asia/Shanghai
|
||
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
|
||
volumes:
|
||
- mysql-dev-data:/var/lib/mysql
|
||
# 首次启动自动执行 db/init 下的初始化脚本
|
||
- ../db/init:/docker-entrypoint-initdb.d
|
||
ports:
|
||
- "3306:3306"
|
||
healthcheck:
|
||
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-p${MYSQL_ROOT_PASSWORD}"]
|
||
interval: 10s
|
||
timeout: 5s
|
||
retries: 10
|
||
start_period: 30s
|
||
|
||
redis:
|
||
image: redis:7-alpine
|
||
container_name: ys-redis-dev
|
||
restart: unless-stopped
|
||
environment:
|
||
TZ: Asia/Shanghai
|
||
# 健康检查脚本在容器内展开(密码不进宿主进程命令行,模式同 mysql)
|
||
REDIS_PASSWORD: ${REDIS_PASSWORD}
|
||
# appendonly 开启 AOF,容器重启后验证码黑名单等数据不丢
|
||
command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD}
|
||
volumes:
|
||
- redis-dev-data:/data
|
||
ports:
|
||
- "6379:6379"
|
||
healthcheck:
|
||
test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "--no-auth-warning", "ping"]
|
||
interval: 10s
|
||
timeout: 5s
|
||
retries: 10
|
||
|
||
volumes:
|
||
mysql-dev-data:
|
||
redis-dev-data:
|