feat(M5): 前端完善 + 部署 — Vue3 全量页面、仪表盘统计与我的审计接口、systemd/sudoers/迁移脚本、部署文档

This commit is contained in:
2026-08-30 10:50:46 +08:00
parent c0e2ff975a
commit b305d7b371
67 changed files with 3209 additions and 171 deletions
+57
View File
@@ -0,0 +1,57 @@
# ws_usernode systemd 服务单元(生产部署)
#
# 安装:
# 1. 构建单二进制:make build-embed(含前端产物)
# 2. 安装二进制与配置:
# sudo install -o usernode -g usernode -m 0755 bin/usernode /usr/local/bin/usernode
# sudo install -o root -g root -m 0644 config.example.toml /etc/usernode/config.toml
# (按需编辑 /etc/usernode/config.toml:监听地址、数据库、SMTP、system.sudo=true
# 3. 创建运行用户与数据目录:
# sudo useradd -r -s /usr/sbin/nologin -d /var/lib/usernode usernode
# sudo mkdir -p /var/lib/usernode && sudo chown usernode:usernode /var/lib/usernode
# 4. 安装 sudoers 白名单(节点以专有用户经 sudo -n 执行系统账号命令,见 sudoers.example):
# sudo cp deploy/sudoers.example /etc/sudoers.d/usernode && sudo visudo -c
# 5. 安装本单元并启动:
# sudo install -o root -g root -m 0644 deploy/usernode.service /etc/systemd/system/usernode.service
# sudo systemctl daemon-reload
# sudo systemctl enable --now usernode
# 6. 初始化:migrate + 创建初始管理员
# sudo -u usernode usernode migrate --config /etc/usernode/config.toml
# sudo -u usernode usernode admin create --config /etc/usernode/config.toml \
# --username root --password 'xxx' --email admin@example.com
#
# 说明:
# - 以 usernode 专有用户运行;数据(SQLite / 审计归档)在 /var/lib/usernode。
# - 生产必须配置 [system] sudo=true dry_run=false,配合 /etc/sudoers.d/usernode 白名单。
# - 建议前置 nginx/caddy 反向代理启用 TLS[server] listen 保持 127.0.0.1。
[Unit]
Description=ws_usernode server user management node
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=usernode
Group=usernode
WorkingDirectory=/var/lib/usernode
ExecStart=/usr/local/bin/usernode serve --config /etc/usernode/config.toml
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=3
# 安全加固
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/lib/usernode /var/log/usernode /etc/usernode
PrivateTmp=true
PrivateDevices=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectControlGroups=true
# 日志走 journald
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target