一个单机运行的简历工单系统,适合个人或小团队在本机直接处理 PDF / 图片 / 文本简历,完成导入、识别、人工确认、建单、面试推进和基础统计。
当前技术栈固定为:
- Python 3.12
- Django
- SQLite
- Django Templates
- HTMX
默认本机访问地址:http://127.0.0.1:30110
如果你朋友只是想把项目下载下来,然后尽快跑起来,直接照着下面做,不用研究别的。
brew install python@3.12装完后确认一下:
python3.12 --version最推荐:
git clone https://github.com/mmhsdxwdxx/resume-ticket-system.git
cd resume-ticket-system如果他不会用 Git,也可以在 GitHub 页面右上角点 Code -> Download ZIP,下载后解压,再进入项目目录。
也可以在终端执行:
./setup.command它会自动打开一个安装页面。
DJANGO_SECRET_KEY可以直接留空,系统会自动生成MinerU / OpenAI / 阿里云 OCR这些 Key 不确定的话可以先留空- 第一次安装一般要等 1 到 3 分钟,别中途关掉
安装完成后,直接打开:
http://127.0.0.1:30110http://127.0.0.1:30110/welcomehttp://127.0.0.1:30110/healthz
如果 healthz 能看到 status: ok,基本就说明装好了。
./scripts/doctor.sh
./scripts/status_service.sh看不懂报错也没关系,把输出贴给我就行。
- 上传 PDF、图片,或直接粘贴简历文本
- 调用 MinerU Cloud API 做文档解析
- MinerU 结果异常时回退到本地 PDF 文本提取或阿里云 OCR
- 调用 OpenAI 兼容接口做结构化字段预填
- 在待人工确认列表里做快捷建单或人工确认
- 进入工单工作台,推进一面 / 二面 / 三面 / Offer / 入职流程
- 在本机通过
launchd做常驻运行
推荐 macOS + Python 3.12。
如果你的 Mac 还没有 Python 3.12,可以先安装:
brew install python@3.12git clone https://github.com/mmhsdxwdxx/resume-ticket-system.git
cd resume-ticket-system
./setup.command也可以在 Finder 里直接双击项目根目录的 setup.command。
这个一键安装向导会自动:
- 打开浏览器配置页,让你一次性填完常用 Key
- 自动生成或更新
.env - 创建
.venv并安装依赖 - 执行数据库迁移和静态文件收集
- 自动装好本机常驻服务
- 自动把项目跑在
http://127.0.0.1:30110
说明:
- Key 可以先留空,页面照样能打开
- 但如果要用真实 MinerU、真实 LLM、真实阿里云 OCR,还是要填对应配置
./scripts/bootstrap.sh这一步会自动完成:
- 创建
.venv - 安装依赖
- 如果本地没有
.env,自动从.env.example复制 - 执行数据库迁移
- 执行
collectstatic - 执行
manage.py check
如果你想手动启动前台调试:
./scripts/start_local.sh也可以直接执行:
./scripts/open_local.sh停止:
./scripts/stop_local.sh./scripts/doctor.sh第一次接手这个项目的人,建议先看:
docs/FRIEND_QUICKSTART.mdhttp://127.0.0.1:30110/welcome
如果你想让项目在自己电脑上长期挂着,或者朋友下载后想稳定常驻运行,直接用 launchd:
安装常驻服务:
./scripts/install_service.sh查看状态:
./scripts/status_service.sh重启服务:
./scripts/restart_service.sh卸载服务:
./scripts/uninstall_service.sh说明:
- 默认监听
127.0.0.1:30110 - 默认使用
gunicorn + launchd - 登录后自动拉起,异常退出会自动重启
- 所有
launchd产物都会按当前机器路径自动生成,不进 Git
./scripts/bootstrap.sh
./scripts/start_local.sh
./scripts/open_local.sh
./scripts/update_from_github.sh
./scripts/backup_local_data.sh
./scripts/restore_local_data.sh backups/<timestamp>
./scripts/doctor.sh
./scripts/install_service.sh
./scripts/status_service.sh
./scripts/restart_service.sh
./scripts/uninstall_service.sh
./.venv/bin/python manage.py check
./.venv/bin/python manage.py test
./.venv/bin/python manage.py createsuperuser推荐处理顺序:
- 导入简历:
/imports/new - 待人工确认列表:
/imports/review-queue - 工单工作台:
/tickets/ - 工单详情:
/tickets/<id> - 统计页:
/analytics/
更详细的页面使用说明见:
docs/FRIEND_QUICKSTART.mddocs/USER_GUIDE.md
docs/FRIEND_QUICKSTART.md:朋友拿到仓库后的最短上手路径docs/DEVELOPMENT.md:开发说明、目录结构、常用命令、提交流程docs/DEPLOY_MAC.md:另一台 Mac 从零部署指南docs/RELEASE_CHECKLIST.md:发版本前逐条确认的清单docs/ROLLBACK.md:更新后出问题时的回退路径docs/USER_GUIDE.md:页面使用说明
resume-ticket-system/
├── apps/
│ ├── analytics/
│ ├── imports/
│ └── tickets/
├── config/
├── docs/
├── scripts/
├── templates/
├── manage.py
├── requirements.txt
└── README.md
如果你从 GitHub 拉了新代码,最省事的做法是直接执行:
./scripts/update_from_github.sh如果你更喜欢手动更新,也可以:
git pull
./scripts/bootstrap.sh
./scripts/restart_service.sh常驻日志默认写在:
runtime/logs/com.resume-ticket-system.web.stdout.logruntime/logs/com.resume-ticket-system.web.stderr.log
如果页面打不开,建议按顺序检查:
./scripts/doctor.sh
./scripts/status_service.sh如果只是想前台调试,直接执行:
./scripts/start_local.shDJANGO_SECRET_KEY=
DEBUG=True
ALLOWED_HOSTS=127.0.0.1,localhost
MINERU_API_KEY=
MINERU_BASE_URL=https://mineru.net/api/v4
OPENAI_API_KEY=
OPENAI_BASE_URL=
OPENAI_MODEL=
ALIBABA_CLOUD_ACCESS_KEY_ID=
ALIBABA_CLOUD_ACCESS_KEY_SECRET=
ALIBABA_CLOUD_OCR_ENDPOINT=ocr-api.cn-hangzhou.aliyuncs.com这份项目目前优先保证:
- macOS 本机运行稳定
- Python 3.12 环境稳定
- 从 GitHub 拉代码后可按文档直接初始化和启动
当前不承诺:
- Windows 一键兼容
- Linux 下的
launchd常驻部署 - 多机共享同一个 SQLite 数据库
项目提供健康检查地址:
http://127.0.0.1:30110/healthz
正常情况下会返回 JSON,至少包含:
status: okdatabase: ok
这在你朋友排查“服务到底有没有活着”时特别省事。
仓库已经带了 GitHub Actions。
每次 push / pull request 都会自动执行:
manage.py checkmanage.py test
这样你和你朋友在更新代码前后,都更容易判断主分支是不是健康的。
项目现在提供了一个专门给新接手者看的页面:
http://127.0.0.1:30110/welcome
适合你朋友第一次打开时直接照着走。
升级前建议先备份:
./scripts/backup_local_data.sh如果要恢复某次备份:
./scripts/restore_local_data.sh backups/<timestamp>默认会备份:
db.sqlite3media/
备份目录会放在项目根目录下的 backups/,并且不会进 Git。