推荐用 Docker 一键启动;仅在需要二次开发或无 Docker 环境时,再使用“基于源码”的方式。
端口与静态资源:后端默认监听
http://localhost:38888,并直接提供front/dist作为静态资源目录。
- scripts/up-compose.sh:推荐。构建镜像并通过 docker compose 启动“两容器”模式(browserless/chrome + 本应用),更省内存,浏览器可复用。
- scripts/start.sh:源码 + Docker 的本地启动脚本;先在本机构建前端与镜像,再启动容器。适合本地开发/验证最新改动。(资源占用较高,不再推荐)
- scripts/start-server.sh:纯 Docker + 私有 Hub 的服务器启动脚本;不会构建镜像,不需要源码/Node/Go,仅从仓库拉取镜像并运行,更适合服务器部署。详细见第 6 节。
两容器解耦:
- browserless/chrome:共享 Chromium(端口 3000),预热并复用浏览器进程;
- 本项目镜像:仅 Go 应用 + 静态前端,通过 Playwright
pw.Chromium.Connect以 WebSocket 连接 browserless。
一键启动:
./scripts/up-compose.sh启动完成:
- 应用:http://localhost:38888
- Browserless WS:ws://localhost:3000/playwright
如需手动:docker compose up -d --build(项目已提供 docker-compose.yml)。
对应脚本:scripts/start.sh(本机有源码,先构建前端与镜像,再启动容器)。
前置要求:已安装并启动 Docker 守护进程。
config.yaml:业务配置(关键词、城市、开关等)。.env:敏感变量(AI/Webhook 等)。- 登录 Cookie(二选一):
data/boss/browser_cookie.txt(推荐,直接导出浏览器 Cookie 文本);或data/boss/cookie.json(Playwright cookies JSON)。
提醒:容器内默认无头运行;若缺少 Cookie 将直接退出。首次可在本机用“可视化扫码”方式生成 Cookie(见第 3 节),再把文件挂载给容器。
./scripts/start.sh- 脚本会:构建前端 → 构建镜像 → 以
boss-runner名称启动容器并映射 38888 端口。 - 配置挂载:
config.yaml、.env、data/会被映射到容器/app/…。
查看日志/校验:
docker logs -f boss-runner
# 出现 “投递完成 | 岗位:…” 表示已正常投递docker build -t get_jobs-boss .
docker run -d --name boss-runner --restart unless-stopped \
-p 38888:38888 \
-v "$PWD/config.yaml:/app/config.yaml" \
-v "$PWD/.env:/app/.env" \
-v "$PWD/data:/app/data" \
get_jobs-boss适用于需要调试/二次开发的场景。
- Go ≥ 1.25(见
go.mod) - Node.js ≥ 20 与 npm
(cd front && npm ci && npm run build)
# 方式 A:使用本机/容器的 browserless(推荐)
BROWSERLESS_URL=ws://localhost:3000/playwright?launch=1 go run .
# 方式 B:本地拉起浏览器(仅开发调试,资源占用高)
go run .访问 UI:http://localhost:38888。配置改动会在 ~0.8s 内自动保存到 config.yaml。
两个终端并行:
# 后端 + API(端口 38888),连接本机 browserless
BROWSERLESS_URL=ws://localhost:3000/playwright?launch=1 go run .
# 前端(端口 3000,已代理 /api -> 38888)
(cd front && npm ci && npm run dev)首次需在本地浏览器登录 Boss,并将 Cookie 写入 data/boss/browser_cookie.txt(推荐)或 data/boss/cookie.json;服务器端默认后台静默运行,不会弹出扫码窗口。
- 容器启动即退出:多为 Cookie 缺失。优先提供
data/boss/browser_cookie.txt或先在本机扫码生成data/boss/cookie.json。 - 本机源码运行报 “please install the driver first”:执行
go run github.com/playwright-community/playwright-go/cmd/playwright@v0.5200.1 install chromium
- 端口冲突:默认硬编码 38888;源码模式可改
main.go后重编译;Docker 可仅改宿主映射端口-p <host>:38888。 - AI 401/403:检查
.env的BASE_URL、API_KEY、MODEL。
front/前端源码(Vite + React + Tailwind);生产构建输出front/distinternal/api/server.go后端 API 与静态资源服务internal/boss/*投递自动化流程(Playwright)internal/config/*配置加载/映射、.envinternal/ai/*AI 客户端;internal/bot/*企业微信推送config.yaml业务配置;.env敏感变量;data/boss/*登录与状态文件
更多细节与高级用法,见 README.md。
对应脚本:scripts/start-server.sh(纯 Docker + Hub 拉取;服务器无需源码/Node/Go,更适合服务器)。
当你有一台私有镜像仓库(例如 Gitea Packages,或任意 Docker Registry v2)时,可以直接把本项目镜像推送到私有 Hub,并在服务器上“一键拉起”。本节不替换现有方案,仅作为补充。
- 默认目标:
118.196.16.11:48080/anner/<repo>:latest(与 cortex 项目一致)。 - 推送后将清理仓库中除
latest外的其它标签,避免堆积。
准备一次登录(若仓库需要):
docker login 118.196.16.11:48080
# 如为 HTTP 非 TLS 的私库,Docker 守护进程需信任 insecure registry(见 6.4)。构建并推送:
# 可选覆盖:REGISTRY/NAMESPACE/REPO/PLATFORMS
export GITEA_USERNAME=你的账号
export GITEA_PASSWORD=你的密码
./scripts/build-and-push.sh \
--registry 118.196.16.11:48080 \
--namespace anner \
--repo get_jobs # 不填则默认使用当前目录名提示(更新):Dockerfile 已按 TARGETARCH/TARGETOS 适配,脚本默认多架构构建 linux/amd64,linux/arm64;如需扩展平台,可通过 --platform 指定。
在服务器工作目录准备 3 个文件/目录(挂载为容器内 /app/*):
config.yaml.envdata/boss/browser_cookie.txt(或data/boss/cookie.json)
# 先登录到私有仓库(如果需要)
docker login 118.196.16.11:48080
# 自动 pull 并启动(不存在则跳过 pull;会根据宿主机架构选择合适平台)
./scripts/start-server.sh \
--registry 118.196.16.11:48080 \
--namespace anner \
--repo get_jobs \
--port 38888 # 如需变更宿主端口,自行修改此值脚本会:
- 校验
config.yaml、.env以及 Cookie 文件是否就绪; - 拉取
latest镜像(如果远端存在); - 以
boss-runner容器名启动,映射端口HOST:38888,并挂载config.yaml/.env/data; - 实时输出最近 50 行日志。
若你的私库是纯 HTTP(如 118.196.16.11:48080),需要让 Docker 守护进程信任该地址:
Linux:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json >/dev/null <<'JSON'
{
"insecure-registries": ["118.196.16.11:48080"]
}
JSON
sudo systemctl restart dockermacOS(Docker Desktop):Preferences -> Docker Engine,加入:
{"insecure-registries": ["118.196.16.11:48080"]}docker pull 118.196.16.11:48080/anner/get_jobs:latest
docker run -d --name boss-runner --restart unless-stopped \
-p 38888:38888 \
--env-file ./.env \
-v "$PWD/config.yaml:/app/config.yaml:ro" \
-v "$PWD/.env:/app/.env:ro" \
-v "$PWD/data:/app/data" \
118.196.16.11:48080/anner/get_jobs:latest- 无法
docker pull:优先确认已docker login,以及是否已配置 insecure registry(见 6.4)。 - 推送后仍有旧标签:确认执行
./scripts/build-and-push.sh时设置了GITEA_USERNAME/GITEA_PASSWORD,脚本会调用 Gitea API 删除非latest标签。 - 端口冲突:修改
--port或手动-p <host>:38888;后端监听端口固定 38888。 - 架构不匹配:默认只构建
amd64;如为 ARM 服务器请按 6.1 的提示改造 Dockerfile 并以 multi‑arch 方式构建。