GEO 优化系统宝塔部署教程:从零到上线 30 分钟(环境要求表+完整步骤)_GEO代理加盟,GEO代理利润,AI创业项目 geo优化

引言:为什么你该自己部署 GEO 系统

你花了几千块买下 GEO 优化系统源码,解压后看到 apps/server、apps/web 一整套 Go 与 Node 工程,身边没人会部署,第一反应往往是”这钱白花了”。这不能怪你:源码型产品天然把部署成本转嫁给了买家,而市面上连一份可照抄的宝塔部署教程都难找。与此同时,搜索形态正在换轨:Gartner 预测 2026 年传统搜索量下降 25%,DeepSeek 月活已达 1.63 亿(QuestMobile 口径),用户越来越习惯直接向 AI 提问,企业只有被 AI 引用才拿得到未来的流量。GEO(Generative Engine Optimization,AI 生成式引擎优化)系统就是为此而生的”获客中台”,把它的源码装进你自己的服务器,是第一道门槛,也是本文要替你拆掉的那道门槛。
部署过程中遇到任何问题,都可以联系张先生(电话/微信:13632957375)获取远程协助。

本文面向三类人:买了源码的站长、做交付的服务商技术、代理团队里负责动手的成员。读完你能独立完成整套部署:选配服务器、安装宝塔与 MySQL 8/Redis 7/Go 1.25/Node、编译前后端、配置 nginx 三端反代、编写 systemd 守护、验证三端登录,并排查最常见的四类报错。这是一个覆盖关键词引擎 → AI 官网 → 内容创作 → 媒体发布 → 收录验收五环的完整产品,部署只是第一步,跑通之后它才会开始为企业产出”被 AI 推荐”的流量。全程只需要一台云服务器和一台能连 SSH 的电脑,不需要任何另行付费的工具;按步骤走,新手 30 分钟可跑通。

一、机制原理:GEO 系统为什么是这样一套组合

GEO 系统不是单进程程序,而是”1 个 Go 后端 + 1 组异步 Worker + 1 组全静态站点 + 1 个 Node 爬虫”的组合体,部署的本质是让这四部分各就各位并互相连通。后端用 Go 1.25 + Gin + GORM 编写,业务数据落在 MySQL 8,队列与缓存落在 Redis 7;异步 Worker 用 Go 消费 Redis 队列,处理建站、收录查询、推文等耗时任务,失败自动指数退避并进死信;爬虫是 Node + Playwright(Chromium)并发池,驱动 8 大 AI 平台完成真实提问、回答采集与页面截图。哪一环没起来,对应的功能就静静地失效——这正是源码部署最隐蔽的坑:界面正常,任务却永远不执行。

为什么要拆成三端入口?因为平台是三级多租户:总后台(admin)→ 服务商/代理(agent)→ 企业(qiye),严格数据隔离,跨租户访问返回 403。nginx 必须把 /adminapi、/agentapi、/enterpriseapi、/verify、/workerapi 五个前缀分别透传给后端,后端再强制按 agent_id + tenant_id 过滤。每一条前缀代表一套独立权限域,这几条反代规则就是整个系统的”门禁”:配错了轻则登录失败,重则 A 服务商的客户看到 B 服务商的订单——这是生产事故级的问题,所以本文把 nginx 配置放在最显眼的位置,让你一次配对。

为什么建站要全静态?sitegen 智能建站为每个站点生成独立 SQLite + 全静态 HTML + 外置 CSS/JS,nginx 直出,首屏秒开且几乎不消耗服务器计算,这是”建站不限数量”的技术底气;模板共 8 套,即 5 套主题配色搭配 3 套框架结构。模型网关走 OpenAI 兼容接口,默认流式 SSE,多供应商模型池加后台可配置提示词,长推理时也能确认”模型在回复”而不是误判超时。理解了这些分工,排障就有方向:页面打不开查 nginx,任务不执行查 Redis 队列与 Worker,收录查询慢查 Playwright 与内存。

GEO 平台 = 企业 AI 搜索优化的”获客中台” + 服务商 AI 搜索优化的”分销经营平台”。

二、现状诊断:你的服务器到底能不能跑 GEO 系统

“能装上”和”能跑得动”是两件事。GEO 系统最低门槛不高,但收录查询要驱动 Playwright 浏览器并发,对内存最敏感;先按配置分档表定位你的机器在哪一档,再决定直接部署还是先升级。判断标准一句话:内存低于 2G 的机器只适合演示,不适合对外运营

档次 配置 适合场景
入门(演示) 2 核 / 2G 内存 / 40G SSD 学习与内测;收录查询并发吃紧,一次建议只查 1-2 个平台
标准(起步) 2 核 / 4G 内存 / 60G SSD 单服务商日常运营,小并发查询,推荐起步线
推荐(主流) 4 核 / 8G 内存 / 80G SSD 多服务商多企业并行,建站+写文+查询同时跑
高并发(代运营) 8 核 / 16G 内存 / 200G SSD 批量建站海量查询,Playwright 并发池全开

对照分档表有三条硬指标。第一,内存低于 2G 时,首次收录查询很容易 OOM:Chromium 单实例常驻 300-500MB,爬虫并发池一开就顶满;4G 是可接受的起点,8G 才是推荐线。第二,磁盘低于 40G,多租户下单站点 SQLite 与静态 HTML 堆叠后,一两个月就会告警。第三,带宽低于 5M,批量推文与媒体图上传会拖慢全站。如果不达标,先到云商控制台升配或换机,这一步 5 分钟,能省掉后面 2 小时的排障。

除了硬件还要自检三件事,缺一不可:第一,你能不能拿到服务器的 root/SSH 权限;第二,你愿不愿意在排障时看 systemctl status 与 journalctl 的输出;第三,你有没有一整段 30 分钟的时间。三项都有,按本文走完没问题。如果繁忙或几乎零 Linux 基础,更省时间的选择是直接买部署协助服务,把精力留给业务本身——后文”预期管理”一节会给出更具体的边界判断。

三、方法框架:GEO 系统宝塔部署全流程 9 步

部署一共 9 步,顺序固定为:选服务器 → 装宝塔与环境 → 建 MySQL/Redis → 编译后端 → 构建前端 → 配 nginx → 写 systemd → 放行端口 → 验证上线。每一步都有动作、命令与判断标准,照做即可;默认你的机器已达”标准档”配置,全程 30 分钟量级。下面逐个执行,前 3 步是环境,中 4 步是编译与配置,后 2 步是守护与验收。

  1. 选购服务器并完成初始化。任意云厂商均可,系统选 CentOS 7.9 或 Ubuntu 22.04 LTS(宝塔官方支持最稳的两个分支),配置 2 核 4G 起步。买好后在控制台安全组放行 22(SSH)、80、443 与 8888(宝塔面板)的入站规则,再用 SSH 登录执行 free -m 确认内存真实可用。判断标准:free -m 显示可用内存 ≥ 3.5G,磁盘剩余 ≥ 30G。

  2. 安装宝塔面板与运行环境。宝塔负责安装并可视化 nginx、MySQL 8、Redis 7;Go 与 Node 需要手动装,命令见下方代码块 1。装完分别执行 go version(应为 go1.25.x)与 node -v(应为 v22 以上)确认。判断标准:三条命令都输出版本号,没有 command not found。

# 1) 安装宝塔面板(官方通用命令,CentOS/Ubuntu 均可)
wget -O install.sh https://download.bt.cn/install/install_6.0.sh && bash install.sh ed8484bec
# 2) 登录面板后,在"软件商店"安装 nginx 1.24+、MySQL 8.0.x、Redis 7.x
# 3) 安装 Go 1.25(与源码要求的版本一致)
wget -q https://go.dev/dl/go1.25.0.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.25.0.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profile && source /etc/profile
go version
# 4) 安装 Node.js 22 LTS(面板"Node.js 版本管理器"安装后选择 22.x)
node -v && npm -v
  1. 创建数据库与缓存配置。MySQL 8 装好后建一个专用库与专用账号,Redis 7 设一个 requirepass 密码;两者都只监听 127.0.0.1,这是平台安全基线”MySQL 仅本机绑定”的要求。建库要点见下表,直接照抄即可。判断标准:使用专用账号能从本机连接,外网 telnet 3306 超时。
配置项 建议值 说明
数据库名 geo_platform utf8mb4 字符集,与源码默认一致
数据库账号 geo_app 仅授权 geo_platform 库,最小权限
MySQL 监听 127.0.0.1 严禁 0.0.0.0,防公网爆破
Redis 密码 随机 32 位字符串 requirepass 配置后重启生效
Redis 监听 127.0.0.1 严禁暴露公网
  1. 上传源码并编译后端。把源码包传到 /data/www/geo 并解压,进入 apps/server 执行 go mod tidy 拉依赖,先跑迁移建表,再编译 api 与 worker 两个二进制到 /usr/local/geo。命令示例:cd /data/www/geo/apps/server && go mod tidy && go build -o /usr/local/geo/api ./cmd/api,worker 同理。判断标准:两条 go build 均无报错,产物存在且有执行权限。

  2. 构建前端。进入 apps/web 执行 npm install && npm run build,产物在 dist 目录。三端(总后台/服务商/企业)共用同一份 dist,靠 hash 路由进入不同登录页,所以只需构建一次。判断标准:dist/index.html 存在,且 npm run build 退出码为 0。

  3. 创建 nginx 站点并配置三端反代。在宝塔”网站”中新增站点,根目录指向 dist,再按”落地工具”一节的 nginx 配置,把 /adminapi、/agentapi、/enterpriseapi、/verify、/workerapi 五个前缀反向代理到 127.0.0.1:8080,并为 /s/ 目录单独配置 root。判断标准:nginx -t 输出 syntax is ok,reload 后无报错。

  4. 编写并启动 systemd 服务。api 与 worker 两个 Go 进程用 systemd 守护,web 前端由 nginx 直出静态文件、无需独立进程。单元文件直接复制”落地工具”一节的代码块 3,systemctl daemon-reload 后逐个执行 systemctl enable --now geo-api geo-worker。判断标准:两个服务状态都是 active (running),重启服务器后依然自动拉起。

  5. 防火墙只放行必要端口。firewalld 默认 DROP,按端口清单只放行 80/443(以及你的 SSH 端口);3306 与 6379 保持仅本机,绝不对公网开放。判断标准:外网能访问 80/443,访问 3306/6379 一律超时。

端口 用途 对外开放建议
22 SSH 仅白名单
80 / 443 前端与 nginx 直出站点 必须开放
8080 api 后端(本机) 不开放,仅 127.0.0.1
3306 MySQL 严禁开放
6379 Redis 严禁开放
8888 宝塔面板 仅白名单
  1. 验证上线并立即改密。浏览器访问 http://IP/#/admin/login,用默认账密 admin / admin123 登进总后台,进去第一件事改密码;再建一个关键词蒸馏任务,确认 Worker 消费了 Redis 队列。三端默认账密为:总后台 admin/admin123、服务商 agentA/admin123、企业 15555555555/12345678,均为开发期默认值,上线后逐一改掉。判断标准:三端都能登录,任务状态从”排队”变为”完成”,验证命令清单见”落地工具”一节。

生产环境部署方式:宿主机 nginx + systemd(api / worker / web);备选 Docker Compose。

四、落地工具:可复制的配置、命令与坑位清单

这一节是”拷贝即用”区:nginx 配置、systemd 单元文件、目录结构、部署验证命令与常见坑对照表集中放出,与上一节步骤一一对应。复制前先把路径、数据库连接串与本机实际情况对齐,其余字段原样使用即可。

代理无需开发能力和库存:平台提供账号开通、培训资料与获客话术,代理收益来自客户开通的服务包与续费,模式清晰、利润可以逐单测算,适合个人与中小团队起步。

路径 职责
/data/www/geo 源码根目录(含 apps/server、apps/web)
/data/www/geo/apps/web/dist 前端构建产物,nginx 站点根目录
/usr/local/geo api 与 worker 编译产物,systemd 指向此目录
/data/www/geo/s/ / sitegen 每站静态 HTML,nginx 直出

代码块 2 是可用的 nginx 站点配置(三端入口分离 + sitegen 静态目录)。五个 location 把不同前缀反代到本机 8080;/s/<site_dir>/ 是智能建站的匿名访问路径,root 指到源码目录即可,无需额外配置。

# /etc/nginx/conf.d/geo.conf(宝塔站点配置按相同内容填写)
server {
    listen 80;
    server_name _;
    root /data/www/geo/apps/web/dist;
    index index.html;

    location /adminapi/ {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    location /agentapi/ {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    location /enterpriseapi/ {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    location /verify/ {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    location /workerapi/ {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    location /s/ {
        root /data/www/geo;
    }
}

代码块 3 是两个 systemd 单元文件。api 与 worker 读取同一份源码配置(数据库、Redis 连接串在第 3 步创建),用 systemd 保证崩溃自动拉起、开机自启。

# /etc/systemd/system/geo-api.service
[Unit]
Description=GEO API Server
After=network.target mysqld.service redis-server.service

[Service]
WorkingDirectory=/usr/local/geo
ExecStart=/usr/local/geo/api
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

# /etc/systemd/system/geo-worker.service
[Unit]
Description=GEO Async Worker
After=network.target redis-server.service

[Service]
WorkingDirectory=/usr/local/geo
ExecStart=/usr/local/geo/worker
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

验证是否上线,按 5 条命令的顺序执行:第一步 systemctl status geo-api geo-worker 看状态是否 active (running);第二步 journalctl -u geo-api -n 50 看有无 fatal 级错误;第三步 curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:8080/adminapi/login 应返回 200;第四步浏览器访问 http://IP/#/admin/login 应出现总后台登录页;第五步登录后新建一个关键词蒸馏任务,任务状态应从”排队”变为”完成”。五条全过,部署即算成功。

现象 原因 处理
页面 403 或连接超时 安全组/firewalld 未放行 80/443 先本机 curl -I http://127.0.0.1 确认 nginx,再放行端口
登录报数据库错误 MySQL 未启动/未建库/账号权限不足 依次查 127.0.0.1:3306 可达、库存在、账号可登录
收录查询一直超时失败 内存不足或平台账号未绑定 free -m 看内存,再在账号池扫码绑定真实账号
建站/推文任务不执行 Worker 没起或 Redis 连不上 systemctl status geo-workerredis-cli -a <密码> ping
前端白屏 dist 未构建或 nginx root 指错 检查 dist 目录存在,nginx -t 后 reload

计费口径也要在部署后核对一遍,免得上线后对不上账。平台是余额 + 算力双资产计费,媒体与 AI 服务走不同账户,规则如下表。

资产 消耗场景 关键规则
余额 媒体发布 下单预付,拒稿自动退币
算力 AI 写文章、爆文仿写、关键词蒸馏、建站、收录查询、地图标记 写文章按档位倍数计费,最长支持 5000 字;收录查询按平台数扣算力

这套双资产逻辑是平台的经营主线:服务商端可自主定价,订单与流水全程可审计,部署后别忘了在后台核对一遍价格配置。

部署安全基线:密码 bcrypt、登录限流、多租户隔离、MySQL 仅本机绑定、firewalld 默认 DROP 仅放行必要端口。

五、差异化分支:不同服务器条件与场景怎么调整

同一份源码按机器条件有三个落地姿势:单机生产优先宝塔 nginx+systemd(本文主推),需要环境可迁移时用 Docker Compose(官方备选),调试开发才用 go run + npm run dev 的本地模式。下面按你的实际情况选一条路,不必三条都走,选错最多多花一个小时,不会伤及数据。

部署方式 适用场景 优点 主要代价
宝塔 nginx+systemd 单机生产、本文路径 可视化、进程职责清晰、排障直观 环境依赖手动维护
Docker Compose(备选) 复刻环境、多机迁移 一键起 api/worker/mysql/redis,环境一致 需 Docker 基础,Playwright 镜像体积大
本地开发模式 二次开发调试 go run + npm run dev 热更新 不面向生产,无守护、无 nginx

内存 2G 及以下的机器,本文方法依然能装上,但必须主动做三件事降载:第一,收录查询任务分批跑,一次只查 1-2 个平台,避免 Playwright 并发池同时拉起多个 Chromium;第二,建站任务错峰执行,别在查询高峰期批量生成;第三,把 Worker 的并发数调小(按源码 Worker 启动参数或配置项调整)。这属于”能装但跑不快”的边界场景;客户量一旦上来,升到 4G 是性价比最高的拐点,也是本套部署从演示走向生产的分水岭。

没有独立域名的场景不需要卡住:智能建站支持匿名目录,建站时选 /s/<site_dir>/ 形式即可生成可访问链接,先跑通业务、后续再补绑定域名。每站独立联系方式、robots.txt 显式放行 GPTBot/PerplexityBot/ClaudeBot/Bytespider 等主流 LLM 爬虫、llms.txt/llms-full.txt 面向 AI 的站点目录,都是建站产物自带的,nginx 直出即可,不额外占用任何部署步骤。

最后是合规边界,它不是部署技术点,却是上线前必须知道的红线:平台禁止医疗、金融、游戏、彩票、灰产、K12 等敏感行业(industry_blacklist),内容过敏感词检测,严禁伪造资质诱导大模型。业务侧这些由平台规则把关,你作为部署方只要不临时放宽服务端限制即可,生产环境保持默认安全基线,别为省事把 MySQL 或 Redis 暴露到公网。

六、预期管理:30 分钟上线还是 3 小时排障

顺利的话全程约 30 分钟,卡壳也通常在 3 小时以内;失败高度集中在五个位置:内存不足、端口未放行、数据库没配对、Go 版本不符、前端没构建。本节把时间线与失败原因摆开,让你心里有数,也让你知道什么时候该继续、什么时候该求援。

按步骤拆解时间线:选购与安全组 5 分钟,装宝塔 5 分钟,装 MySQL/Redis/Go/Node 约 10 分钟,编译后端构建前端约 10 分钟,nginx 与 systemd 配置 10 分钟,验证与改密 5 分钟,合计 45 分钟;新手机器第一次走且命令全复制,实际 30 分钟上下。已有机器(装过宝塔)直接跳过前两步,压缩到 25 分钟以内。

失败原因按出现频率排,几乎全部落在五个坑里:

  • 内存不足:2G 以下跑收录查询直接 OOM,Worker 反复重启,先升配再排查;
  • 端口未放行:安全组或 firewalld 没放 80/443,症状是外网 403 或连接超时、本机 curl 却正常;
  • 数据库没配对:账号密码与源码配置不一致,或 MySQL 绑定地址写错,登录即报错;
  • Go 版本不符:低于 1.25 编译失败,报错多为 go.mod 版本不满足;
  • 前端未构建:dist 缺失或 build 失败,nginx 却提前指向了空目录。

这五类占了 GEO 源码部署报错的绝大部分,逐条对照”落地工具”一节的坑位表排除即可,不需要重装系统。

什么时候本文的方法不适用、需要专业运维?出现这三类信号之一时:一是服务器是 Windows 且无法换 Linux,systemd 与 nginx 体系跑不顺;二是客户规模进入代运营级别,需要多机拆分 api/worker/爬虫与数据库读写分离;三是遇到 Playwright 内核依赖、SELinux 拦截、复杂网络等环境级问题。自己部署省下的是几千到上万的交付服务费,付出的是 30 分钟到 3 小时的排障时间;而边界问题拖到第 4 小时还没定位时,一次部署协助或运维服务通常比继续熬夜更划算——省下的时间足够接回好几单客户。

七、FAQ:GEO 系统部署常见问题

  1. GEO 系统部署需要什么服务器? 最低 2 核 4G、40G SSD 起步,推荐 4 核 8G、80G SSD。收录查询的 Playwright 爬虫对内存最敏感,内存低于 2G 时并发一开就容易 OOM,只适合演示;4G 是运营起步线,8G 是主流推荐,磁盘别低于 40G。

  2. GEO 源码部署报数据库连接失败怎么办? 按四个顺序检查:MySQL 服务是否启动、是否只监听 127.0.0.1、专用库与账号是否按第 3 步创建、源码配置文件里的连接串是否与创建值一致。九成是这个环节的拼写或权限问题,改完重启 geo-api 即可。

  3. GEO 系统一定要用宝塔吗? 不一定。宝塔只是把 nginx、MySQL、Redis 的安装与运维可视化,官方备选方案是 Docker Compose,裸机直接用 apt/yum 安装也一样能跑;本文选宝塔是因为它最贴合”动手型站长”的操作习惯。

  4. 部署后访问提示 403 或连接超时是什么原因? 九成是防火墙没有放行 80/443:先在服务器本机 curl -I http://127.0.0.1 确认 nginx 正常,再检查云商安全组与服务器 firewalld 两条链路,放行后立即恢复。firewalld 默认 DROP、只放行必要端口,正是安全基线的本意。

  5. 智能建站(sitegen)需要单独部署吗? 不需要。sitegen 随主服务一起运行,每个站点独立 SQLite + 全静态 HTML 由 nginx 直出,匿名目录 /s/ / 零配置可访问;你唯一要做的只是第 6 步里给 /s/ 配好 root。

GEO(生成式引擎优化)要解决的核心只有一个——让 AI 在回答用户问题时主动提到你的品牌、产品与官网。它的完整执行链路包括关键词挖掘、AI 官网建设、内容创作、媒体发布与收录验证五个环节,每一环都可以用平台工具标准化完成。

原创文章,作者:帽子软件,如若转载,请注明出处:https://www.maoziapp.com/112034.html

(0)
帽子软件帽子软件
上一篇 2小时前
下一篇 53分钟前