Vercel/Netlify/Cloudflare 也可以。
- Database id: vps-dashboard
- Collection id(现在叫 Table id): servers
参考下方创建所需的字段
npm run build
tar -czvf release.tar.gz -C dist/public assets index.html
会生成一个文件到项目根目录, 通过 AppWrite Site 部署即可.
适合熟手操作。略。
npm install npm run build npx vite preview
一个现代化的 VPS 服务器管理仪表盘,帮助用户集中管理和追踪多个 VPS 服务器及其部署的服务。
- 服务器管理: 添加、编辑、删除 VPS 服务器信息
- 服务追踪: 管理每个服务器上运行的服务和端口信息
- 智能搜索: 支持按服务器名称、IP、提供商、服务名称搜索
- 筛选排序: 按提供商筛选,按添加时间或服务数量排序
- 用户认证: 完整的注册/登录系统,数据隔离
- 响应式设计: 支持桌面端和移动端
- 深色模式: 内置深色/浅色主题切换
- 现代 UI: 基于 shadcn/ui 的精美界面
- React 18 + TypeScript - 现代化前端框架
- Vite - 快速构建工具
- Tailwind CSS - 实用优先的 CSS 框架
- shadcn/ui - 高质量 React 组件库
- TanStack Query - 数据获取和状态管理
- React Hook Form + Zod - 表单处理和验证
- Wouter - 轻量级路由库
- AppWrite - 后端即服务 (BaaS)
- 用户认证和会话管理
- NoSQL 文档数据库
- 实时数据同步
- Node.js + Express - 开发服务器
- ESLint + TypeScript - 代码质量检查
- Node.js 18+
- npm 或 yarn
- AppWrite 云账户
git clone <repository-url>
cd vps-dashboard
npm install
复制环境变量模板文件:
cp .env.example .env
编辑 .env
文件,填入你的 AppWrite 配置:
# AppWrite Configuration
VITE_APPWRITE_ENDPOINT=https://cloud.appwrite.io/v1
VITE_APPWRITE_PROJECT_ID=your-project-id
VITE_APPWRITE_DATABASE_ID=your-database-id
VITE_APPWRITE_SERVERS_COLLECTION_ID=servers
npm run dev
项目将在 http://localhost:5000
运行。
- 访问 AppWrite Console
- 创建新项目
- 记录项目 ID
- 进入 Auth 设置
- 启用 Email/Password 认证方式
- 在 Settings > Domains 中添加你的域名:
- 开发环境:
http://localhost:5000
- 生产环境:你的实际域名
- 开发环境:
- 进入 Databases 部分
- 创建新数据库,记录数据库 ID
- 创建
servers
集合,设置以下属性:
字段名 | 类型 | 大小 | 必填 | 数组 | 默认值 | 描述 |
---|---|---|---|---|---|---|
name |
String | 255 | ✅ | ❌ | - | 服务器名称 |
ip |
String | 45 | ❌ | ❌ | - | IP 地址 |
os |
String | 100 | ❌ | ❌ | - | 操作系统 |
provider |
String | 100 | ❌ | ❌ | - | 服务提供商 |
location |
String | 100 | ❌ | ❌ | - | 服务器位置 |
notes |
String | 1000 | ❌ | ❌ | - | 备注信息 |
services |
String | 5000 | ❌ | ❌ | [] |
服务列表(JSON 字符串) |
userId |
String | 36 | ✅ | ❌ | - | 用户 ID |
createdAt |
Datetime | |||||
updatedAt |
Datetime |
在 servers
集合的 Settings > Permissions 中配置:
Document Security: 启用
Permissions:
- Create:
users
(任何已认证用户可创建) - Read:
user:$userId
(仅文档所有者可读取) - Update:
user:$userId
(仅文档所有者可更新) - Delete:
user:$userId
(仅文档所有者可删除)
为了优化查询性能,建议创建以下索引:
- userId 索引
- Key:
userId
- Type:
ASC
- 用于用户数据隔离查询
- Key:
项目已配置为在 Replit 上运行:
- 导入项目到 Replit
- 设置环境变量 (在 Secrets 中)
- 运行
npm run dev
- 使用 Replit 提供的公网地址
- 连接 GitHub 仓库到 Vercel
- 配置环境变量
- 构建命令:
npm run build
- 输出目录:
client/dist
- 连接仓库到 Netlify
- 配置构建设置:
- Build command:
npm run build
- Publish directory:
client/dist
- Build command:
- 设置环境变量
npm run build
# 安装 PM2
npm install -g pm2
# 启动应用
pm2 start ecosystem.config.js
# 查看状态
pm2 status
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
EXPOSE 5000
CMD ["npm", "start"]
vps-dashboard/
├── client/ # 前端代码
│ ├── src/
│ │ ├── components/ # React 组件
│ │ │ ├── ui/ # shadcn/ui 组件
│ │ │ ├── add-edit-server-modal.tsx
│ │ │ ├── delete-server-modal.tsx
│ │ │ └── server-card.tsx
│ │ ├── contexts/ # React Context
│ │ │ ├── AuthContext.tsx
│ │ │ └── ThemeContext.tsx
│ │ ├── hooks/ # 自定义 Hooks
│ │ ├── lib/ # 工具函数和配置
│ │ │ ├── appwrite.ts
│ │ │ ├── appwriteService.ts
│ │ │ └── utils.ts
│ │ ├── pages/ # 页面组件
│ │ │ ├── dashboard.tsx
│ │ │ ├── auth.tsx
│ │ │ └── not-found.tsx
│ │ ├── App.tsx # 主应用组件
│ │ └── main.tsx # 应用入口
│ ├── index.html
│ └── dist/ # 构建输出
├── server/ # 服务器代码
├── shared/ # 共享类型和模式
│ └── schema.ts
├── .env.example # 环境变量模板
├── package.json
├── tailwind.config.ts # Tailwind 配置
├── tsconfig.json # TypeScript 配置
├── vite.config.ts # Vite 配置
└── README.md # 项目文档
- 在
shared/schema.ts
中定义数据模型 - 更新 AppWrite 集合结构
- 在
appwriteService.ts
中添加 API 方法 - 创建相应的 React 组件
- 更新路由和导航
项目使用 TypeScript 和 ESLint 进行代码质量控制:
# 类型检查
npm run type-check
# 代码检查
npm run lint
# 格式化代码
npm run format
主题色彩在 client/src/index.css
中定义,使用 CSS 变量系统:
:root {
--background: hsl(0 0% 100%);
--foreground: hsl(222 84% 5%);
--primary: hsl(217 91% 60%);
/* ... 其他颜色变量 */
}
.dark {
--background: hsl(222 84% 5%);
--foreground: hsl(210 40% 98%);
/* ... 深色模式变量 */
}
1. AppWrite 连接失败
- 检查环境变量是否正确配置
- 确认项目 ID 和端点 URL 准确
- 检查网络连接
2. 认证问题
- 确认 AppWrite 项目中启用了 Email/Password 认证
- 检查域名配置是否包含当前访问地址
3. 数据库权限错误
- 确认
servers
集合的权限设置正确 - 检查用户是否已登录
4. 构建失败
- 清理依赖:
rm -rf node_modules package-lock.json && npm install
- 检查 Node.js 版本是否 >= 18
如遇到问题,可以:
- 查看浏览器控制台错误信息
- 检查 AppWrite Console 中的日志
- 确认环境变量配置
- 参考 AppWrite 文档
本项目基于 MIT 许可证开源。
欢迎提交 Issue 和 Pull Request 来改进这个项目!
享受使用 VPS Dashboard 管理你的服务器! 🚀