数据库初始化工具

一个用于快速初始化和配置PostgreSQL数据库的工具,支持OAuth2.1认证、用户管理和资源管理。

  • by granular-software
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 granular-software/template-docker-oauth-postgresql

使用说明

{{项目名称}}

{{PROJECT_DESCRIPTION}}

快速开始

  1. 安装依赖项

    npm install
    
  2. 设置环境变量

    cp .env.example .env
    # Edit .env with your configuration
    
  3. 初始化数据库

    npm run db:init
    

    这将创建具有所有必要表、函数和索引的PostgreSQL数据库。

  4. 启动开发服务器

    npm run dev
    
  5. 为生产而建

    npm run build
    npm start
    

数据库设置

此模板使用PostgreSQL。您必须设置一个连接字符串,并通过init脚本初始化整个模式。

1) 配置连接字符串

选项A——互动式(推荐):

npm run db:init

系统将提示您 DATABASE_URL (例如: postgresql://postgres:postgres@localhost:5432/mcpresso).脚本会将其写入 .env 并运行模式设置。

选项B——手动:

  1. 复制env文件: cp .env.example .env
  2. 编辑 .env 并设置:
DATABASE_URL=postgresql://USER:PASS@HOST:5432/DB
  1. 初始化完整架构:
node scripts/init-db.js

2) 数据库结构

初始化脚本创建以下表:

  • 用户 -具有UUID主键的用户帐户(电子邮件、用户名、hashed_password、作用域、配置文件)
  • oauth_客户端 -OAuth客户端注册表(重定向URI、作用域、授权类型)
  • oauth_授权_代码 -授权码(带PKCE字段)
  • oauth_access_tokes -过期访问令牌
  • oauth_refresh_tokes -刷新过期令牌
  • 笔记 -示例资源(用户编写的笔记)

数据库功能

  • ✅ 带UUID主键的PostgreSQL -可扩展且安全
  • ✅ 外键约束 -维护数据完整性
  • ✅ 优化指标 -快速查找常见查询
  • ✅ 自动时间戳 -创建/更新了带有触发器的跟踪
  • ✅ OAuth集成 -会话和令牌管理
  • ✅ 数据库函数和触发器 -自动更新_at维护

数据库要求

  • PostgreSQL 12+,带UUID扩展名
  • 中的连接字符串 DATABASE_URL 环境变量
  • 生产部署的SSL支持

特性

  • 使用PostgreSQL进行OAuth2.1身份验证
  • 用户管理和会话
  • 带有作者关系的笔记资源
  • TypeScript支持
  • 开发和生产建设
  • 环境变量配置
  • Docker支持Docker编写

项目结构

src/
├── server.ts          # Main server file
├── auth/              # OAuth configuration
│   └── oauth.ts
├── resources/         # MCP resources
│   ├── schemas/       # Resource schemas
│   │   └── Note.ts    # Note data model
│   └── handlers/      # Resource handlers
│       └── note.ts    # Notes with author relationships
└── storage/           # Database layer
    └── postgres-storage.ts

环境变量

变量 描述 必填 默认
端口 服务器端口 编号 3000
SERVER_URL 服务器的基本URL 是 -
JWT_SECRET JWT令牌的密钥 是 -
DATABASE_URL PostgreSQL连接字符串 是 -
NODE_ENV 环境模式 否 开发

JWT秘密

为令牌签名生成安全的JWT密钥。

选项A——脚本(使用 openssl 引擎盖下):

npm run secret:generate

选项B——手动(使用openssl):

JWT_SECRET=$(openssl rand -hex 64)
echo "JWT_SECRET=$JWT_SECRET" >> .env   # or replace existing JWT_SECRET in .env

对这个值保密。旋转它将使现有令牌无效。

发展

  • npm run dev -使用热重新加载启动开发服务器
  • npm run build -为生产而建
  • npm run typecheck -无建筑类型检查
  • npm run db:init -交互式数据库设置(提示输入连接字符串并初始化完整架构)
  • npm run secret:generate -生成安全的JWT密钥
  • npm run user:create -创建新用户帐户

创建测试用户

数据库初始化后 JWT_SECRET 设置后,创建用户:

npm run user:create "John Doe" "john@example.com" "strongpassword"

该脚本在插入之前验证唯一性并对密码进行哈希运算。

Docker部署

此模板包括Docker支持:

# Build and run with Docker Compose
docker-compose up --build

# Or build manually
npm run docker:build
npm run docker:run

许可证

麻省理工学院