FreeHire 开源招聘系统

strelov1/freehire 访问 GitHub ↗
🔤 Go ★ 2395 ⑂ 0 daily #10 (+360) 抓取 2026-10-22

一句话简介

基于 Go 构建的开源招聘管理项目,适合用于职位发布、候选人管理和招聘流程协作。

标签

  • 招聘管理
  • 开源项目
  • Go
  • 人力资源
  • Web应用

适用应用场景

  • 企业发布职位并管理招聘流程
  • 招聘团队筛选和跟进候选人
  • 中小企业搭建内部招聘管理平台

README 中文摘要

项目概览

freehire 是一个开源 IT 职位聚合与求职管理平台,直接抓取公司官网及其使用的 ATS 系统,汇集超过 330 万条实时职位,覆盖 47 万余家公司、124 个 ATS 平台及 Telegram 频道。职位数据来自 Workday、Greenhouse、Lever、Ashby、iCIMS 等招聘系统,链接始终指向企业原始职位页面,避免招聘机构转载、聚合中间商和失效链接。

项目采用统一职位模式并基于稳定指纹去重,同一职位即使发布在多个渠道,也只保留一条记录。搜索支持按地区、工作方式、资历、技能和薪资筛选,分类依据经过整理的词典,不对缺失信息进行猜测。项目以 MIT 许可证开放,可直接使用托管服务,也可自行部署或作为基础构建扩展功能。

核心特性

除职位目录外,平台还提供职位搜索、保存搜索、邮件与 Telegram 摘要、市场分析以及“幽灵职位”信号检测。求职流程覆盖 ATS 兼容的简历生成、职位与简历确定性匹配、AI 适配分析、简历定制、追踪链接和内推;用户可管理申请阶段、招聘方邮件、事件记录与提醒。

系统内置求职助手,提供聊天、职位浏览、个人资料分析、简历定制和面试演练五种模式。开发者可使用公开 HTTP API、CLI、面向 Claude Desktop 与 Claude Code 的 MCP 服务,以及表单填写浏览器扩展。Chrome 扩展可在职位页面侧栏中分析技能匹配度并辅助填写申请表单。

技术架构与数据来源

后端使用 Go 与 Fiber v2,PostgreSQL 和 pgvector 负责存储、过滤及语义向量;sqlc 从 SQL 生成类型安全的数据访问代码,不使用 ORM。Meilisearch 提供全文和分面搜索,Redis 用于限流与实时广播,S3 兼容对象存储保存简历、头像和预览文件。

LLM 层通过 langchaingo 接入任意 OpenAI 兼容接口,并由 Bifrost 提供用户虚拟密钥、跨供应商回退和消费追踪;Langfuse 用于调用链路监控。前端为 SvelteKit 2、Svelte 5、Tailwind 4 和 adapter-node,Prometheus 与 Grafana 提供采集和 LLM 基础设施监控。

数据来源分为三类:多租户 ATS 平台、第三方职位聚合源,以及企业官网职位源。平台适配器实现统一的 Source 接口,新增公司通常只需在 boards 目录中添加公司、供应商和职位板标识;新增 ATS 则需要编写适配器并注册到 sources.All。

快速开始

# 使用 Docker 构建并启动 API、前端、PostgreSQL、Meilisearch、Redis 和 S3
make up

curl localhost:8080/health
curl localhost:8080/api/v1/jobs

首次初始化 PostgreSQL 数据卷时会自动执行 migrations/ 中的迁移。修改已有迁移后,可使用以下命令重建数据卷,或手动执行待处理迁移:

docker compose down -v && make up
make migrate

8080 端口被占用时可指定其他端口:

HIRE_HOST_PORT=8090 make up

本地开发可仅启动数据库,再在宿主机运行服务:

docker compose up -d db
make run

复制 .env.example 为 .env 后按需调整。JWT_SECRET 为必需配置;OAuth 与 LLM 凭据可选,未设置时相关功能保持禁用。

命令与工作进程

常用命令包括生成 sqlc 代码、整理依赖、连接数据库、重建搜索索引和执行迁移:

make help
make sqlc
make tidy
make psql
make reindex
make migrate

API 服务只负责 HTTP 请求,其余任务由独立的一次性 Worker 执行,可交由定时任务调度:

go run ./cmd/migrate
go run ./cmd/ingest greenhouse
go run ./cmd/enrich
go run ./cmd/embed
go run ./cmd/search-drain
go run ./cmd/reindex
go run ./cmd/tg-ingest
go run ./cmd/tg-extract
go run ./cmd/capture-apply-form
go run ./cmd/backfill-derive

所有 Worker 都需要 DATABASE_URL,失败时返回非零状态。系统不会硬删除职位,生命周期变更采用软关闭。

API 用法

目录提供无需密钥的公开 HTTP API:

curl https://freehire.me/api/v1/jobs

响应统一使用以下结构:

{"data": {}}
{"data": [], "meta": {}}
{"error": "错误信息"}

职位和公司均通过公开 slug 标识。完整端点、筛选参数及认证方式见 freehire.me/docs/api。

添加职位来源

新增企业职位板可通过网站表单提交,或使用命令行工具:

go run ./cmd/add-board \
  --provider=greenhouse \
  --board=example \
  --company=Example \
  --apply

如果企业使用的 ATS 已受支持,通常只需添加一行目录记录;如果平台尚未覆盖,则需在 internal/ingest/sources 中实现新的适配器,并通过 Source 接口注册。新增职位板时,系统会在抓取前依据注册表完成校验。

摘要更新于 2026-10-22 01:09:14 · 原文 17316 字符 · md5 60a9fa1f5892…