debug
This commit is contained in:
@@ -350,14 +350,14 @@ DOMAIN_ROOT=/opt/domaincheck/domainCheck
|
||||
NODE_CODE=overseas-control-01
|
||||
NODE_REGION=overseas
|
||||
NODE_ROLE=control
|
||||
CORS_ORIGINS=http://127.0.0.1:3201,http://localhost:3201,http://你的服务器IP:3201
|
||||
CORS_ORIGINS='["http://127.0.0.1:3201","http://localhost:3201","http://你的服务器IP:3201"]'
|
||||
SYNC_PUSH_ENABLED=false
|
||||
```
|
||||
|
||||
如果你已经固定域名,建议直接改成:
|
||||
|
||||
```env
|
||||
CORS_ORIGINS=https://admin.domain,http://127.0.0.1:3201,http://localhost:3201
|
||||
CORS_ORIGINS='["https://admin.domain","http://127.0.0.1:3201","http://localhost:3201"]'
|
||||
```
|
||||
|
||||
### 10. 修正权限
|
||||
|
||||
@@ -63,6 +63,7 @@ NODE_NVM_DIR=
|
||||
最少必须先替换这 5 个:
|
||||
|
||||
- `DB_PASSWORD`
|
||||
- `REDIS_PASSWORD`
|
||||
- `SYNC_SHARED_TOKEN`
|
||||
- `API_DOMAIN`
|
||||
- `ADMIN_DOMAIN`
|
||||
@@ -256,6 +257,49 @@ nvm use 20
|
||||
- `/usr/local/nvm`
|
||||
- 最后再尝试系统全局 `node` 和 `npm`
|
||||
|
||||
### 6.2 国内机器已经装了宝塔怎么办
|
||||
|
||||
结论:
|
||||
|
||||
- 不需要为了接入 `controller` / `worker` 专门重装系统
|
||||
- 机器上已经有宝塔,不等于这台机器不能继续用
|
||||
- 关键不是“有没有宝塔”,而是“不要让宝塔深度接管项目服务”
|
||||
|
||||
推荐做法:
|
||||
|
||||
- 保留宝塔本身
|
||||
- 如果你已经习惯用宝塔管理:
|
||||
- `PostgreSQL`
|
||||
- `Redis`
|
||||
- 防火墙 / 端口
|
||||
- 证书
|
||||
这些可以继续保留
|
||||
- 但项目服务仍然统一交给 `systemd`
|
||||
- `domaincheck-worker`
|
||||
- `domaincheck-sync-agent`
|
||||
- 不要把这些项目服务交给宝塔的守护进程或计划任务反复接管
|
||||
|
||||
对于国内 `controller`:
|
||||
|
||||
- 已装宝塔可以继续用
|
||||
- Redis / PostgreSQL 可以继续由宝塔安装和管理
|
||||
- 但 `domaincheck-worker` / `domaincheck-sync-agent` 仍建议走 `systemd`
|
||||
|
||||
对于国内 `worker`:
|
||||
|
||||
- 已装宝塔也不用重装
|
||||
- 但尽量不要再给它额外配置站点、反代、复杂 PHP/Node 面板功能
|
||||
- 把它当普通 Linux 节点使用即可
|
||||
- 核心目标就是稳定运行 `domaincheck-worker`
|
||||
|
||||
只有在下面这些情况,才建议考虑重装:
|
||||
|
||||
- 机器上历史站点和旧服务太多,端口冲突严重
|
||||
- Redis / PostgreSQL / Nginx 已经被旧项目改得很乱
|
||||
- 系统里残留环境过多,你自己也不再信任这台机器的稳定性
|
||||
|
||||
如果只是“已经装了宝塔”,但系统仍然清晰可控,就不建议为了这个项目重装。
|
||||
|
||||
### 7. 你实际应该怎么选
|
||||
|
||||
- 如果国外主控机已经是宝塔机:
|
||||
@@ -404,92 +448,38 @@ bash /www/wwwroot/getDomain/domain-api/deploy/multi-region/install_overseas_quic
|
||||
- 这条脚本不会执行 `git pull`
|
||||
- 你要先自己把 `/www/wwwroot/getDomain` 更新到目标版本,再跑脚本
|
||||
- 这条脚本会自动过滤 Windows-only Python 依赖
|
||||
- 这条脚本会自动把 `CORS_ORIGINS` 写成 systemd 可用的安全格式
|
||||
- 这条脚本结束时会自动执行:`chown -R www:www /www/wwwroot/getDomain`
|
||||
|
||||
```bash
|
||||
cd /www/wwwroot/getDomain
|
||||
git fetch --all
|
||||
git checkout GIT_BRANCH
|
||||
git pull --ff-only origin GIT_BRANCH
|
||||
|
||||
mkdir -p /opt/domaincheck
|
||||
ln -sfn /www/wwwroot/getDomain/domain-api /opt/domaincheck/domain-api
|
||||
ln -sfn /www/wwwroot/getDomain/domain-web /opt/domaincheck/domain-web
|
||||
ln -sfn /www/wwwroot/getDomain/domainCheck /opt/domaincheck/domainCheck
|
||||
|
||||
cd /opt/domaincheck/domainCheck
|
||||
python3.11 -m venv .venv || true
|
||||
source .venv/bin/activate
|
||||
pip install --upgrade pip
|
||||
pip install -r requirements.txt
|
||||
/opt/domaincheck/domainCheck/.venv/bin/pip install fastapi uvicorn pydantic-settings psycopg2-binary redis openpyxl python-multipart
|
||||
|
||||
cat >/opt/domaincheck/domainCheck/.env <<EOF
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=5432
|
||||
DB_DATABASE=domain
|
||||
DB_USER=domainuser
|
||||
DB_PASSWORD=DB_PASSWORD
|
||||
|
||||
REDIS_HOST=127.0.0.1
|
||||
REDIS_PORT=6379
|
||||
REDIS_PASSWORD=
|
||||
REDIS_DB=0
|
||||
EOF
|
||||
|
||||
/opt/domaincheck/domainCheck/.venv/bin/python /opt/domaincheck/domainCheck/init_database.py
|
||||
|
||||
cat >/opt/domaincheck/domain-web/.env.production <<EOF
|
||||
VITE_API_BASE_URL=https://API_DOMAIN/api/v1
|
||||
EOF
|
||||
|
||||
export NVM_DIR="$HOME/.nvm"
|
||||
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
|
||||
nvm install NODE_VERSION
|
||||
nvm use NODE_VERSION
|
||||
|
||||
cd /opt/domaincheck/domain-web
|
||||
npm install
|
||||
npm run build
|
||||
|
||||
cp /opt/domaincheck/domain-api/deploy/multi-region/templates/domaincheck-api.env.example /etc/default/domaincheck-api
|
||||
sed -i 's#^DOMAIN_ROOT=.*#DOMAIN_ROOT=/opt/domaincheck/domainCheck#' /etc/default/domaincheck-api
|
||||
sed -i 's#^API_HOST=.*#API_HOST=0.0.0.0#' /etc/default/domaincheck-api
|
||||
sed -i 's#^API_PORT=.*#API_PORT=8100#' /etc/default/domaincheck-api
|
||||
sed -i 's#^NODE_CODE=.*#NODE_CODE=OVERSEAS_NODE_CODE#' /etc/default/domaincheck-api
|
||||
sed -i 's#^NODE_REGION=.*#NODE_REGION=overseas#' /etc/default/domaincheck-api
|
||||
sed -i 's#^NODE_ROLE=.*#NODE_ROLE=control#' /etc/default/domaincheck-api
|
||||
sed -i 's#^SYNC_PUSH_ENABLED=.*#SYNC_PUSH_ENABLED=false#' /etc/default/domaincheck-api
|
||||
sed -i 's#^CORS_ORIGINS=.*#CORS_ORIGINS=https://ADMIN_DOMAIN,http://127.0.0.1:3201,http://localhost:3201#' /etc/default/domaincheck-api
|
||||
|
||||
cp /opt/domaincheck/domain-api/deploy/systemd/domain-api.service /etc/systemd/system/domaincheck-api.service
|
||||
cp /opt/domaincheck/domain-api/deploy/systemd/domain-worker.service /etc/systemd/system/domaincheck-worker.service
|
||||
|
||||
mkdir -p /opt/domaincheck/domain-api/runtime
|
||||
touch /opt/domaincheck/domainCheck/detect_worker.log
|
||||
chown -R www:www /opt/domaincheck/domain-api/runtime
|
||||
chown www:www /opt/domaincheck/domainCheck/detect_worker.log
|
||||
chmod 664 /opt/domaincheck/domainCheck/detect_worker.log
|
||||
|
||||
systemctl daemon-reload
|
||||
systemctl enable domaincheck-api
|
||||
systemctl enable domaincheck-worker
|
||||
systemctl restart domaincheck-api
|
||||
systemctl restart domaincheck-worker
|
||||
|
||||
hostname
|
||||
systemctl status domaincheck-api --no-pager -l
|
||||
systemctl status domaincheck-worker --no-pager -l
|
||||
curl http://127.0.0.1:8100/health
|
||||
curl http://127.0.0.1:8100/api/v1/runtime/preflight
|
||||
curl http://127.0.0.1:8100/api/v1/runtime/readiness
|
||||
```
|
||||
|
||||
判断标准:
|
||||
|
||||
- `health.status=ok`
|
||||
- `runtime/preflight.data.ok=true`
|
||||
- 如果此时还没有接入大陆 `controller` / `worker`,`runtime/readiness.data.status=attention` 是正常现象
|
||||
- 只有国外机自己的 PostgreSQL、Redis、API、systemd 报错时,才算国外主控机没部署好
|
||||
|
||||
### 2. 国内 controller 最短复制块
|
||||
|
||||
先把下面 3 个值替换掉再执行:
|
||||
先把下面 5 个值替换掉再执行:
|
||||
|
||||
```text
|
||||
DB_NAME
|
||||
DB_USER
|
||||
DB_PASSWORD
|
||||
REDIS_PASSWORD
|
||||
SYNC_SHARED_TOKEN
|
||||
MAINLAND_CONTROLLER_NODE_CODE
|
||||
TARGET_API_BASE_URL
|
||||
```
|
||||
|
||||
也可以直接改脚本头部变量后执行:
|
||||
@@ -511,72 +501,9 @@ bash /www/wwwroot/getDomain/domain-api/deploy/multi-region/install_mainland_cont
|
||||
- 这条脚本结束时会自动执行:`chown -R www:www /www/wwwroot/getDomain`
|
||||
|
||||
```bash
|
||||
cd /www/wwwroot/getDomain
|
||||
git fetch --all
|
||||
git checkout GIT_BRANCH
|
||||
git pull --ff-only origin GIT_BRANCH
|
||||
|
||||
mkdir -p /opt/domaincheck
|
||||
ln -sfn /www/wwwroot/getDomain/domain-api /opt/domaincheck/domain-api
|
||||
ln -sfn /www/wwwroot/getDomain/domain-web /opt/domaincheck/domain-web
|
||||
ln -sfn /www/wwwroot/getDomain/domainCheck /opt/domaincheck/domainCheck
|
||||
|
||||
cd /opt/domaincheck/domainCheck
|
||||
python3.11 -m venv .venv || true
|
||||
source .venv/bin/activate
|
||||
pip install --upgrade pip
|
||||
pip install -r requirements.txt
|
||||
/opt/domaincheck/domainCheck/.venv/bin/pip install fastapi uvicorn pydantic-settings psycopg2-binary redis openpyxl python-multipart
|
||||
|
||||
cat >/opt/domaincheck/domainCheck/.env <<EOF
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=5432
|
||||
DB_DATABASE=domain
|
||||
DB_USER=domainuser
|
||||
DB_PASSWORD=DB_PASSWORD
|
||||
|
||||
REDIS_HOST=127.0.0.1
|
||||
REDIS_PORT=6379
|
||||
REDIS_PASSWORD=
|
||||
REDIS_DB=0
|
||||
EOF
|
||||
|
||||
cd /opt/domaincheck/domain-api
|
||||
bash deploy/multi-region/bootstrap_mainland.sh /opt/domaincheck controller
|
||||
|
||||
cat >/etc/default/domaincheck-worker <<EOF
|
||||
WORKER_MODE=linux-systemd
|
||||
QT_QPA_PLATFORM=offscreen
|
||||
NODE_CODE=MAINLAND_CONTROLLER_NODE_CODE
|
||||
NODE_REGION=mainland
|
||||
NODE_ROLE=control
|
||||
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=5432
|
||||
DB_DATABASE=domain
|
||||
DB_USER=domainuser
|
||||
DB_PASSWORD=DB_PASSWORD
|
||||
|
||||
REDIS_HOST=127.0.0.1
|
||||
REDIS_PORT=6379
|
||||
REDIS_PASSWORD=
|
||||
REDIS_DB=0
|
||||
|
||||
SYNC_PUSH_ENABLED=true
|
||||
SYNC_SOURCE_REGION=mainland
|
||||
SYNC_TARGET_REGION=overseas
|
||||
SYNC_TARGET_API_BASE_URL=https://api.domain.com/api/v1
|
||||
SYNC_SHARED_TOKEN=SYNC_SHARED_TOKEN
|
||||
SYNC_BATCH_SIZE=200
|
||||
SYNC_POLL_INTERVAL_SECONDS=30
|
||||
EOF
|
||||
|
||||
systemctl daemon-reload
|
||||
systemctl enable domaincheck-worker
|
||||
systemctl enable domaincheck-sync-agent
|
||||
systemctl restart domaincheck-worker
|
||||
systemctl restart domaincheck-sync-agent
|
||||
|
||||
hostname
|
||||
systemctl status domaincheck-worker --no-pager -l
|
||||
systemctl status domaincheck-sync-agent --no-pager -l
|
||||
cd /opt/domaincheck/domain-api
|
||||
bash deploy/multi-region/check_mainland_controller.sh
|
||||
```
|
||||
@@ -584,12 +511,17 @@ bash deploy/multi-region/check_mainland_controller.sh
|
||||
### 3. 国内 worker 最短复制块
|
||||
|
||||
先把下面 4 个值替换掉再执行:
|
||||
先把下面 7 个值替换掉再执行:
|
||||
|
||||
```text
|
||||
DB_NAME
|
||||
DB_USER
|
||||
DB_PASSWORD
|
||||
REDIS_PASSWORD
|
||||
SYNC_SHARED_TOKEN
|
||||
MAINLAND_WORKER_NODE_CODE
|
||||
MAINLAND_CONTROLLER_IP
|
||||
TARGET_API_BASE_URL
|
||||
```
|
||||
|
||||
也可以直接改脚本头部变量后执行:
|
||||
@@ -611,69 +543,8 @@ bash /www/wwwroot/getDomain/domain-api/deploy/multi-region/install_mainland_work
|
||||
- 这条脚本结束时会自动执行:`chown -R www:www /www/wwwroot/getDomain`
|
||||
|
||||
```bash
|
||||
cd /www/wwwroot/getDomain
|
||||
git fetch --all
|
||||
git checkout GIT_BRANCH
|
||||
git pull --ff-only origin GIT_BRANCH
|
||||
|
||||
mkdir -p /opt/domaincheck
|
||||
ln -sfn /www/wwwroot/getDomain/domain-api /opt/domaincheck/domain-api
|
||||
ln -sfn /www/wwwroot/getDomain/domain-web /opt/domaincheck/domain-web
|
||||
ln -sfn /www/wwwroot/getDomain/domainCheck /opt/domaincheck/domainCheck
|
||||
|
||||
cd /opt/domaincheck/domainCheck
|
||||
python3.11 -m venv .venv || true
|
||||
source .venv/bin/activate
|
||||
pip install --upgrade pip
|
||||
pip install -r requirements.txt
|
||||
/opt/domaincheck/domainCheck/.venv/bin/pip install fastapi uvicorn pydantic-settings psycopg2-binary redis openpyxl python-multipart
|
||||
|
||||
cat >/opt/domaincheck/domainCheck/.env <<EOF
|
||||
DB_HOST=MAINLAND_CONTROLLER_IP
|
||||
DB_PORT=5432
|
||||
DB_DATABASE=domain
|
||||
DB_USER=domainuser
|
||||
DB_PASSWORD=DB_PASSWORD
|
||||
|
||||
REDIS_HOST=MAINLAND_CONTROLLER_IP
|
||||
REDIS_PORT=6379
|
||||
REDIS_PASSWORD=
|
||||
REDIS_DB=0
|
||||
EOF
|
||||
|
||||
cd /opt/domaincheck/domain-api
|
||||
bash deploy/multi-region/bootstrap_mainland.sh /opt/domaincheck worker
|
||||
|
||||
cat >/etc/default/domaincheck-worker <<EOF
|
||||
WORKER_MODE=linux-systemd
|
||||
QT_QPA_PLATFORM=offscreen
|
||||
NODE_CODE=MAINLAND_WORKER_NODE_CODE
|
||||
NODE_REGION=mainland
|
||||
NODE_ROLE=worker
|
||||
|
||||
DB_HOST=MAINLAND_CONTROLLER_IP
|
||||
DB_PORT=5432
|
||||
DB_DATABASE=domain
|
||||
DB_USER=domainuser
|
||||
DB_PASSWORD=DB_PASSWORD
|
||||
|
||||
REDIS_HOST=MAINLAND_CONTROLLER_IP
|
||||
REDIS_PORT=6379
|
||||
REDIS_PASSWORD=
|
||||
REDIS_DB=0
|
||||
|
||||
SYNC_PUSH_ENABLED=true
|
||||
SYNC_SOURCE_REGION=mainland
|
||||
SYNC_TARGET_REGION=overseas
|
||||
SYNC_TARGET_API_BASE_URL=https://api.domain.com/api/v1
|
||||
SYNC_SHARED_TOKEN=SYNC_SHARED_TOKEN
|
||||
SYNC_BATCH_SIZE=200
|
||||
SYNC_POLL_INTERVAL_SECONDS=30
|
||||
EOF
|
||||
|
||||
systemctl daemon-reload
|
||||
systemctl enable domaincheck-worker
|
||||
systemctl restart domaincheck-worker
|
||||
hostname
|
||||
systemctl status domaincheck-worker --no-pager -l
|
||||
```
|
||||
|
||||
## 五、所有机器先执行一次
|
||||
@@ -877,7 +748,7 @@ sed -i 's#^NODE_CODE=.*#NODE_CODE=overseas-control-01#' /etc/default/domaincheck
|
||||
sed -i 's#^NODE_REGION=.*#NODE_REGION=overseas#' /etc/default/domaincheck-api
|
||||
sed -i 's#^NODE_ROLE=.*#NODE_ROLE=control#' /etc/default/domaincheck-api
|
||||
sed -i 's#^SYNC_PUSH_ENABLED=.*#SYNC_PUSH_ENABLED=false#' /etc/default/domaincheck-api
|
||||
sed -i 's#^CORS_ORIGINS=.*#CORS_ORIGINS=https://admin.domain,http://127.0.0.1:3201,http://localhost:3201#' /etc/default/domaincheck-api
|
||||
sed -i 's#^CORS_ORIGINS=.*#CORS_ORIGINS='\''["https://admin.domain","http://127.0.0.1:3201","http://localhost:3201"]'\''#' /etc/default/domaincheck-api
|
||||
```
|
||||
|
||||
### 9. 安装 systemd
|
||||
@@ -976,6 +847,13 @@ cd /opt/domaincheck/domain-api/deploy/linux
|
||||
python3 smoke_test.py --base-url http://127.0.0.1:8100
|
||||
```
|
||||
|
||||
结果解释:
|
||||
|
||||
- `runtime/preflight.data.ok=true` 说明国外主控机自身部署已经通过
|
||||
- 如果此时 `runtime/readiness.data.status=attention`,而提示内容是“尚未观察到在线的大陆 controller / worker 节点”,这是正常现象
|
||||
- `RedisBloom` 出现降级告警不算阻塞项,只是性能优化项
|
||||
- 只有国外机自己的 PostgreSQL、Redis、systemd、DOMAIN_ROOT、API 启动失败时,才算国外主控机没收口
|
||||
|
||||
## 七、国内 controller 一键部署
|
||||
|
||||
这一节默认你是:
|
||||
@@ -1185,6 +1063,14 @@ systemctl restart domaincheck-worker
|
||||
systemctl restart nginx
|
||||
```
|
||||
|
||||
如果国外机 Redis 只做本机运行态使用,并且当前 Redis 没有密码,记得保持:
|
||||
|
||||
```bash
|
||||
sed -i 's#^REDIS_PASSWORD=.*#REDIS_PASSWORD=#' /opt/domaincheck/domainCheck/.env
|
||||
systemctl restart domaincheck-api
|
||||
systemctl restart domaincheck-worker
|
||||
```
|
||||
|
||||
### 国内 controller
|
||||
|
||||
```bash
|
||||
|
||||
Reference in New Issue
Block a user