- 品牌字串全面更换:README / compose / Dockerfile / entrypoint / 面板页面 / CI。 镜像名变为 ghcr.io/beacherz/dailycheckin-plus:latest;compose 里的服务名与 container_name 保持 dailycheckin 不动 —— 改了会变成新旧两个容器同时跑,通知收两条。 - 通知标题带上项目名:NOTICE_TITLE 与 main.py 的标题都改用 PROJECT_NAME, 实际发出来是「【dailycheckin-plus 每日签到 · 日期】」;企业微信卡片署名同步。 这两处仍在 patches/0002 里,已重新生成并验证「重放后与工作区逐字节一致」。 - 面板:默认 PANEL_TITLE 改为 dailycheckin-plus,浏览器标签页与顶栏品牌跟着走 (顺手把顶栏一直没被填充的面板版本/引擎状态补上);HTTP Server 头改为 dailycheckin-plus-panel/2.1.0。 - crontab 托管标记改为 dailycheckin-plus managed,但**仍兼容老标记**并在保存时 升级;crontab 里若存在裸的签到行,首次保存会整行注释留档后再接管,避免和新任务 并存导致一天跑两遍、通知收两条。新增 tools/test_schedule.py(27 项断言)锁这条行为。 - README:快速开始拆成 docker compose / docker run 两种方式(含 Windows 路径写法和 docker run 的升级步骤),更新通知样例、环境变量表、目录结构与常见问题。 - Dockerfile 增加「面板品牌自检」,装进镜像的网页必须是改名后的版本。
50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
"""运行时路径与配置项。"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
|
|
|
|
def _env(name: str, default: str) -> str:
|
|
value = os.environ.get(name, "")
|
|
return value.strip() if value and value.strip() else default
|
|
|
|
|
|
# 容器内工作目录,引擎按 `./config/config.json` 找配置,必须保持一致
|
|
# 本地直接 `python -m panel` 时(仓库根目录就是工作目录),自动回落到当前目录
|
|
_DEFAULT_HOME = "/dailycheckin"
|
|
if not os.path.isdir(_DEFAULT_HOME) and os.path.isdir(os.path.join(os.getcwd(), "panel")):
|
|
_DEFAULT_HOME = os.getcwd()
|
|
|
|
HOME = _env("DC_HOME", _DEFAULT_HOME)
|
|
|
|
CONFIG_PATH = _env("DC_CONFIG_PATH", os.path.join(HOME, "config", "config.json"))
|
|
CRON_PATH = _env("DC_CRON_PATH", os.path.join(HOME, "cron", "crontab_list.sh"))
|
|
LOG_DIR = _env("DC_LOG_DIR", os.path.join(HOME, "logs"))
|
|
DATA_DIR = _env("DC_DATA_DIR", os.path.join(HOME, "data"))
|
|
|
|
STATIC_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "static")
|
|
|
|
STATUS_PATH = os.path.join(DATA_DIR, "panel_status.json")
|
|
RUNS_PATH = os.path.join(DATA_DIR, "panel_runs.json")
|
|
AUTH_PATH = os.path.join(DATA_DIR, "panel_auth.json")
|
|
BACKUP_DIR = os.path.join(DATA_DIR, "backups")
|
|
|
|
HOST = _env("PANEL_HOST", "0.0.0.0")
|
|
PORT = int(_env("PANEL_PORT", "8080"))
|
|
# 可选:给脚本 / 自动化用的静态口令。留空就只走「账号密码登录」,这是默认。
|
|
TOKEN = _env("PANEL_TOKEN", "")
|
|
# 页面标题(浏览器标签 + 顶栏品牌名)。想换成自己的叫法就设 PANEL_TITLE。
|
|
TITLE = _env("PANEL_TITLE", "dailycheckin-plus")
|
|
TZ = _env("TZ", "Asia/Shanghai")
|
|
|
|
MAX_BACKUPS = 30
|
|
MAX_RUNS = 20
|
|
RUN_TIMEOUT = int(_env("PANEL_RUN_TIMEOUT", "1800"))
|
|
|
|
|
|
def ensure_dirs() -> None:
|
|
for path in (os.path.dirname(CONFIG_PATH), LOG_DIR, DATA_DIR, BACKUP_DIR):
|
|
if path:
|
|
os.makedirs(path, exist_ok=True)
|