HEL-269: 完成月结锁账、撤演示数据与代码收尾

锁账后写保护与闭期补录留痕;重开须审批并按版本链再结;列表/导出改走真实 API。

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
总工
2026-08-30 21:42:22 +08:00
co-authored by Cursor multica-agent
parent f5e0915f63
commit e5e326514d
26 changed files with 3455 additions and 487 deletions
+14
View File
@@ -0,0 +1,14 @@
# 测试环境变量示例。复制为 deploy/.env 后填写。
# 正式环境口令不得提交进仓库。
APP_HOST=0.0.0.0
APP_PORT=4173
APP_DB_PATH=/app/data/app.db
APP_STORAGE_DIR=/app/data/files
# 引导管理员(库中尚无管理员时生效)
APP_ADMIN_USERNAME=group-admin
APP_BOOTSTRAP_ADMIN_PASSWORD=change-me-in-local-env
# 内网测试可暂时关闭登录失败锁定;正式环境不得开启
# APP_LOGIN_RATE_LIMIT_DISABLED=1
+23
View File
@@ -0,0 +1,23 @@
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY server.py ./
COPY src ./src
COPY web ./web
ENV PYTHONPATH=/app/src
ENV APP_HOST=0.0.0.0
ENV APP_PORT=4173
ENV APP_DB_PATH=/app/data/app.db
ENV APP_STORAGE_DIR=/app/data/files
EXPOSE 4173
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
CMD python -c "import urllib.request; urllib.request.urlopen('http://127.0.0.1:4173/', timeout=4)"
CMD ["python", "server.py"]
+36
View File
@@ -0,0 +1,36 @@
# 测试环境部署编排。正式口令不得写入本文件。
# 使用:复制 .env.example 为 .env 后填写,再执行 ./deploy.sh
services:
caiwuzongzhang:
build:
context: ..
dockerfile: deploy/Dockerfile
image: caiwuzongzhang:test
container_name: caiwuzongzhang-test
ports:
- "4173:4173"
env_file:
- .env
environment:
APP_HOST: "0.0.0.0"
APP_PORT: "4173"
APP_DB_PATH: /app/data/app.db
APP_STORAGE_DIR: /app/data/files
volumes:
- ../data:/app/data
read_only: true
tmpfs:
- /tmp
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
mem_limit: 512m
restart: unless-stopped
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:4173/', timeout=4)"]
interval: 30s
timeout: 5s
retries: 3
start_period: 20s
+12
View File
@@ -0,0 +1,12 @@
#!/usr/bin/env bash
# 测试环境部署。施工员不执行上线;由总工在测试机运行。
set -euo pipefail
ROOT="$(cd "$(dirname "$0")" && pwd)"
cd "$ROOT"
if [[ ! -f .env ]]; then
echo "缺少 deploy/.env。请复制 .env.example 后填写测试口令。" >&2
exit 1
fi
mkdir -p "$ROOT/../data/files"
docker compose -f compose.yaml up -d --build
echo "已启动测试环境:http://127.0.0.1:4173/"
+15
View File
@@ -0,0 +1,15 @@
#!/usr/bin/env bash
# 测试环境回滚:停掉当前容器,按 TAG 或上一个镜像再拉起。
# 用法:./rollback.sh [image-tag]
set -euo pipefail
ROOT="$(cd "$(dirname "$0")" && pwd)"
cd "$ROOT"
TAG="${1:-}"
docker compose -f compose.yaml down
if [[ -n "$TAG" ]]; then
export COMPOSE_IMAGE="caiwuzongzhang:${TAG}"
docker compose -f compose.yaml up -d
echo "已回滚到镜像 caiwuzongzhang:${TAG}"
else
echo "已停止测试容器。指定镜像标签可重新拉起:./rollback.sh <tag>"
fi