Files
getDomain/domain-api/deploy/linux
Your Name ebf632e651 first
2026-04-16 21:35:47 +08:00
..
dev
2026-04-16 13:05:07 +08:00
2026-04-16 21:35:47 +08:00
dev
2026-04-16 13:05:07 +08:00

domainCheck Linux 部署说明

本文档用于将 domain-apidomainCheck 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_HOST
  • API_PORT
  • WORKER_MODE
  • WORKER_SERVICE_NAME
  • API_SERVICE_NAME
  • ADMIN_USERNAME
  • ADMIN_PASSWORD

四、先初始化数据库结构

如果 PostgreSQL 使用的是一套新库,必须先执行旧项目里自带的初始化脚本:

cd /opt/domaincheck/domainCheck
python3 init_database.py

这个脚本会创建并补齐当前 API/Worker 依赖的核心业务表和字段,至少包括:

  • domains
  • detect_tasks
  • domain_blacklist
  • sensitive_words
  • domain_detections

如果这一步没做API 虽然能启动,但下面这些接口会直接因为表不存在而 500

  • /api/v1/dashboard/overview
  • /api/v1/detect/status
  • /api/v1/imports/summary

五、部署 systemd

模板文件:

  • deploy/systemd/domain-api.service
  • deploy/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

然后按实际机器修改:

  • WorkingDirectory
  • ExecStart
  • User
  • Group
  • Environment

权限注意

正式 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=ok
  • worker_mode=linux-systemd

2. Web 后台系统设置

在 Web 后台里确认:

  • Worker 运行模式 = linux-systemd
  • Worker 服务名 = domaincheck-worker
  • API 服务名 = 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=...

把生成的归档包发回即可继续排障。