Some checks failed
CI Check / check (push) Has been cancelled
由壹点3D素材
一个现代化的3D素材分享平台,采用苹果官方UI设计规范。
⚠️ 强烈建议:可迁移化部署时只需编辑根目录的
config-bianliang.env
- 将你的域名、内网地址、图片域名白名单、CORS 白名单、钉钉回调、对象存储等统一填在该文件中
- 系统启动会自动读取该文件:仅在变量“未设置”时注入,不会覆盖系统环境或
.env/.env.local- 修改后重启服务生效(重启 Node 或对应容器)
- 前端可读变量以
NEXT_PUBLIC_开头,服务端变量无需此前缀
🎯 项目目标
让其他公司能够一键部署或一条命令从Docker部署到自己的NAS或服务器上
核心设计原则
- 性能开销优先 - 最小化资源消耗,确保在低配置设备上也能稳定运行
- 稳定性优先 - 确保长期稳定运行,减少崩溃和错误
- 易于部署 - 零配置或最小配置即可运行
详细规范请参考:架构设计与编码规范
一键式可迁移配置(推荐)
不想到处找变量?只需编辑根目录的 config-bianliang.env,填好注释中的值并重启服务即可。
系统在启动时会自动读取该文件,只有当某个变量"未设置"时才会注入,绝不会覆盖你在系统环境或 .env/.env.local 中已设置的值。
适合场景:不同公司、不同域名、NAS/内外网混合环境的快速切换与迁移。
快速部署指南:一键部署快速指南
包含的关键项(全部已带中文注释):
- 站点/域名:
APP_PUBLIC_URL,NEXTAUTH_URL,PUBLIC_DOMAINS,NEXT_PUBLIC_PUBLIC_DOMAINS,NEXT_PUBLIC_PORTAL_BASE_URL,NEXT_PUBLIC_INTRANET_URL - 默认 LOGO:
NEXT_PUBLIC_DEFAULT_HEADER_LOGO_URL,NEXT_PUBLIC_DEFAULT_LOGIN_LOGO_URL - 钉钉回调:
NEXT_PUBLIC_DINGTALK_CALLBACK_URL - 图片域名白名单(Next/Image):
IMAGE_REMOTE_HOSTS - CORS 白名单:
ALLOWED_ORIGINS - 数据恢复/对象存储:
RESTORE_S3_BUCKET_URL,RESTORE_S3_PUBLIC_URL
提示:前端需要读取的变量以 NEXT_PUBLIC_ 开头;服务端专用变量不需要此前缀。
技术栈
- 前端: Next.js 14 + React 18 + TypeScript + TailwindCSS
- 认证: NextAuth.js
- 数据库: PostgreSQL + Prisma ORM
- 存储: MinIO S3 (预览图) + 本地存储 (压缩包)
功能特性
- ✅ 用户注册/登录系统
- ✅ 素材上传(预览图 + 压缩包)
- ✅ 素材浏览与下载
- ✅ 管理员后台管理
- ✅ 用户管理
- ✅ 苹果风格UI设计
快速开始
1. 安装依赖
npm install
2. 配置环境变量
复制 .env.example 为 .env 并按需填写;部署时可结合 config-bianliang.env 管理差异化配置。
cp .env.example .env
- 如需在同一存储桶隔离测试与生产数据,可以设置
S3_ENV_PREFIX(例如testing/),系统会自动在上传路径前添加该命名空间。
3. 初始化数据库
# 生成 Prisma Client
npm run prisma:generate
# 推送数据库模式
npm run prisma:push
4. 创建管理员账号
首次运行后,注册一个账号,然后在数据库中手动将该用户的 role 字段设置为 ADMIN。
UPDATE users SET role = 'ADMIN' WHERE email = 'your@email.com';
4. 快速自检(可选)
npm run check
5. 启动开发服务器(Node 环境)
npm run dev
🚀 部署到服务器
安全部署流程
重要: 使用安全部署工具,确保不影响正式服务器的正常使用。
可移植生产部署请优先参考:
快速部署:
-
本地测试
npm run dev # 测试所有功能正常 -
部署前检查
# Windows .\部署前检查清单.bat -
执行部署
# Windows PowerShell .\scripts\deploy\安全部署.ps1 # Linux/Mac bash scripts/deploy/安全部署.sh
详细部署指南:
部署检查清单:
项目结构
gongxiangp2/
├── app/ # Next.js App Router
│ ├── api/ # API 路由
│ │ ├── auth/ # 认证相关
│ │ ├── materials/ # 素材相关
│ │ └── admin/ # 管理员相关
│ ├── login/ # 登录页面
│ ├── register/ # 注册页面
│ ├── admin/ # 管理员页面
│ └── page.tsx # 首页
├── components/ # React 组件
│ ├── Header.tsx
│ └── UploadModal.tsx
├── lib/ # 工具库
│ ├── prisma.ts # Prisma 客户端
│ ├── auth.ts # NextAuth 配置
│ └── s3.ts # S3 存储服务
├── prisma/ # Prisma 配置
│ └── schema.prisma # 数据库模式
└── uploads/ # 本地上传文件存储
数据库模型
User (用户)
- id: UUID
- email: 邮箱
- username: 用户名
- password: 密码 (加密)
- role: 角色 (USER/ADMIN)
Material (素材)
- id: UUID
- previewUrl: 预览图URL (S3)
- productModel: 商品型号
- sceneName: 场景名称
- authorName: 作者花名
- zipFileName: 压缩包文件名
- zipFilePath: 压缩包本地路径
- userId: 用户ID (外键)
部署
开发环境(Docker)
docker compose -f docker-compose.dev.yml up --build
生产环境构建
docker compose build
docker compose up -d
环境变量
确保在生产环境中设置所有必要的环境变量,特别是:
NEXTAUTH_SECRET: 使用强随机字符串NEXTAUTH_URL: 设置为生产域名APP_PUBLIC_URL:可选,按公司部署时的对外访问地址(如https://corp.example.com)。若不设置,系统会自动从请求头推断;该变量优先用于生成邀请链接等需要完整站点URL的功能。
License
MIT
Description
Languages
TypeScript
87.3%
PowerShell
5.7%
JavaScript
3%
Go
2.2%
Shell
1.3%
Other
0.5%