Job Seek 是一个开源的求职信息聚合平台
📦 Job Seek 详细部署教程
Job Seek 是一个开源的求职信息聚合平台,它监控超过 5,300 家公司的官方招聘页面和 ATS 系统,将职位信息规范化后,通过一个统一的仪表板呈现,方便你搜索和追踪。
重要提示:Job Seek 是一个面向开发者和高级用户的自托管系统。它不是一个一键安装的应用,而是由多个分布式服务组成的系统,部署和维护需要一定的技术背景。不建议没有运维经验的用户尝试。
⚙️ 部署前准备
Job Seek 由多个组件构成,在开始前,你需要准备并配置好以下完整的基础设施:
| 组件 | 用途 | 备注 |
|---|---|---|
| PostgreSQL 数据库 (两个) | 一个给爬虫使用,一个给 Web 应用使用。 | 可运行在同一服务器,但需不同的数据库名。 |
| Redis | 用于爬虫的调度和缓存。 | 必需。 |
| Typesense | 搜索引擎,提供快速的职位搜索。 | 必需。 |
| S3 兼容对象存储 | 存储完整的职位描述文本。 | 例如 MinIO、AWS S3、Cloudflare R2。 |
| Python 3.13+ | 爬虫运行环境。 | 建议使用 uv 管理。 |
| Node.js 22+ | Web 应用运行环境。 | 建议使用 pnpm 管理。 |
环境变量配置
你需要为爬虫 (apps/crawler/.env.local) 和 Web 应用 (apps/web/.env.local) 分别创建配置文件。核心环境变量如下:
爬虫侧 (apps/crawler/.env.local)
1 | # 数据库 |
Web 应用侧 (apps/web/.env.local)
1 | # 数据库 |
🚀 部署步骤
步骤 1: 克隆仓库与安装依赖
1 | git clone https://github.com/colophon-group/jobseek.git |
步骤 2: 初始化 Web 应用数据库
1 | cd apps/web |
步骤 3: 初始化爬虫数据库及搜索索引
1 | cd ../crawler |
步骤 4: 启动爬虫服务
爬虫需要运行四个常驻进程,建议使用 systemd 或 supervisor 管理。在 apps/crawler 目录下,分别启动:
1 | uv run crawler run # HTTP 工作进程 |
步骤 5: 启动 Web 应用 (开发/测试模式)
1 | # 回到项目根目录 |
Web 应用默认运行在 http://localhost:3000。
🧩 高级功能与用法
使用托管 MCP 服务器 (无需自托管)
Job Seek 提供了一个托管的 MCP (模型上下文协议) 服务器,供 AI 工具直接访问职位数据,无需你自行部署。
- 端点:
https://jseek.co/mcp - 使用方式:在支持 MCP 的客户端(如 Claude Desktop、Codex)中,将此 URL 添加为自定义 MCP 连接器。或通过
npx @jseek/mcp-server在本地运行。
添加新公司 (贡献)
项目通过 GitHub Issue 管理公司添加请求。如果你希望添加一个公司,可以:
- 创建一个新的
company-request标签的 Issue。 - 项目使用一个自动化的
ws工具来处理请求。贡献者可以运行ws task --issue <编号>来引导一个编码代理完成研究、验证和提交 PR 的整个流程。
❓ 常见问题与排查建议
- 部署复杂度过高:如果以上步骤让你感到困难,说明 Job Seek 的自托管门槛较高。一个替代方案是直接使用官方提供的 托管服务 jseek.co。
- 爬虫无法工作:
- 检查所有外部服务(Postgres, Redis, Typesense, S3)的网络连通性和凭证。
- 查看爬虫日志,确认 Playwright 浏览器已正确安装。
- 确保
crawler sync命令成功执行,同步了公司配置。
- Typesense 搜索无结果:
- 确认
crawler export进程正在运行,负责将数据从 Postgres 同步到 Typesense。 - 检查 Typesense 服务状态和集合是否存在。
- 确认
- 权限与密钥:仔细检查
.env.local文件中的密钥,特别是 Typesense 的OPERATIONS_KEY和SEARCH_KEY权限级别是否正确。
更详细的架构说明、运维手册和故障恢复指南,请务必查阅项目 docs/ 目录下的文档。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 极客的赛博空间 | 专注 AI 与技术分享!
评论



