完善ui/完善执行步骤

This commit is contained in:
2026-07-18 23:51:14 +08:00
parent 0d887d311b
commit 7a138559de
4 changed files with 155 additions and 21 deletions
+2 -1
View File
@@ -19,7 +19,7 @@ from backend.routers.admin import (
list_logs,
list_acme_configs, get_acme_config, create_acme_config, update_acme_config, delete_acme_config,
issue_cert, renew_cert, auto_renew_all, list_acme_logs, get_cert_info,
download_cert_file, admin_generate_script,
download_cert_file, admin_generate_script, admin_download_script,
)
logging.basicConfig(level=logging.DEBUG)
@@ -94,6 +94,7 @@ app.get("/admin/api/acme/logs")(list_acme_logs)
app.get("/admin/api/cert-info/{domain_id}")(get_cert_info)
app.get("/admin/api/cert-download/{domain_id}/{file_type}")(download_cert_file)
app.get("/admin/api/script")(admin_generate_script)
app.get("/admin/api/script/download")(admin_download_script)
logger.info("=== 路由注册完成 ===")
for route in app.routes:
+40 -10
View File
@@ -582,15 +582,8 @@ async def list_acme_logs(status: str | None = None, db: AsyncSession = Depends(g
# ──────────────── 部署脚本 ────────────────
@router.get("/script")
async def admin_generate_script(
domain: str,
server_name: str,
os: str = "linux",
db: AsyncSession = Depends(get_db),
_: bool = Depends(require_auth),
):
"""管理端生成部署脚本"""
async def _render_script(domain: str, server_name: str, os: str, db: AsyncSession) -> tuple[str, Server, Domain]:
"""渲染部署脚本,返回 (script, server, domain_obj)"""
from jinja2 import Environment, FileSystemLoader
template_dir = Path(__file__).parent.parent / "templates_cert"
@@ -619,7 +612,44 @@ async def admin_generate_script(
check_cmd=d.check_cmd,
reload_cmd=d.reload_cmd,
)
return {"script": script}
return script, server, d
@router.get("/script")
async def admin_generate_script(
domain: str,
server_name: str,
os: str = "linux",
db: AsyncSession = Depends(get_db),
_: bool = Depends(require_auth),
):
"""管理端生成部署脚本(JSON"""
script, server, d = await _render_script(domain, server_name, os, db)
return {
"script": script,
"token": server.token,
"cert_dir": d.cert_dir,
"check_cmd": d.check_cmd,
"reload_cmd": d.reload_cmd,
}
@router.get("/script/download")
async def admin_download_script(
domain: str,
server_name: str,
os: str = "linux",
db: AsyncSession = Depends(get_db),
_: bool = Depends(require_auth),
):
"""下载脚本文件(纯文本,供 curl 使用)"""
script, _, _ = await _render_script(domain, server_name, os, db)
ext = "ps1" if os == "windows" else "sh"
filename = f"deploy-{domain.replace('*', '_')}.{ext}"
return PlainTextResponse(
script,
headers={"Content-Disposition": f'attachment; filename="{filename}"'},
)
# ──────────────── 证书信息 ────────────────