6.4 KiB
6.4 KiB
线上测试环境部署(1Panel + alibaba 库 + OpenResty 站点)
实际部署方案(2026-07-17)。对应 spec §11.2「测试环境:公网 IP + 端口 + HTTP」。
目标服务器
- 公网 IP:
219.157.255.213,Ubuntu 24.04,主机kt-W580G20 - 登录用户:
kt(sudo 免密,不在 docker 组但sudo docker可用) - 已装:Docker 28.0.1 + compose v2.33.1、Node v20(前端 build 用 docker node 镜像)
- 镜像加速:
/etc/docker/daemon.json→https://docker.1panel.live - 已有 1Panel + OpenResty(管理所有站点,占 80/443)
SSH 访问(本机 → 服务器)
- 本机密钥:
C:\Users\30997\.ssh\alibb_deploy(ed25519,无 passphrase) - 连接(用 Windows 自带 OpenSSH,Git Bash 的 ssh 因私钥权限 644 被拒):
/c/Windows/System32/OpenSSH/ssh.exe -i 'C:\Users\30997\.ssh\alibb_deploy' kt@219.157.255.213 '...' - 或本机
~/.ssh/config加别名(Windows 路径 IdentityFile):Host alibb HostName 219.157.255.213 User kt IdentityFile C:\Users\30997\.ssh\alibb_deploy
架构
浏览器 ──http:23010──► 1Panel OpenResty 站点(alibb)
├─ / → 站点 index(前端 dist 静态)
└─ /api/* → backend 容器(:8080)
后端容器(alibb-backend,Express)──► 1Panel MySQL(alibaba 库,:3306)
扩展(抓 alibaba)──POST──► http://219.157.255.213:23010/api/ingest
- 后端:
~/alibb-server/backend,docker compose(backend 服务,build 本地 Dockerfile,映射 127.0.0.1:8080)。连 1Panel 已有的 MySQL(容器1Panel-mysql-sLiG,库alibaba,密码wecbni5zRRnZrMMh)。env:JWT_SECRET/INGEST_TOKEN/ADMIN_PASSWORD 强随机(存服务器~/alibb-secrets.txt)。 - 前端:
~/alibb-server/frontend,docker build 出 dist → 复制到 1Panel 站点目录/opt/1panel/apps/openresty/openresty/www/sites/alibb/index。用 1Panel 的 OpenResty serve(不再单独起 nginx 容器)。 - 站点:1Panel 建的「alibb」站点,
listen 23010,server_name 219.157.255.213,root = 站点 index,/api反代到backend:8080(容器名),try_filesSPA fallback,client_max_body_size 50m。站点 conf 在/opt/1panel/apps/openresty/openresty/conf/conf.d/alibb.conf(1Panel 管理,改后要在面板重载 OpenResty,别手改被覆盖)。 - 访问:http://219.157.255.213:23010(admin / ADMIN_PASSWORD)
部署步骤(从零)
1. SSH 密钥(本机生成 + 上传 kt)
# 本机 Git Bash 生成
ssh-keygen -t ed25519 -f ~/.ssh/alibb_deploy -N ""
# 上传到 kt(用密码)
/c/Windows/System32/OpenSSH/scp.exe -i ... ~/.ssh/alibb_deploy.pub kt@219.157.255.213:... # 或 ssh-copy-id
2. 传代码(本机 → 服务器 ~/alibb-server)
cd /d && tar -czf ~/alibb-server.tgz --exclude='alibb-server/*/node_modules' --exclude='*/dist' --exclude='*/.git' alibb-server
/c/Windows/System32/OpenSSH/scp.exe -i ... 'C:\Users\30997\alibb-server.tgz' kt@219.157.255.213:/tmp/
# 服务器解压
... 'tar xzf /tmp/alibb-server.tgz -C ~'
3. 后端 build + up(连 alibaba 库)
cd ~/alibb-server/backend
# 生成线上密钥(替换 compose dev 值)
JWT_SECRET=$(openssl rand -hex 32); INGEST_TOKEN=$(openssl rand -hex 24); ADMIN_PASSWORD=$(openssl rand -hex 16)
sed -i -e "s/dev-ingest-token-1234/$INGEST_TOKEN/" -e "s/dev-jwt-secret-1234/$JWT_SECRET/" -e "s/admin-password-1234/$ADMIN_PASSWORD/" docker-compose.yml
# compose 改成连 1Panel mysql(alibaba 库)+ backend 端口映射 127.0.0.1:8080
sudo docker compose build backend
sudo docker compose up -d
4. 前端 build → 复制站点
cd ~/alibb-server/frontend
sudo docker run --rm -v "$PWD":/app -w /app node:22-alpine sh -c 'npm ci && npm run build'
SITE=/opt/1panel/apps/openresty/openresty/www/sites/alibb/index
sudo rm -rf "$SITE"/* && sudo cp -r dist/. "$SITE"/ && sudo chmod -R a+rX "$SITE"
5. 站点 conf(1Panel 面板配或 alibb.conf)
1Panel 面板建站点「alibb」(域名/IP 219.157.255.213,端口 23010,根目录 = 站点 index),再配:
- 伪静态:
try_files $uri $uri/ /index.html;(SPA 路由刷新) - 反向代理:
/api/→http://backend:8080(容器名,同 docker 网络;或http://127.0.0.1:8080) - 或直接编辑
alibb.conf(root +/apiproxy + try_files + client_max_body_size 50m),面板重载 OpenResty。
6. 安全组放 23010(云控制台)
TCP 23010 入站;服务器防火墙 sudo ufw allow 23010/tcp(若开)。
7. 验证
curl http://219.157.255.213:23010/ # 200(index.html)
curl http://219.157.255.213:23010/inquiries # 200(SPA fallback)
curl http://219.157.255.213:23010/api/health # {"ok":true}
浏览器开 http://219.157.255.213:23010 → admin / ADMIN_PASSWORD 登录。
8. 扩展配置
popup:serverUrl http://219.157.255.213:23010 + token(~/alibb-secrets.txt 的 INGEST_TOKEN)→ 授权 → 启用推送 → 抓取。
增量更新(改代码后)
- 后端改:传变更文件 →
cd ~/alibb-server/backend && sudo docker compose build backend && sudo docker compose up -d(migrate 自动跑)。 - 前端改:传变更 → 服务器
npm run build→ 复制 dist 到站点(Step 4)。 - 扩展改:本机改 → chrome://extensions 刷新扩展(用户操作)。
常用运维
| 操作 | 命令 |
|---|---|
| 后端日志 | sudo docker compose logs -f backend |
| 重启后端 | sudo docker compose restart backend |
| 查库 | sudo docker exec -e MYSQL_PWD=wecbni5zRRnZrMMh 1Panel-mysql-sLiG mysql -ualibaba alibaba |
| 清询盘重抓 | ... mysql ... -e "SET FOREIGN_KEY_CHECKS=0; TRUNCATE chat_messages; TRUNCATE inquiries; SET FOREIGN_KEY_CHECKS=1;"(customers 保留,重抓 upsert 更新) |
已知限制
- 折叠面板字段抓不到:客户资料折叠面板里的 手机/座机/商业类型/销售平台/公司官网,alibaba 检查
event.isTrusted(只接受真实鼠标点击),扩展 JS 无法展开。这些字段大部分买家本就是"-"(alibaba 默认隐藏联系方式)。保留抓其他全部(基本信息 + 行为数据 + 店内行为 + 最近询盘产品图)。 - 风控:抓取间隔已随机化(randSleep),降低被识别为爬虫的概率;大量抓取建议分批 + 中途暂停。
- MySQL 公网暴露:1Panel 的 mysql 映射
0.0.0.0:3306(1Panel 默认,非本次部署),建议后续在 1Panel 收紧为本地。
仓库
- 扩展:
d:/alibb(master) - 后端:
d:/alibb-server/backend(master) - 前端:
d:/alibb-server/frontend(main) - 服务器代码:
~/alibb-server/{backend,frontend}