上一篇 下一篇 分享链接 返回 返回顶部

GEO营销系统上线实战:从服务器配置到HTTPS部署全流程命令指南

发布人:慈云数据-客服中心 发布时间:15小时前 阅读量:5

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

如果你的后端服务运行在 30008080 端口,建议不要直接开放给公网,而是只通过 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.xmlrobots.txtllms.txt、结构化数据、核心内容页面、品牌实体信息和行业知识内容都能被正确访问。

当你的GEO营销平台具备稳定的生产环境后,后续才可以持续投入内容建设、品牌语义资产沉淀、AI引用监测、关键词意图覆盖、转化路径优化和多模型可见度提升。部署只是起点,稳定运行、持续优化和数据闭环,才是GEO营销真正产生长期价值的关键。

目录结构
全文