oss.now:连接开源项目与贡献者的现代平台

Discord
Website
License
Powered by Turbo

 

什么是oss.now?

如果你是开源项目维护者,常常苦于找不到合适的贡献者;或者你是开发者,想参与开源项目却不知道从何入手——那么oss.now可能正是为你打造的工具。

简单来说,oss.now是一个现代平台,核心目标是拉近开源项目维护者和贡献者之间的距离。无论你想展示自己的项目、寻找具备特定技能的贡献者,还是发现值得投入精力的开源项目,这个平台都能提供相应的工具和社区支持。

oss.now能帮你做什么?核心功能介绍

1. 项目发现:轻松找到合适的开源项目

如果你想参与开源贡献,却不知道从哪里开始,项目发现功能会很有用。你可以按照类别、技术栈或活跃度来浏览和筛选开源项目,不用再在海量仓库中漫无目的地搜索。比如,你熟悉React技术,就可以直接筛选出使用React的项目;如果你想找近期活跃的项目,也能通过活跃度筛选快速定位。

2. 无缝对接GitHub与GitLab

对于项目维护者来说,展示项目的实时数据很重要。oss.now支持GitHub和GitLab的集成,能自动同步你的仓库信息,实时展示项目的star数量、贡献者动态、issues状态等数据。这意味着你不用手动更新项目信息,访问者也能随时看到项目的最新状态。

3. 项目发布:让社区知道你的更新

当你的项目有重大版本发布或重要更新时,可以通过“项目发布”功能向社区宣布。这能让关注者及时了解项目进展,也可能吸引新的贡献者参与进来。

4. 早期提交:提升新项目的曝光度

如果你的项目还在早期阶段,想获得更多关注,“早期提交”功能可以帮你。提交早期项目能获得额外的曝光机会,让更多人在项目成长初期就认识它。

5. 贡献者匹配:找到合适的人一起做事

项目维护者常常会遇到这样的问题:需要有人解决特定技术领域的问题,但不知道谁擅长这方面。贡献者匹配功能就是为了解决这个问题——它能根据项目需求,找到具备相应技能的贡献者,让协作更高效。

oss.now用了哪些技术?技术栈解析

一个平台的稳定性和性能,很大程度上取决于它使用的技术。oss.now的技术栈选择兼顾了开发效率、性能和可扩展性,具体如下:

技术领域 具体技术 作用说明
前端 Next.js 15(App Router)+ React 19 + TypeScript + Turbopack Next.js负责页面渲染和路由,React 19提供UI组件基础,TypeScript增加代码的可靠性(减少类型错误),Turbopack提升开发时的编译速度
样式 Tailwind CSS + shadcn/ui组件 Tailwind CSS让样式开发更灵活高效,shadcn/ui提供现成的高质量UI组件,减少重复开发
代码质量 Prettier + ESLint Prettier保证代码格式一致,ESLint检测代码中的潜在问题,共同提升代码质量
后端 tRPC + Node.js tRPC实现前后端类型安全的API通信,避免接口调用时的类型错误;Node.js作为运行环境,处理服务器端逻辑
数据库 PostgreSQL(via Neon)+ DrizzleORM PostgreSQL是关系型数据库,存储项目、用户等核心数据;Neon提供云端数据库服务;DrizzleORM简化数据库操作和迁移
缓存 Redis(Upstash) 用于缓存频繁访问的数据(如项目列表、用户信息),提升平台响应速度
认证 Better-Auth + GitHub & GitLab OAuth 处理用户登录逻辑,支持通过GitHub或GitLab账号快捷登录,安全且方便
分析 Databuddy 收集平台使用数据,帮助开发者了解用户行为,持续优化平台
部署 Vercel 负责项目的部署和托管,支持快速发布和全球访问
项目管理 Turborepo 作为monorepo工具,管理多个关联项目,提升开发和构建效率

项目结构:oss.now的“骨架”是什么样的?

oss.now采用monorepo(单一代码库)结构,用Turborepo管理,这种结构的好处是能集中管理多个相关项目,方便代码共享和协作。具体结构如下:

ossdotnow/
├── apps/
│   └── web/          # Next.js web应用(用户直接访问的前端界面)
├── packages/
│   ├── api/          # tRPC API路由(前后端通信的接口)
│   ├── auth/         # 认证逻辑(处理登录、权限等)
│   ├── db/           # 数据库 schema 和迁移脚本(定义数据结构和更新规则)
│   ├── env/          # 环境变量验证(确保配置正确)
│   └── ui/           # 共享UI组件(多个地方可复用的界面元素)
└── turbo.json        # Turbo配置文件(定义构建、开发等流程)

简单说,apps/web是用户看到的“前台”,packages里的内容是支撑前台运行的“后台”和“工具”——比如api处理数据交互,db管理数据存储,ui提供界面组件等。

如何开始使用oss.now?一步步带你搭建

如果你想在本地运行oss.now,体验它的功能或参与开发,按照以下步骤操作即可。

前提条件:你需要准备这些工具

在开始之前,确保你的电脑上已经安装了这些软件:

  • Bun v1.2.13或更高版本(类似Node.js的JavaScript运行环境,处理依赖和脚本)
  • Docker(用于运行本地的PostgreSQL数据库和Redis缓存)
  • Git(版本控制工具,用于克隆代码)

如果你还没安装,可以参考它们的官方文档:

安装步骤:从0到1运行项目

1. 克隆代码仓库

打开终端,运行以下命令,将代码下载到本地:

git clone https://github.com/ossdotnow/ossdotnow.git
cd ossdotnow

这一步会创建一个名为ossdotnow的文件夹,并将所有代码下载到里面,然后进入该文件夹。

2. 安装依赖

项目需要一些第三方库才能运行,用Bun安装:

bun install

Bun会根据项目中的配置文件,自动下载并安装所需的依赖。

3. 设置环境变量

项目运行需要一些配置信息(比如数据库地址、API密钥等),这些信息保存在环境变量中。

  • 找到项目根目录下的.env.example文件,复制一份,并重命名为.env
  • 打开.env文件,根据里面的说明,替换成你自己的配置值(比如数据库密码、OAuth密钥等)

4. 启动数据库服务

oss.now需要PostgreSQL(存储数据)和Redis(缓存),可以用Docker快速启动这两个服务:

bun docker:up

这个命令会启动两个Docker容器,分别运行PostgreSQL和Redis,默认端口分别是5432和6379。

5. 运行数据库迁移

数据库需要按照项目定义的结构初始化表和字段,这一步叫“迁移”:

bun db:migrate

运行后,数据库会创建好所有必要的表(如用户表、项目表等)。

6. 填充测试数据(可选)

如果你想快速看到效果,可以用测试数据填充数据库:

bun db:seed

这会添加一些模拟的用户、项目等数据,方便你体验功能。

7. 启动开发服务器

一切准备就绪后,启动本地服务器:

bun dev

等待启动完成后,打开浏览器,访问http://localhost:3000,就能看到oss.now的界面了。

常用脚本:用命令快速操作项目

在开发或使用过程中,你可能会用到这些脚本(都用bun 脚本名的方式运行),按功能分类如下:

开发相关

脚本 作用
bun dev 启动开发服务器,支持热重载(改代码后自动更新界面)
bun build 构建生产环境的代码(优化性能,适合部署)
bun start 启动生产环境服务器(需要先运行bun build

数据库相关

脚本 作用
bun docker:up 启动PostgreSQL和Redis的Docker容器
bun docker:down 停止Docker容器(数据会保留)
bun docker:clean 停止容器并删除数据卷(彻底清除数据,谨慎使用)
bun db:generate 根据数据库schema变化,生成迁移文件
bun db:migrate 应用迁移文件,更新数据库结构
bun db:push 直接将schema变化推送到数据库(仅用于开发环境,生产环境慎用)
bun db:studio 打开Drizzle Studio(可视化数据库管理工具,方便查看和编辑数据)
bun db:seed 填充测试数据
bun db:make-all-admin 让所有用户获得管理员权限(仅开发环境用,方便测试)

代码质量相关

脚本 作用
bun lint 用ESLint检查代码,找出潜在问题(如语法错误、不规范写法)
bun format 用Prettier自动格式化代码,保持格式一致
bun typecheck 用TypeScript检查类型错误,确保代码类型安全

如何配置OAuth登录?连接GitHub和GitLab

oss.now支持用GitHub或GitLab账号登录,这需要你在对应的平台上创建OAuth应用,获取密钥后配置到项目中。

GitHub OAuth配置步骤

  1. 打开GitHub开发者设置
  2. 点击“New OAuth App”(新建OAuth应用)
  3. 填写信息:

    • 应用名称:oss.now (Development)(开发环境用,生产环境可改)
    • 主页URL:http://localhost:3000(本地开发地址)
    • 授权回调URL:http://localhost:3000/api/auth/callback/github(用户登录后跳转回来的地址)
  4. 提交后,会看到“Client ID”(客户端ID)和“Client Secret”(客户端密钥)
  5. 把这两个值复制到你的.env文件中对应的位置(GITHUB_CLIENT_IDGITHUB_CLIENT_SECRET

GitLab OAuth配置步骤

  1. 打开GitLab应用设置
  2. 点击“New application”(新建应用)
  3. 填写信息:

    • 名称:oss.now (Development)
    • 重定向URI:http://localhost:3000/api/auth/callback/gitlab
    • 权限范围(Scopes):勾选apiread_apiread_userread_repositoryopenidprofileemail(这些权限用于获取用户信息和仓库数据)
  4. 提交后,复制“Application ID”(即Client ID)和“Secret”到.env文件中(GITLAB_CLIENT_IDGITLAB_CLIENT_SECRET

配置完成后,重启开发服务器,就能用GitHub或GitLab账号登录了。

如何为oss.now做贡献?参与开发的流程

如果你觉得oss.now有价值,想参与开发、修复bug或添加新功能,可以按照以下流程操作。

开发流程

  1. ** Fork仓库 **:在GitHub上找到oss.now的仓库,点击右上角的“Fork”,创建自己的副本。
  2. ** 创建分支 **:从dev分支(不是main分支)创建新分支,命名要清晰,比如feature/添加搜索过滤功能fix/修复登录bug

    git checkout -b feature/your-feature-name
    
  3. ** 开发修改 **:在新分支上进行代码修改,实现你的功能或修复bug。
  4. ** 检查代码质量 **:确保代码符合项目规范:

    bun lint  # 检查代码问题
    bun typecheck  # 检查类型错误
    
  5. ** 提交代码 **:用清晰的 commit 信息描述你的修改,比如“添加项目搜索的语言过滤功能”。
  6. ** 推送并创建PR **:将分支推送到你的Fork仓库,然后在GitHub上向oss.now的dev分支创建Pull Request(PR)。

注意事项

  • 一定要从dev分支创建新分支,main分支是生产环境代码,不直接接受修改
  • 本地不要同时运行其他Next.js应用(可能占用3000端口,导致OAuth登录跳转失败)
  • 目前平台在生产环境处于开发模式,目的是限制公开访问,后续会逐步开放

如何部署oss.now?在Vercel上发布

oss.now设计为可以直接部署在Vercel上,步骤如下:

  1. ** Fork仓库 **:先Fork oss.now的仓库到你的GitHub账号下
  2. ** 导入到Vercel **:登录Vercel,点击“New Project”,导入你Fork的仓库
  3. ** 配置环境变量 **:在Vercel项目的“Settings > Environment Variables”中,添加.env文件里的所有变量(注意替换为生产环境的值)
  4. ** 部署 **:点击“Deploy”,Vercel会自动构建并部署项目

生产环境注意事项

  • 更新OAuth的回调URL为你的生产域名(比如https://your-domain.com/api/auth/callback/github
  • 使用生产环境的数据库和Redis(比如Neon的生产实例、Upstash的Redis)
  • 设置VERCEL_ENV=production环境变量,启用生产模式

oss.now的架构:前后端是如何工作的?

了解架构能帮助你更好地理解项目的运行逻辑,无论是使用还是开发都更清晰。

前端架构

  • ** 框架 **:用Next.js 15的App Router,支持服务器端渲染(提升首屏加载速度和SEO)和客户端路由(切换页面更流畅)
  • ** UI基础 **:基于React 19开发组件,实现交互逻辑
  • ** 数据获取 **:用TanStack Query管理数据请求和缓存(减少重复请求,提升性能)
  • ** 样式 **:Tailwind CSS负责样式,配合shadcn/ui组件库,保证界面一致性和开发效率

后端架构

  • ** API通信 **:tRPC确保前后端接口的类型安全(前端调用接口时,TypeScript会自动检查参数类型,减少错误)
  • ** 数据库操作 **:DrizzleORM处理数据库查询和迁移(用代码定义数据库结构,方便版本控制)
  • ** 认证 **:Better-Auth管理用户登录状态,支持多种OAuth登录方式
  • ** 限流 **:用Upstash Redis实现接口限流(防止恶意请求,保护服务器)

数据库结构

数据库主要包含这些核心表:

  • 用户和认证相关表(存储用户信息、登录记录等)
  • 项目表(包含项目名称、描述、类别、技术栈等元数据)
  • 提交和等待列表(早期项目提交记录)
  • 项目发布和评论(记录版本更新和用户反馈)
  • 投票和举报系统(社区互动和内容管理)

常见问题:遇到问题该如何解决?

在使用或开发过程中,可能会遇到一些问题,这里列举常见的并提供解决方法。

1. OAuth登录跳转有问题

  • ** 可能原因 **:本地有其他应用占用了3000端口,导致回调地址无法访问;或者回调URL填写错误。
  • ** 解决方法 **:关闭其他占用3000端口的应用;检查GitHub/GitLab OAuth设置中的回调URL,确保和.env文件中的配置一致,且与本地地址匹配。

2. 数据库连接失败

  • ** 可能原因 **:Docker没启动;PostgreSQL端口被占用;DATABASE_URL配置错误。
  • ** 解决方法 **:确保Docker正在运行;检查5432端口是否被其他程序占用(可以在Docker配置中修改端口);验证DATABASE_URL的格式是否正确(通常是postgresql://用户名:密码@localhost:5432/数据库名)。

3. 环境变量错误

  • ** 可能原因 **:缺少必要的环境变量;变量值填写错误。
  • ** 解决方法 **:检查.env文件,确保所有带必填标记的变量都已设置;运行bun dev,终端会显示具体哪个变量有问题,根据提示修改。

许可证和致谢

许可证

oss.now采用MIT许可证,这意味着你可以自由地使用、复制、修改、合并、发布、分发这个项目的代码,只要保留原许可证信息即可。具体条款可以查看项目中的LICENSE文件。

致谢

oss.now的开发离不开这些工具和服务的支持:

你可能还想知道的问题(FAQ)

oss.now适合什么样的人使用?

主要适合两类人:一是开源项目维护者(想展示项目、寻找贡献者);二是想参与开源的开发者(想发现合适的项目、贡献自己的技能)。

用oss.now需要付费吗?

目前从项目说明来看,oss.now是开源项目,你可以免费使用它的代码,本地部署或按自己的需求修改。如果使用它的官方服务(https://l.oss.now),具体是否收费可以关注官方信息。

没有开发经验能使用oss.now吗?

如果只是想浏览项目或用账号登录参与,不需要开发经验;但如果想本地部署或参与开发,需要一定的技术基础(比如了解命令行、数据库基本概念)。

除了GitHub和GitLab,还支持其他代码托管平台吗?

目前从文档来看,只支持GitHub和GitLab的集成,后续是否支持其他平台(如Gitee)可以关注项目更新。

如何报告oss.now的bug或提出功能建议?

可以通过项目的GitHub仓库提交issue,或者加入Discord社区(https://l.oss.now/discord)交流。

oss.now作为一个连接开源项目与贡献者的平台,无论是对于想推广项目的维护者,还是想参与开源的开发者,都提供了实用的工具和社区支持。如果你对它感兴趣,不妨按照上面的步骤,在本地部署体验一下,或者参与到项目的开发中,一起完善这个平台。