feat: 系统设置增加备份恢复与默认登录 admin

支持手动/每日自动备份四所数据库、K线库与 env,上传 zip 一键恢复;中控默认账号 admin/admin123。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-02 16:39:46 +08:00
parent 55261b7812
commit bfa3352122
16 changed files with 1052 additions and 22 deletions
+53 -1
View File
@@ -862,7 +862,7 @@
<div class="hint-body">
保存后写入 <code>hub_settings.json</code>。Flask / Agent 填本机地址即可;复盘链接可留空(由 Flask 地址自动生成)。<br />
<code>HUB_DISABLED_IDS</code> 可强制关闭账户;<code>HUB_BRIDGE_TOKEN</code> 与实例一致,或实例 <code>APP_AUTH_DISABLED=true</code><br />
公网反代请在 hub <code>.env</code> 设置 <code>HUB_USERNAME</code><code>HUB_PASSWORD</code>HTTPS 反代建议 <code>HUB_COOKIE_SECURE=true</code>
公网反代请在 hub <code>.env</code> 设置 <code>HUB_USERNAME</code><code>HUB_PASSWORD</code>(默认 <code>admin</code> / <code>admin123</code>HTTPS 反代建议 <code>HUB_COOKIE_SECURE=true</code>
</div>
</details>
<p id="settings-meta-line" class="settings-meta-line"></p>
@@ -989,6 +989,57 @@
</div>
</div>
</section>
<section class="settings-section card settings-backup-panel" data-settings-section="backup">
<div class="settings-section-head">
<button type="button" class="settings-section-fold" aria-expanded="true" aria-label="折叠"></button>
<h3 class="settings-display-title">备份与恢复</h3>
<button type="button" class="primary settings-section-save" data-settings-section="backup">保存</button>
</div>
<div class="settings-section-body">
<p class="settings-display-hint">
打包四所 <code>crypto.db</code>、中控 K 线/归档等 SQLite、<code>hub_settings.json</code><code>.env</code>(可选)。
恢复前会自动做一次 pre-restore 快照,并尝试 <code>pm2 restart all</code>
</p>
<div class="settings-grid backup-settings-grid">
<label class="chk-label settings-display-chk">
<input type="checkbox" id="backup-auto-enabled" checked />
每日自动备份(北京时间)
</label>
<div class="field">
<label>自动备份时刻(时,023</label>
<input id="backup-auto-hour" type="number" min="0" max="23" step="1" value="0" />
</div>
<div class="field">
<label>保留天数</label>
<input id="backup-retention-days" type="number" min="1" max="365" step="1" value="30" />
</div>
<label class="chk-label settings-display-chk">
<input type="checkbox" id="backup-include-env" checked />
包含 .env 配置文件
</label>
<label class="chk-label settings-display-chk">
<input type="checkbox" id="backup-include-images" />
包含四所 static/images 截图
</label>
<div class="field field-wide">
<label>备份目录(留空默认 /root/backups/crypto_monitor_portal</label>
<input id="backup-root" type="text" placeholder="/root/backups/crypto_monitor_portal" autocomplete="off" />
</div>
</div>
<div class="backup-actions">
<button type="button" id="backup-run-now" class="primary">立即备份</button>
<span id="backup-status-line" class="backup-status-line"></span>
</div>
<div class="backup-restore-upload">
<label class="backup-upload-label">
<span>上传备份包恢复(.zip</span>
<input id="backup-restore-file" type="file" accept=".zip,application/zip" />
</label>
<button type="button" id="backup-restore-upload-btn" class="danger">上传并恢复</button>
</div>
<div id="backup-list" class="backup-list"></div>
</div>
</section>
<section class="settings-section card" data-settings-section="exchanges">
<div class="settings-section-head">
<button type="button" class="settings-section-fold" aria-expanded="true" aria-label="折叠"></button>
@@ -1064,6 +1115,7 @@
<script src="/assets/dashboard.js?v=20260612-dash-monitor-count"></script>
<script src="/assets/ai_review_render.js?v=3"></script>
<script src="/assets/time_close_ui.js?v=2"></script>
<script src="/assets/backup.js?v=1"></script>
<script src="/assets/app.js?v=20260614-instance-nav"></script>
</body>
</html>