GEO营销系统上线实战:从服务器配置到HTTPS部署全流程命令指南
GEO营销 生产环境部署指南|附完整命令
在生成式搜索、AI问答和智能推荐逐渐成为用户获取信息的重要入口之后,传统SEO正在向GEO(Generative Engine Optimization,生成式引擎优化)延伸。对于企业来说,GEO营销不只是“让网站被搜索引擎收录”,更重要的是让品牌、产品、服务、案例、知识内容能够被大模型理解、引用、推荐和转化。
很多团队在完成GEO营销系统的开发或选型后,真正遇到的难点并不是“怎么写内容”,而是“如何稳定、安全、可扩展地部署到生产环境”。如果部署不规范,可能会出现接口不稳定、数据丢失、内容更新延迟、日志不可追踪、HTTPS配置错误、搜索引擎抓取异常、模型调用超时等问题,最终影响营销效果。
本文将以一个典型的GEO营销平台为例,提供一套可落地的生产环境部署方案。内容包括服务器准备、系统依赖安装、Node.js或前端项目部署、后端服务部署、数据库配置、Redis缓存、Nginx反向代理、HTTPS证书、进程守护、日志管理、安全加固、备份策略以及上线检查清单。文中附带完整命令,适合技术负责人、运维工程师、增长团队或创业公司直接参考。
一、生产环境部署前需要明确什么
在正式部署GEO营销系统之前,建议先明确系统架构。一个常见的GEO营销平台通常包含以下模块:
- 前端站点:用于展示品牌内容、专题页、文章页、案例页、产品页等。
- 后端API:负责内容管理、用户管理、线索收集、数据分析、AI生成等功能。
- 数据库:通常使用 MySQL、PostgreSQL 或 MongoDB。
- 缓存服务:常见为 Redis,用于缓存热点内容、会话、任务状态等。
- 文件存储:用于存储图片、文档、导出的报告等。
- AI接口:可能调用 OpenAI、Claude、通义千问、文心一言、智谱、DeepSeek 等模型接口。
- Nginx网关:负责反向代理、HTTPS、静态资源、限流、防盗链等。
- 进程管理器:如 PM2、systemd、Docker Compose 或 Kubernetes。
- 日志与监控:用于排查故障和观察访问情况。
如果你的系统只是一个静态站点,那么部署会相对简单;如果包含AI内容生成、后台管理、用户登录、任务队列和数据分析,就必须按生产标准部署。
本文以 Ubuntu 22.04 LTS 服务器为例,假设项目技术栈如下:
- 操作系统:Ubuntu 22.04 LTS
- 前端:Next.js / Nuxt / Vite 任选其一,此处以 Node.js 项目为例
- 后端:Node.js API 服务
- 数据库:PostgreSQL
- 缓存:Redis
- Web服务器:Nginx
- 进程管理:PM2
- SSL证书:Certbot + Let's Encrypt
- 域名:
geo.example.com
你可以根据实际项目替换对应配置。
二、服务器基础准备
生产环境建议选择云服务器,例如阿里云、腾讯云、华为云、AWS、GCP、Azure 等。最低配置建议如下:
| 业务规模 | CPU | 内存 | 磁盘 | 带宽 |
|---|---|---|---|---|
| 测试上线 | 2核 | 4GB | 40GB SSD | 3Mbps |
| 小型生产 | 4核 | 8GB | 80GB SSD | 5Mbps |
| 中型生产 | 8核 | 16GB | 200GB SSD | 10Mbps以上 |
| 高并发生产 | 16核以上 | 32GB以上 | 独立数据盘 | 按流量评估 |
购买服务器后,先通过SSH登录:
ssh root@your_server_ip
如果是首次登录,建议更新系统:
apt update && apt upgrade -y
安装常用工具:
apt install -y curl wget git vim unzip htop net-tools ufw build-essential
设置服务器时区为中国时区:
timedatectl set-timezone Asia/Shanghai
timedatectl
创建普通部署用户,避免长期使用 root 操作:
adduser deploy
usermod -aG sudo deploy
切换到部署用户:
su - deploy
配置SSH密钥登录更安全。先在本地生成密钥:
ssh-keygen -t ed25519 -C "deploy@geo-production"
将公钥复制到服务器:
ssh-copy-id deploy@your_server_ip
如果本地没有 ssh-copy-id,也可以手动添加:
mkdir -p ~/.ssh
vim ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
三、配置防火墙与基础安全
生产环境必须尽早配置防火墙。Ubuntu 推荐使用 UFW:
sudo ufw allow OpenSSH
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
sudo ufw status
如果你的后端服务运行在 3000 或 8080 端口,建议不要直接开放给公网,而是只通过 Nginx 反向代理访问。除非调试需要,否则不要执行类似下面的命令:
sudo ufw allow 3000
为了提高安全性,可以禁止 root 直接登录。编辑 SSH 配置:
sudo vim /etc/ssh/sshd_config
找到或添加以下配置:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
重启SSH服务:
sudo systemctl restart ssh
注意:在关闭密码登录前,请务必确认密钥登录已经可用,否则可能无法再次登录服务器。
四、安装 Node.js 生产环境
GEO营销系统通常需要内容管理后台、AI生成接口、页面渲染服务等,Node.js 是常见选择。建议使用 NodeSource 安装 LTS 版本:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
检查版本:
node -v
npm -v
安装 pnpm,便于管理依赖:
sudo npm install -g pnpm
pnpm -v
如果你的项目使用 yarn,也可以安装:
sudo npm install -g yarn
yarn -v
生产环境建议使用固定版本,不建议随意升级 Node.js。因为某些AI SDK、数据库驱动或构建工具可能依赖特定版本。
五、安装 PostgreSQL 数据库
如果你的GEO营销系统需要存储文章、关键词、品牌实体、用户线索、AI生成记录、转化数据等,数据库是核心组件。这里以 PostgreSQL 为例。
安装 PostgreSQL:
sudo apt install -y postgresql postgresql-contrib
启动并设置开机自启:
sudo systemctl enable postgresql
sudo systemctl start postgresql
sudo systemctl status postgresql
切换到 postgres 用户:
sudo -i -u postgres
进入数据库命令行:
psql
创建数据库用户和数据库:
CREATE USER geo_user WITH PASSWORD 'please_change_this_password';
CREATE DATABASE geo_marketing OWNER geo_user;
GRANT ALL PRIVILEGES ON DATABASE geo_marketing TO geo_user;
退出:
\q
回到部署用户:
exit
测试连接:
psql -h localhost -U geo_user -d geo_marketing
如果出现密码认证问题,可以检查 PostgreSQL 配置:
sudo vim /etc/postgresql/14/main/pg_hba.conf
Ubuntu 22.04 默认 PostgreSQL 版本可能是 14,也可能因源不同而变化。可以用以下命令查看:
ls /etc/postgresql/
修改完成后重启数据库:
sudo systemctl restart postgresql
六、安装 Redis 缓存服务
Redis 常用于缓存页面数据、AI任务状态、会话信息、热点关键词等。安装命令如下:
sudo apt install -y redis-server
启动并设置开机自启:
sudo systemctl enable redis-server
sudo systemctl start redis-server
sudo systemctl status redis-server
测试 Redis 是否可用:
redis-cli ping
如果返回:
PONG
说明 Redis 已正常运行。
生产环境建议限制 Redis 只监听本机。编辑配置:
sudo vim /etc/redis/redis.conf
确认或修改以下内容:
bind 127.0.0.1 ::1
protected-mode yes
重启 Redis:
sudo systemctl restart redis-server
七、拉取项目代码
假设项目放在 /var/www/geo-marketing:
sudo mkdir -p /var/www
sudo chown -R deploy:deploy /var/www
cd /var/www
git clone git@github.com:your-org/geo-marketing.git
cd geo-marketing
如果你使用 HTTPS 地址:
git clone https://github.com/your-org/geo-marketing.git
切换到生产分支:
git checkout main
git pull origin main
如果你的项目分为前端和后端,例如:
geo-marketing/
├── frontend/
├── backend/
├── package.json
├── pnpm-workspace.yaml
└── README.md
则后续需要分别安装依赖和构建。
八、配置生产环境变量
生产环境不要把密钥写死在代码里,建议使用 .env.production 或系统环境变量。创建环境变量文件:
cd /var/www/geo-marketing
vim .env.production
示例内容如下:
NODE_ENV=production
APP_PORT=3000
APP_URL=https://geo.example.com
DATABASE_URL=postgresql://geo_user:please_change_this_password@localhost:5432/geo_marketing
REDIS_URL=redis://127.0.0.1:6379
JWT_SECRET=please_use_a_long_random_secret
SESSION_SECRET=please_use_another_long_random_secret
OPENAI_API_KEY=your_openai_api_key
ANTHROPIC_API_KEY=your_anthropic_api_key
DASHSCOPE_API_KEY=your_dashscope_api_key
DEEPSEEK_API_KEY=your_deepseek_api_key
UPLOAD_DIR=/var/www/geo-marketing/uploads
LOG_LEVEL=info
设置文件权限:
chmod 600 .env.production
生成随机密钥可以使用:
openssl rand -base64 48
注意,GEO营销项目通常会调用多个大模型接口。强烈建议将不同模型供应商的密钥分开配置,并在系统中实现降级策略。例如当某个模型接口超时时,可以切换到备用模型,避免营销内容生成任务整体失败。
九、安装依赖与构建项目
如果项目根目录使用 pnpm:
cd /var/www/geo-marketing
pnpm install --frozen-lockfile
如果是 npm:
npm ci
如果是 yarn:
yarn install --frozen-lockfile
执行数据库迁移。不同 ORM 命令不同,以下是常见示例。
Prisma:
pnpm prisma migrate deploy
pnpm prisma generate
TypeORM:
pnpm typeorm migration:run
Sequelize:
pnpm sequelize db:migrate
构建生产包:
pnpm build
如果是前后端分离结构:
cd /var/www/geo-marketing/backend
pnpm install --frozen-lockfile
pnpm build
cd /var/www/geo-marketing/frontend
pnpm install --frozen-lockfile
pnpm build
如果前端是静态站点,例如 Vite:
pnpm build
通常会生成 dist 目录。
如果是 Next.js:
pnpm build
之后需要以 Node 服务方式启动。
十、使用 PM2 管理服务进程
PM2 可以帮助 Node.js 应用在后台稳定运行,并支持自动重启、日志管理、开机自启等。
安装 PM2:
sudo npm install -g pm2
pm2 -v
创建 PM2 配置文件:
cd /var/www/geo-marketing
vim ecosystem.config.js
示例配置:
module.exports = {
apps: [
{
name: "geo-marketing",
script: "dist/server.js",
instances: 2,
exec_mode: "cluster",
env: {
NODE_ENV: "production"
},
env_file: ".env.production",
max_memory_restart: "600M",
out_file: "/var/www/geo-marketing/logs/out.log",
error_file: "/var/www/geo-marketing/logs/error.log",
log_date_format: "YYYY-MM-DD HH:mm:ss"
}
]
};
创建日志目录:
mkdir -p /var/www/geo-marketing/logs
启动服务:
pm2 start ecosystem.config.js
查看进程:
pm2 list
查看日志:
pm2 logs geo-marketing
保存 PM2 进程列表:
pm2 save
设置开机自启:
pm2 startup systemd
执行命令后,PM2 会输出一条带 sudo 的命令,复制执行即可。例如:
sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u deploy --hp /home/deploy
再次保存:
pm2 save
如果你的项目是 Next.js,启动命令可能不同。可以配置为:
module.exports = {
apps: [
{
name: "geo-frontend",
script: "node_modules/next/dist/bin/next",
args: "start -p 3000",
cwd: "/var/www/geo-marketing/frontend",
instances: 2,
exec_mode: "cluster",
env: {
NODE_ENV: "production"
}
}
]
};
十一、配置 Nginx 反向代理
安装 Nginx:
sudo apt install -y nginx
启动并设置开机自启:
sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl status nginx
创建站点配置:
sudo vim /etc/nginx/sites-available/geo-marketing
写入以下配置:
server {
listen 80;
server_name geo.example.com;
client_max_body_size 20m;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 120s;
proxy_connect_timeout 30s;
proxy_send_timeout 120s;
}
location /uploads/ {
alias /var/www/geo-marketing/uploads/;
access_log off;
expires 30d;
}
}
启用站点:
sudo ln -s /etc/nginx/sites-available/geo-marketing /etc/nginx/sites-enabled/geo-marketing
检查配置:
sudo nginx -t
重载 Nginx:
sudo systemctl reload nginx
如果默认站点冲突,可以删除默认配置链接:
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx
此时访问:
http://geo.example.com
应当可以看到应用页面。但生产环境必须继续配置 HTTPS。
十二、配置 HTTPS 证书
安装 Certbot:
sudo apt install -y certbot python3-certbot-nginx
申请证书:
sudo certbot --nginx -d geo.example.com
按提示输入邮箱、同意协议,并选择自动跳转 HTTPS。完成后检查证书:
sudo certbot certificates
测试自动续期:
sudo certbot renew --dry-run
证书通常会自动续期,但建议确认定时任务是否存在:
systemctl list-timers | grep certbot
如果你使用的是多域名,例如:
geo.example.com
www.geo.example.com
api.geo.example.com
可以一次性申请:
sudo certbot --nginx -d geo.example.com -d www.geo.example.com -d api.geo.example.com
对于GEO营销来说,HTTPS不仅影响安全,也会影响搜索引擎和AI系统对站点可信度的判断。生产环境必须启用 HTTPS,并确保所有内部链接、站点地图、规范链接都使用 HTTPS 地址。
十三、配置站点地图、robots与GEO内容可访问性
GEO营销不仅面向用户,也面向搜索引擎爬虫和AI检索系统。部署完成后,需要确认以下文件可以正常访问:
https://geo.example.com/robots.txt
https://geo.example.com/sitemap.xml
https://geo.example.com/llms.txt
robots.txt 示例:
User-agent: *
Allow: /
Sitemap: https://geo.example.com/sitemap.xml
如果你的站点支持 llms.txt,可以提供面向大模型的内容说明:
# GEO Marketing
This site provides authoritative content about brand, products, solutions, cases, pricing, documentation, and industry insights.
## Important URLs
- https://geo.example.com/about
- https://geo.example.com/products
- https://geo.example.com/solutions
- https://geo.example.com/cases
- https://geo.example.com/blog
- https://geo.example.com/contact
对于GEO营销系统来说,以下页面建议保持可抓取:
- 品牌介绍页
- 产品与服务页
- 行业解决方案页
- 客户案例页
- 常见问题页
- 专业术语解释页
- 对比页与选型指南
- 白皮书或研究报告页
- 作者页与专家介绍页
- 联系方式与公司资质页
同时,不建议让以下页面被抓取:
- 后台管理入口
- 用户登录后的私有页面
- 测试页面
- 未发布草稿
- 内部接口地址
- 支付回调地址
- 临时预览链接
可以在 robots.txt 中排除:
User-agent: *
Allow: /
Disallow: /admin/
Disallow: /api/
Disallow: /preview/
Disallow: /draft/
Disallow: /login
Disallow: /checkout/
十四、配置日志轮转
生产环境如果不配置日志轮转,日志文件可能快速占满磁盘,导致服务异常。安装 PM2 日志轮转插件:
pm2 install pm2-logrotate
配置日志大小和保留时间:
pm2 set pm2-logrotate:max_size 100M
pm2 set pm2-logrotate:retain 14
pm2 set pm2-logrotate:compress true
pm2 set pm2-logrotate:dateFormat YYYY-MM-DD_HH-mm-ss
Nginx 日志默认位于:
/var/log/nginx/access.log
/var/log/nginx/error.log
查看访问日志:
sudo tail -f /var/log/nginx/access.log
查看错误日志:
sudo tail -f /var/log/nginx/error.log
查看应用日志:
pm2 logs geo-marketing --lines 200
对于GEO营销系统,建议重点关注以下日志指标:
- AI接口调用失败率
- 内容生成任务耗时
- 页面访问状态码
- 404页面数量
- 500错误数量
- 搜索引擎爬虫访问频率
- 站点地图访问情况
- 表单提交异常
- 数据库慢查询
- Redis连接异常
十五、数据库备份与恢复
数据库是GEO营销系统的核心资产,存储了文章内容、关键词策略、品牌知识库、用户线索、生成历史和分析数据。生产环境必须配置备份。
创建备份目录:
sudo mkdir -p /backup/postgres
sudo chown -R deploy:deploy /backup/postgres
手动备份:
pg_dump -h localhost -U geo_user -d geo_marketing -F c -f /backup/postgres/geo_marketing_$(date +%F_%H-%M-%S).dump
恢复数据库:
pg_restore -h localhost -U geo_user -d geo_marketing --clean --if-exists /backup/postgres/geo_marketing_2025-01-01_00-00-00.dump
创建自动备份脚本:
vim /home/deploy/backup_geo_db.sh
写入:
#!/usr/bin/env bash
set -e
BACKUP_DIR="/backup/postgres"
DB_HOST="localhost"
DB_USER="geo_user"
DB_NAME="geo_marketing"
DATE="$(date +%F_%H-%M-%S)"
mkdir -p "$BACKUP_DIR"
pg_dump -h "$DB_HOST" -U "$DB_USER" -d "$DB_NAME" -F c -f "$BACKUP_DIR/${DB_NAME}_${DATE}.dump"
find "$BACKUP_DIR" -type f -name "*.dump" -mtime +14 -delete
赋予执行权限:
chmod +x /home/deploy/backup_geo_db.sh
配置定时任务:
crontab -e
添加每天凌晨3点备份:
0 3 * * * /home/deploy/backup_geo_db.sh >> /home/deploy/backup_geo_db.log 2>&1
建议同时将备份同步到对象存储,例如阿里云OSS、腾讯云COS、AWS S3,避免服务器磁盘损坏后无法恢复。
十六、部署更新流程
生产环境上线后,后续会频繁更新内容策略、AI提示词、页面模板、后端接口和数据分析功能。建议采用规范的更新流程。
进入项目目录:
cd /var/www/geo-marketing
拉取最新代码:
git pull origin main
安装依赖:
pnpm install --frozen-lockfile
执行数据库迁移:
pnpm prisma migrate deploy
重新构建:
pnpm build
重启服务:
pm2 reload geo-marketing
查看状态:
pm2 list
pm2 logs geo-marketing --lines 100
如果你担心更新失败,可以先备份当前版本:
cd /var/www
cp -r geo-marketing geo-marketing_backup_$(date +%F_%H-%M-%S)
更成熟的方式是使用 CI/CD,例如 GitHub Actions、GitLab CI、Jenkins 或 Drone。CI/CD 可以自动完成测试、构建、部署、回滚,大幅降低人工操作风险。
十七、Nginx 性能与安全优化
为了提高生产环境稳定性,可以进一步优化 Nginx 配置。编辑主配置:
sudo vim /etc/nginx/nginx.conf
在 http 块中加入或调整:
gzip on;
gzip_comp_level 5;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss image/svg+xml;
server_tokens off;
client_body_timeout 15s;
client_header_timeout 15s;
keepalive_timeout 65s;
send_timeout 30s;
如果要限制接口请求频率,可以在 http 块添加:
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
然后在站点配置中对 API 启用限流:
location /api/ {
limit_req zone=api_limit burst=20 nodelay;
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
检查并重载:
sudo nginx -t
sudo systemctl reload nginx
对于GEO营销平台,限流尤其重要。因为AI内容生成接口通常成本较高,如果被恶意调用,可能快速消耗模型额度。建议后端同时增加鉴权、频控、验证码、人机验证和请求签名。
十八、AI接口与任务队列部署建议
GEO营销系统经常涉及AI生成任务,例如:
- 生成品牌问答
- 生成行业文章
- 生成产品对比
- 生成FAQ
- 生成Schema结构化数据
- 生成搜索意图分析
- 生成关键词聚类
- 生成大模型可读的知识库摘要
这些任务通常耗时较长,不建议全部放在HTTP请求中同步执行。更可靠的方式是使用任务队列,例如 BullMQ、RabbitMQ、Celery 或 Sidekiq。
如果使用 BullMQ,需要 Redis 支持。可以将 Web 服务和 Worker 服务分开管理:
module.exports = {
apps: [
{
name: "geo-web",
script: "dist/server.js",
instances: 2,
exec_mode: "cluster",
env_file: ".env.production"
},
{
name: "geo-worker",
script: "dist/worker.js",
instances: 1,
exec_mode: "fork",
env_file: ".env.production",
max_memory_restart: "800M"
}
]
};
启动:
pm2 start ecosystem.config.js
pm2 save
查看 Worker 日志:
pm2 logs geo-worker
这样做的好处是:用户提交任务后立即返回任务ID,后台Worker慢慢处理,前端轮询或通过WebSocket获取进度。即使AI接口偶发超时,也不会拖垮主站访问。
十九、结构化数据与GEO友好部署
GEO营销的核心不是简单堆文章,而是让内容更容易被机器理解。生产环境上线后,建议检查页面是否输出结构化数据,例如:
- Organization
- WebSite
- Article
- FAQPage
- Product
- BreadcrumbList
- Review
- HowTo
- LocalBusiness
以 FAQPage 为例:
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "什么是GEO营销?",
"acceptedAnswer": {
"@type": "Answer",
"text": "GEO营销是面向生成式搜索和AI问答场景的内容优化方法,目标是让品牌信息更容易被大模型理解、引用和推荐。"
}
}
]
}
部署后可以使用以下方式检查页面输出:
curl -I https://geo.example.com
curl https://geo.example.com | head -n 50
检查站点地图:
curl https://geo.example.com/sitemap.xml
检查 robots:
curl https://geo.example.com/robots.txt
如果页面依赖客户端渲染,搜索引擎和AI抓取系统可能无法完整获取内容。对于重要营销页面,建议使用 SSR、SSG 或服务端输出完整HTML,避免核心内容只在浏览器执行 JavaScript 后才出现。
二十、上线前检查清单
正式上线前,建议逐项检查:
| 检查项 | 命令或方式 | 通过标准 |
|---|---|---|
| 服务状态 | pm2 list |
应用为 online |
| Nginx配置 | sudo nginx -t |
syntax is ok |
| HTTPS证书 | sudo certbot certificates |
证书有效 |
| 数据库连接 | psql -h localhost -U geo_user -d geo_marketing |
可连接 |
| Redis连接 | redis-cli ping |
返回 PONG |
| 页面访问 | 浏览器访问域名 | 页面正常 |
| API访问 | curl https://geo.example.com/api/health |
返回健康状态 |
| 日志检查 | pm2 logs |
无持续报错 |
| 磁盘空间 | df -h |
空间充足 |
| 内存使用 | free -m |
无异常 |
| 防火墙 | sudo ufw status |
仅开放必要端口 |
| 站点地图 | curl https://geo.example.com/sitemap.xml |
可访问 |
| robots | curl https://geo.example.com/robots.txt |
配置正确 |
| 备份任务 | crontab -l |
已配置 |
| 证书续期 | sudo certbot renew --dry-run |
测试成功 |
常用检查命令汇总:
pm2 list
pm2 logs geo-marketing --lines 100
sudo nginx -t
sudo systemctl status nginx
sudo systemctl status postgresql
sudo systemctl status redis-server
df -h
free -m
htop
curl -I https://geo.example.com
curl https://geo.example.com/api/health
二十一、常见问题与解决方案
1. 网站访问502 Bad Gateway
常见原因是后端服务没有启动、端口不一致或 Nginx 代理配置错误。
检查 PM2:
pm2 list
pm2 logs geo-marketing
检查端口:
sudo netstat -tunlp | grep 3000
检查 Nginx:
sudo nginx -t
sudo tail -f /var/log/nginx/error.log
2. HTTPS证书申请失败
可能原因包括域名未解析到服务器、80端口未开放、Nginx配置错误。
检查域名解析:
ping geo.example.com
检查端口:
sudo ufw status
重新申请:
sudo certbot --nginx -d geo.example.com
3. AI生成任务经常超时
建议把同步请求改为异步任务队列,并设置合理超时时间、重试次数和备用模型。
AI_TIMEOUT_MS=60000
AI_MAX_RETRIES=3
AI_FALLBACK_MODEL=deepseek-chat
同时检查 Worker:
pm2 logs geo-worker
4. 数据库连接失败
检查环境变量:
cat .env.production
检查 PostgreSQL 状态:
sudo systemctl status postgresql
测试连接:
psql -h localhost -U geo_user -d geo_marketing
5. 磁盘突然占满
查看磁盘:
df -h
查看大文件:
sudo du -ah /var/www/geo-marketing | sort -rh | head -n 20
清理日志前先确认是否需要备份:
pm2 flush
二十二、推荐的生产目录结构
一个清晰的生产目录结构有助于后续维护:
/var/www/geo-marketing
├── frontend
├── backend
├── uploads
├── logs
├── .env.production
├── ecosystem.config.js
└── README.md
/backup/postgres
├── geo_marketing_2025-01-01_03-00-00.dump
└── geo_marketing_2025-01-02_03-00-00.dump
文件权限建议:
sudo chown -R deploy:deploy /var/www/geo-marketing
chmod 600 /var/www/geo-marketing/.env.production
chmod -R 755 /var/www/geo-marketing/uploads
如果上传目录涉及用户文件,建议额外做文件类型校验、大小限制、病毒扫描和访问权限控制。
二十三、最终部署命令汇总
以下是一套简化版完整命令,适合快速参考。实际生产环境请根据项目结构调整。
# 1. 更新系统
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget git vim unzip htop net-tools ufw build-essential
# 2. 安装 Node.js
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
sudo npm install -g pnpm pm2
# 3. 安装 PostgreSQL 和 Redis
sudo apt install -y postgresql postgresql-contrib redis-server
sudo systemctl enable postgresql redis-server
sudo systemctl start postgresql redis-server
# 4. 配置防火墙
sudo ufw allow OpenSSH
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
# 5. 拉取代码
sudo mkdir -p /var/www
sudo chown -R deploy:deploy /var/www
cd /var/www
git clone git@github.com:your-org/geo-marketing.git
cd geo-marketing
# 6. 安装依赖和构建
pnpm install --frozen-lockfile
pnpm prisma migrate deploy
pnpm build
# 7. 启动应用
mkdir -p logs
pm2 start ecosystem.config.js
pm2 save
pm2 startup systemd
# 8. 安装 Nginx
sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
# 9. 启用站点配置
sudo ln -s /etc/nginx/sites-available/geo-marketing /etc/nginx/sites-enabled/geo-marketing
sudo nginx -t
sudo systemctl reload nginx
# 10. 配置 HTTPS
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d geo.example.com
sudo certbot renew --dry-run
结语
GEO营销的生产环境部署,不能只看“服务能不能跑起来”,更要关注稳定性、安全性、可抓取性、可恢复性和可观测性。一个优秀的GEO营销系统,应当既能服务真实用户,也能让搜索引擎、AI问答系统和生成式搜索引擎顺利理解你的品牌内容。
从技术角度看,生产部署至少要完成服务器安全加固、Node.js运行环境、数据库、缓存、Nginx、HTTPS、PM2进程守护、日志轮转、备份恢复和上线检查。从营销角度看,还要确保 sitemap.xml、robots.txt、llms.txt、结构化数据、核心内容页面、品牌实体信息和行业知识内容都能被正确访问。
当你的GEO营销平台具备稳定的生产环境后,后续才可以持续投入内容建设、品牌语义资产沉淀、AI引用监测、关键词意图覆盖、转化路径优化和多模型可见度提升。部署只是起点,稳定运行、持续优化和数据闭环,才是GEO营销真正产生长期价值的关键。