一、v5 做了什么
从 v5.0 到 v5.7,一共 30 多个版本迭代。如果要用一句话概括:
把每天都会用到的地方,一个个磨到你愿意用为止。
| 维度 | v4 | v5 |
|---|---|---|
| 侧栏 | 一长串菜单,滚不到底 | 分组折叠 + 抽屉 + 平滑指示器 |
| 登录页 | 居中卡片 | 左右分栏 + 照片背景 |
| 移动端 | 侧栏铺满顶部 | 抽屉 + 汉堡 + 用户菜单 |
| 个人主页 | 无 | 头像 / 背景 / 主题色 / 动态同步博客 |
| 服务器管理 | 只有基础操作 | 安全中心 + 脚本执行 |
| 多节点 | 单机 | 主从架构,子节点一键接入 |
| 文章发布 | 手写 Markdown(乱码) | 自动转 HTML + 每日定时发布 |
二、界面:从「能用」到「顺手」
侧栏改造
之前:
一长串菜单,滚不到底
高亮块切换时瞬间跳过去
底部用户区被挤出屏幕
现在:
● 概览 ──────────
📊 仪表盘
● 我的 ──────────
🙋 我的主页
🖥️ 我的服务器
🔗 我的链接
🌐 我的域名
● 商城 ──────────
▸ 运营 ── [4] ← 可折叠
▸ 系统 ── [7]
四个改进:
| 改动 | 效果 |
|---|---|
| 分组折叠(记忆状态) | 默认收起的组不占空间 |
| 选中块 220ms 平滑滑动 | 从旧位置滑到新位置 |
| 点击水波纹 | 从鼠标位置扩散 |
| 三段式布局 | 品牌固定 / 导航滚动 / 底部固定 |
踩的坑:.sidebar 同时写了 top:0; bottom:0 和 height:100vh,导致高度按 100vh 算(含手机地址栏),底部溢出。最终用绝对定位三段式解决。
登录页重做
┌──────────────────────────┬──────────────┐
│ [你的插画照片 + 遮罩] │ 🐱 │
│ │ 欢迎回来 │
│ 让每一台设备 │ 登录狸花云 │
│ 都有身份 │ │
│ │ 用户名 │
│ 设备 ID 下发 · 云托管 │ [________] │
│ │ 密码 │
│ ✓ 自动创建容器 │ [________] │
│ ✓ 多租户子域名 │ │
│ ✓ 在线支付 / 自动开通 │ [ 登 录 ] │
│ │ │
│ 48 21 99.9% │ 立即注册 → │
│ 设备代码 接入链接 可用性 │ │
└──────────────────────────┴──────────────┘
60% 40%
设计细节:
- 深色渐变 + 网格纹理 + 三个浮动光球
- 「身份」两字用蓝紫渐变填充
- 左右分栏在手机上也保持(38% : 62%)
- 照片双层遮罩:左侧文字区暗(可读),右侧通透(看得到图)
踩的坑:两层遮罩叠加后暗度到 0.95,照片几乎全黑。调整为 0.52 + 0.58,左 0.80 / 右 0.25。
移动端
顶部栏:[☰] 🐱 狸花云 admin 🐾
↑ 点它弹菜单
点 ☰ → 侧栏从左侧滑出(带遮罩)
↓
┌─────────────┐
│ 🐱 狸花云 │ ← 固定顶部
├─────────────┤
│ ▼ 概览 │
│ ▼ 我的 │ ← 唯一滚动区
│ ... │
├─────────────┤
│ 🐾 admin │ ← 固定底部
│ [🌙][🚪退出] │
└─────────────┘
用户菜单:
点右上角头像
↓
┌──────────────────┐
│ admin · 管理员 │
├──────────────────┤
│ 👤 编辑个人资料 │
│ 🚪 退出登录 │
└──────────────────┘
三、新功能
安全中心(Lynis)
🛡 安全中心
→ 安装引擎(GitHub 拉 Lynis,1MB)
→ 开始扫描(1~3 分钟)
输出:
加固指数 68/100 中等
██████████████░░░░░░░
⚠️ 警告 12 💡 建议 18
· SSH 允许 root 直接登录
· 未检测到防火墙规则
· /tmp 无独立分区
Lynis 是:GitHub 上最流行的 Linux 安全审计工具(20k+ star),检查 200+ 项系统配置。
脚本执行
给服务器装工具:
🧰 脚本执行
→ 选容器 → 勾选工具 → 执行
📦 系统工具:基础 / 网络诊断 / 监控 / 安全 / 压缩
💻 开发工具:Python / 编译环境 / Node.js 20 / Java 17 / Docker / 数据库客户端 / Nginx
管理员还能配置「新建容器时自动装哪些」,一次设置长期生效。
特点:
- 只显示运行中的、自己名下的容器
- 多个脚本可叠加
- 输出完整(退出码 + 耗时 + 日志)
- 自定义命令仅管理员可用
多节点(主从架构)
┌──────────────────────────┐
│ 主节点(控制台 + 博客) │
└────────┬─────────────────┘
│ PVE API
┌────┴────┐
▼ ▼
子节点A 子节点B
(只装 PVE)(只装 PVE)
子节点接入(一条命令):
bash -c "$(curl -fsSL https://id.woiov.cn/deploy/pve-init.sh)" -- --node-id hz01
脚本自动完成:
1. 环境检查
2. apt 源加速(清华镜像)
3. 创建 API 用户 + Token
4. 下载容器模板
5. 输出接入信息
升级跟从主:子节点没有独立代码,主节点升级 = 系统升级完成。
个人主页
https://id.woiov.cn/u/你的用户名
| 配置项 | 说明 |
|---|---|
| 昵称 | 展示名 |
| 头像 | URL / 媒体库选 / 直接上传 |
| 资料卡背景 | 同上 |
| 简介 | 200 字 |
| 主题色 | 5 种 |
| 自定义链接 | 8 个 |
| WP 账号 | 绑定后展示你的文章 |
发动态同步博客:
我的主页 → 发动态 → [🚀 发布到博客]
↓
直接写入 WordPress(分类「用户动态」)
↓
立刻出现在官网
四、后端改进
vmid 号段池
之前:号一直往上加(200 → 201 → … → 213),删了也不复用
现在:
号段:200 ~ 999
分配:从 200 起找最小空闲号
回收:已取消/退款订单的号自动释放
每天:自动回收一次
效果:号段永不耗尽,回收的号立即复用。
订单密码必填
容器 root 密码 *
至少 8 位,需同时包含字母和数字
理由:留空自动生成时用户经常忘了去哪儿找密码。
初始化脚本通用性
问题:Ubuntu 26.04 用 deb822 源格式(sources.list.d/*.sources),老脚本只认 sources.list → 换源失败 → 初始化 275 秒
修复:
- 同时支持两种格式
- 按 Debian/Ubuntu/未知分别处理
- 非 apt 系统快速失败(不白等)
实测:Ubuntu 26.04 换源后 apt update = 29.3MB / 9 秒,初始化从 275 秒降到 60 秒内。
五、踩过的坑(都记录了)
| 问题 | 根因 |
|---|---|
| 整页白屏 | CSS 变量写 --ink,主题里是 --fg-1 → 深色模式文字与背景同色 |
| 蓝条跑到侧栏底部 | .sidebar-nav 缺 position: relative |
| 文章”慢慢消失” | 入场动画的 IntersectionObserver 条件太苛刻 |
| 背景图不显示 | JSON.stringify 双引号破坏 HTML style 属性 |
| 文章表格变乱码 | 发 Markdown 原文,WP 不解析 |
| 初始化 275 秒 | Ubuntu 用 deb822 源,脚本没处理 |
| root 密码没设上 | init 脚本提前删了公钥 |
| 插件装完消失 | 容器重启覆盖 plugins 目录 |
| 抽屉底部不显示 | height:100vh 与 top/bottom:0 冲突 |
| 登录页底部白条 | body { padding-top: 56px } 登录页没重置 |
共同教训:node --check 只查语法,查不到”引用了不存在的模块/函数”(https is not defined、shop.saveOrders is not a function)——这类错误只在运行时暴露。
六、下一步
| 方向 | 说明 |
|---|---|
| 模板加速 | 预装工具打进系统模板,初始化 90 秒 → 30 秒 |
| DNS 自动解析 | 加子域名后自动创建解析记录 |
| VNC 控制台 | 浏览器直接看机器屏幕(系统挂了也能救) |
| 应用市场 | 一键部署 Nginx / MySQL / Docker |
| 监控告警 | 服务挂了自动通知,而不是等客户投诉 |
| 异地备份 | 备份推到云端,防整机丢失 |
最后
v5 没有炫目的新功能,只有一件事:
把每天都要点的地方,磨到你愿意点。
侧栏不再滚不到底,登录页不再占满屏幕,手机上能正常用了,发内容不用切后台,装工具点两下就行。
这些事单看都很小,加起来就是「顺手」。
狸花网络 · 让每一台设备都有身份 🐾