WuYongJie f646b71813
Some checks failed
CI Check / check (push) Has been cancelled
chore: 初始化本地仓库并同步最近改动
2025-11-18 17:50:16 +08:00

由壹点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

访问 http://localhost:3000

🚀 部署到服务器

安全部署流程

重要: 使用安全部署工具,确保不影响正式服务器的正常使用。

可移植生产部署请优先参考:

快速部署:

  1. 本地测试

    npm run dev
    # 测试所有功能正常
    
  2. 部署前检查

    # Windows
    .\部署前检查清单.bat
    
  3. 执行部署

    # 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
Wu-flnxi项目个人仓库
Readme 341 MiB
Languages
TypeScript 87.3%
PowerShell 5.7%
JavaScript 3%
Go 2.2%
Shell 1.3%
Other 0.5%