现代化 Pastebin 服务,支持代码高亮、加密存储、密码保护、阅后即焚。
- 代码高亮 - Shiki 语法高亮,支持 100+ 语言
- 端到端加密 - AES-256-GCM 加密存储
- 密码保护 - 可选密码访问控制
- 阅后即焚 - 查看后自动销毁
- 过期时间 - 支持 1 小时到永久
- 管理后台 - JWT 认证的管理界面
- 框架: Next.js 16 (App Router) + React 19
- 数据库: SQLite + Drizzle ORM
- 样式: Tailwind CSS v4 + shadcn/ui
- 加密: Web Crypto API (AES-256-GCM)
- 认证: jose (JWT)
# 安装依赖
pnpm install
# 配置环境变量
cp .env.example .env
# 编辑 .env 填入必需变量
# 初始化数据库
pnpm drizzle-kit push
# 启动开发服务器
pnpm dev| 变量 | 说明 | 必需 |
|---|---|---|
ADMIN_PASSWORD |
管理员密码 (明文) | ✅ |
其他密钥 (ENCRYPTION_KEY, SESSION_SECRET) 首次启动时自动生成并持久化。
| 变量 | 说明 | 示例 |
|---|---|---|
ENCRYPTION_KEY |
64 位 hex (32 字节 AES 密钥) | openssl rand -hex 32 |
SESSION_SECRET |
Admin JWT 签名密钥 | openssl rand -base64 32 |
ADMIN_PASSWORD_HASH |
bcrypt 哈希 (cost=10) | node -e "require('bcryptjs').hash('pwd', 10).then(console.log)" |
pnpm dev # 开发服务器 (http://localhost:3000)
pnpm build # 生产构建 (standalone 输出)
pnpm start # 生产服务器
pnpm test # 运行测试
pnpm lint # ESLint 检查├── app/ # Next.js App Router
│ ├── api/ # API 路由
│ ├── admin/ # 管理后台
│ └── [id]/ # Paste 查看页
├── src/
│ ├── components/ # React 组件
│ │ ├── paste/ # 核心业务组件
│ │ ├── admin/ # 管理后台组件
│ │ └── ui/ # shadcn/ui 基础组件
│ └── lib/ # 工具库
│ ├── db/ # 数据库层
│ └── admin/ # 认证工具
└── drizzle/ # 数据库迁移
POST /api/pastes
Content-Type: application/json
{
"content": "console.log('hello')",
"language": "javascript",
"expiresIn": "1d",
"password": "optional",
"burnAfterRead": false
}GET /api/pastes/[id]
# 如有密码保护,需先验证
POST /api/pastes/[id]/verify# 1. 创建 .env 文件
echo "ADMIN_PASSWORD=your-secure-password" > .env
# 2. 启动服务
docker compose up -d首次启动时自动完成:
- 生成加密密钥 (持久化到 volume)
- 初始化数据库
- 计算密码哈希
docker build -t paste .
docker run -d -p 3000:3000 \
-e ADMIN_PASSWORD=your-password \
-v paste_data:/app/data \
pasteMIT