domainCheck Linux 部署说明
本文档用于将 domain-api 与 domainCheck Worker 部署到 Linux,并由 systemd 托管。
一、建议目录结构
/opt/domaincheck
├── domain-api
├── domain-web
└── domainCheck
说明:
domain-api提供 Web 后台接口domain-web为前端静态文件项目domainCheck保留当前检测核心与 Worker
二、准备 Python 环境
建议使用 Python 3.11。
cd /opt/domaincheck/domainCheck
python3.11 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cd /opt/domaincheck/domain-api
pip install fastapi uvicorn pydantic-settings psycopg2-binary redis openpyxl python-multipart
三、准备配置文件
1. domainCheck/.env
domain-api 默认会读取 /opt/domaincheck/domainCheck/.env。
至少确认下面这些配置正确:
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=domain
DB_USER=postgres
DB_PASSWORD=postgres
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DB=0
2. 可选的 domain-api 环境变量
可以参考 .env.example。
常用项:
API_HOSTAPI_PORTWORKER_MODEWORKER_SERVICE_NAMEAPI_SERVICE_NAMEADMIN_USERNAMEADMIN_PASSWORD
四、先初始化数据库结构
如果 PostgreSQL 使用的是一套新库,必须先执行旧项目里自带的初始化脚本:
cd /opt/domaincheck/domainCheck
python3 init_database.py
这个脚本会创建并补齐当前 API/Worker 依赖的核心业务表和字段,至少包括:
domainsdetect_tasksdomain_blacklistsensitive_wordsdomain_detections
如果这一步没做,API 虽然能启动,但下面这些接口会直接因为表不存在而 500:
/api/v1/dashboard/overview/api/v1/detect/status/api/v1/imports/summary
五、部署 systemd
模板文件:
deploy/systemd/domain-api.servicedeploy/systemd/domain-worker.service
复制到系统目录:
sudo cp /opt/domaincheck/domain-api/deploy/systemd/domain-api.service /etc/systemd/system/domaincheck-api.service
sudo cp /opt/domaincheck/domain-api/deploy/systemd/domain-worker.service /etc/systemd/system/domaincheck-worker.service
然后按实际机器修改:
WorkingDirectoryExecStartUserGroupEnvironment
权限注意
正式 systemd 服务用户必须对下面这些路径有写权限:
domain-api/runtime/domainCheck/detect_worker.log
如果之前曾用 root 手工跑过 API 或 Worker,可能会留下 root 所有者的运行目录或日志文件,导致正式服务态出现下面这类问题:
/api/v1/imports/upload因无法创建runtime/imports/返回500- Worker 因无法写
detect_worker.log进入循环重启
必要时先修正所有者:
sudo chown -R www:www /opt/domaincheck/domain-api/runtime
sudo touch /opt/domaincheck/domainCheck/detect_worker.log
sudo chown www:www /opt/domaincheck/domainCheck/detect_worker.log
sudo chmod 664 /opt/domaincheck/domainCheck/detect_worker.log
六、启动顺序
sudo systemctl daemon-reload
sudo systemctl enable domaincheck-api
sudo systemctl enable domaincheck-worker
sudo systemctl start domaincheck-api
sudo systemctl start domaincheck-worker
查看状态:
sudo systemctl status domaincheck-api
sudo systemctl status domaincheck-worker
查看日志:
journalctl -u domaincheck-api -n 200 --no-pager
journalctl -u domaincheck-worker -n 200 --no-pager
如果计划让 Web 后台里的“运行中心”控制 Worker 启停或触发 API 重启,还需要给服务用户补一条免密 sudo 规则。测试服当前使用的是:
Defaults:www !requiretty
Cmnd_Alias DOMAINCHECK_WORKER_CTL = /usr/bin/systemctl start domaincheck-worker, /usr/bin/systemctl stop domaincheck-worker
Cmnd_Alias DOMAINCHECK_WORKER_SHOW = /usr/bin/systemctl show domaincheck-worker --no-page --property=ActiveState\,SubState\,MainPID
Cmnd_Alias DOMAINCHECK_API_RESTART = /usr/bin/systemctl restart domaincheck-api, /usr/bin/systemctl --no-block restart domaincheck-api
www ALL=(root) NOPASSWD: DOMAINCHECK_WORKER_CTL, DOMAINCHECK_WORKER_SHOW, DOMAINCHECK_API_RESTART
其中 API 自重启建议使用 systemctl --no-block restart domaincheck-api,这样接口可以先返回成功,再由 systemd 异步完成服务切换,避免调用方因为等待自身停机而拿到 500。
七、联调检查
1. API 健康检查
curl http://127.0.0.1:8100/health
期望看到:
status=okworker_mode=linux-systemd
2. Web 后台系统设置
在 Web 后台里确认:
Worker 运行模式 = linux-systemdWorker 服务名 = domaincheck-workerAPI 服务名 = domaincheck-api
3. 运行中心
进入 运行中心,确认:
- API 在线
- Worker 在线
- 进程数大于 0
- 最近启动时间正常
4. 运行 API 自测脚本
cd /opt/domaincheck/domain-api
python deploy/linux/smoke_test.py --base-url http://127.0.0.1:8100
如果同时希望把 Web 首页一起纳入检查:
python deploy/linux/smoke_test.py --base-url http://127.0.0.1:8100 --web-url http://127.0.0.1
八、上线建议
- 先保持
Windows 桌面版 + Web/Linux并行一段时间 - 先让 Web 后台接管设置、导入、筛选、导出、日志
- 再让 Linux Worker 接管主检测任务
- 确认稳定后,再逐步淡出桌面检测端
九、联调诊断采集
如需导出一份联调诊断包,可执行:
cd /opt/domaincheck/domain-api/deploy/linux
bash collect_diagnostics.sh /opt/domaincheck
会输出:
diagnostics_dir=...diagnostics_archive=...
把生成的归档包发回即可继续排障。