本教程以云罗 GEO 3.0 / 抖去推 GEO (主流 GEO 优化系统)为例,提供从环境准备到生产上线的完整部署流程,包含Docker 容器化部署 (推荐)和宝塔面板快速部署两种方案,兼顾新手与企业级需求。

一、部署前准备
1.1 硬件配置要求
表格
| 环境类型 | CPU | 内存 | 硬盘 | 网络 | 备注 |
|---|---|---|---|---|---|
| 测试环境 | 2 核 | 4GB | 20GB SSD | 100Mbps | 最低配置,仅用于功能测试 |
| 生产环境 | 4 核 + | 8GB+ | 50GB+ SSD | 1Gbps | 推荐配置,支持高并发访问 |
| 大规模部署 | 8 核 + | 16GB+ | 100GB+ SSD 阵列 | 10Gbps | 适配大数据量与高并发场景 |
1.2 软件环境要求
表格
| 组件 | 版本要求 | 用途 |
|---|---|---|
| 操作系统 | CentOS 7/8、Ubuntu 20.04+/24.04 LTS | 推荐 Linux 系统,兼容性更优 |
| Docker | 20.10+ | 容器化部署核心工具 |
| Docker Compose | 2.10+ | 多容器编排管理 |
| Git | 2.30+ | 源码拉取工具 |
| MySQL | 8.0+ | 主数据库(存储业务数据) |
| Redis | 6.2+ | 缓存数据库(支持 GEO 数据类型) |
| Nginx | 1.21+ | 反向代理与负载均衡 |
1.3 必备资源
- 服务器(公网 IP,开放 80/443/3306/6379 端口)
- 已备案域名(生产环境必需)
- GEO 源码包(官方授权获取)
- HTTPS 证书(Let's Encrypt 免费证书或商业证书)
二、Docker 容器化部署方案(推荐)
2.1 安装 Docker 与 Docker Compose
bash
运行
# 1. 安装依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # CentOS
sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl software-properties-common # Ubuntu
# 2. 添加Docker源
curl -fsSL https://download.docker.com/linux/centos/docker-ce.repo | sudo tee /etc/yum.repos.d/docker-ce.repo # CentOS
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg # Ubuntu
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" # Ubuntu
# 3. 安装Docker
sudo yum install -y docker-ce docker-ce-cli containerd.io # CentOS
sudo apt install -y docker-ce docker-ce-cli containerd.io # Ubuntu
# 4. 启动Docker并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 5. 安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 6. 验证安装
docker --version
docker-compose --version
2.2 拉取 GEO 源码与配置文件
bash
运行
# 1. 创建项目目录
mkdir -p /data/geo && cd /data/geo
# 2. 克隆源码(替换为实际仓库地址)
git clone https://github.com/yunluogeo/geo-core-3.0.git .
# 3. 复制配置文件模板
cp .env.example .env
cp docker-compose.example.yml docker-compose.yml
2.3 配置系统参数(关键步骤)
-
修改.env 文件(核心配置):
bash
运行
vi .envini
# 基础配置 APP_NAME=YunLuoGeo APP_ENV=production # 生产环境设为production,测试环境设为local APP_KEY=base64:your_application_key # 执行php artisan key:generate生成 APP_DEBUG=false # 生产环境设为false APP_URL=https://yourdomain.com # 替换为你的域名 # 数据库配置 DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=yunluogeo DB_USERNAME=geo_user DB_PASSWORD=your_secure_password # 自定义强密码 # Redis配置 REDIS_HOST=redis REDIS_PASSWORD=null REDIS_PORT=6379 # GEO核心配置 GEO_API_KEY=your_geo_api_key # 官方授权密钥 GEO_MAX_DISTANCE=100 # 最大搜索距离(公里) GEO_DEFAULT_RADIUS=5 # 默认搜索半径(公里) -
修改 docker-compose.yml:
bash
运行
vi docker-compose.ymlyaml
version: '3.8' services: web: build: . ports: - "80:80" - "443:443" volumes: - ./nginx/ssl:/etc/nginx/ssl # 挂载HTTPS证书 - ./storage:/var/www/html/storage depends_on: - mysql - redis restart: always mysql: image: mysql:8.0 volumes: - ./mysql/data:/var/lib/mysql - ./mysql/conf:/etc/mysql/conf.d environment: MYSQL_ROOT_PASSWORD: your_root_password MYSQL_DATABASE: yunluogeo MYSQL_USER: geo_user MYSQL_PASSWORD: your_secure_password restart: always redis: image: redis:6.2-alpine volumes: - ./redis/data:/data command: redis-server --appendonly yes restart: always
2.4 部署 HTTPS 证书
bash
运行
# 1. 创建证书目录
mkdir -p /data/geo/nginx/ssl
# 2. 复制证书文件(替换为你的证书路径)
cp /path/to/your/cert.pem /data/geo/nginx/ssl/
cp /path/to/your/key.pem /data/geo/nginx/ssl/
# 3. 或使用Let's Encrypt生成免费证书
sudo apt install -y certbot # Ubuntu
sudo yum install -y certbot # CentOS
certbot certonly --standalone -d yourdomain.com
cp /etc/letsencrypt/live/yourdomain.com/fullchain.pem /data/geo/nginx/ssl/cert.pem
cp /etc/letsencrypt/live/yourdomain.com/privkey.pem /data/geo/nginx/ssl/key.pem
2.5 启动服务与初始化系统
bash
运行
# 1. 构建并启动容器
docker-compose up -d --build
# 2. 验证容器状态(确保所有服务为Up状态)
docker-compose ps
# 3. 进入Web容器执行初始化
docker-compose exec web bash
# 4. 生成应用密钥
php artisan key:generate
# 5. 数据库迁移(创建表结构)
php artisan migrate --seed
# 6. 导入初始数据(行业关键词库、GeoIP数据库)
php artisan db:seed --class=GeoSeed
php artisan geo:import:geoip
php artisan geo:import:keywords
# 7. 清除缓存
php artisan cache:clear
php artisan config:clear
php artisan route:clear
# 8. 退出容器
exit
2.6 访问系统与验证功能
- 打开浏览器访问:
https://yourdomain.com - 输入管理员账号密码(默认 admin/admin123,建议立即修改)
- 验证核心功能:
- 位置搜索测试
- 数据导入导出
- API 接口调用测试(
https://yourdomain.com/api/geo/search?lat=39.90&lng=116.40&radius=5)
三、宝塔面板快速部署方案(适合新手)
3.1 安装宝塔面板
bash
运行
# CentOS系统
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
# Ubuntu/Debian系统
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh
安装完成后,记录面板地址、用户名和密码。
3.2 配置服务器环境
-
登录宝塔面板,安装 LNMP 环境:
- Nginx 1.21+
- MySQL 8.0+
- PHP 8.1+(需安装 fileinfo、redis 扩展)
- Redis 6.2+
-
开放端口:在面板安全设置中开放 80、443、3306、6379 端口
3.3 上传源码与配置站点
-
新建站点:
- 域名:填写已备案域名
- 数据库:创建 MySQL 数据库(记录账号密码)
- PHP 版本:选择 8.1+
-
上传源码:
- 将 GEO 源码包上传到站点根目录
- 解压源码,设置运行目录为
public
-
配置伪静态:选择 ThinkPHP 规则并保存
3.4 系统安装与初始化
- 访问域名进入安装向导
- 填写数据库信息(宝塔创建的数据库账号密码)
- 设置管理员账号密码(建议强密码)
- 完成 GeoIP 地域数据库、关键词库导入
- 登录系统,验证功能正常
四、生产环境优化与安全加固
4.1 性能优化
-
数据库优化:
- 开启 MySQL 慢查询日志,优化 SQL 语句
- 为地理位置字段添加空间索引
- 配置 MySQL 主从复制,实现读写分离
-
Redis 优化:
- 设置最大内存策略(
maxmemory-policy allkeys-lru) - 开启持久化(RDB+AOF 混合模式)
- 配置连接池参数,提升并发性能
- 设置最大内存策略(
-
Nginx 优化:
- 开启 gzip 压缩
- 配置缓存策略
- 启用 HTTP/2 协议
4.2 安全加固
-
修改默认端口:
- MySQL 端口改为非 3306
- Redis 端口改为非 6379,并设置密码
-
权限控制:
- 限制数据库用户仅能访问指定数据库
- 设置网站目录权限为 755,文件权限为 644
- 禁用 PHP 危险函数(exec、system 等)
-
数据备份:
- 配置定时备份脚本,每日备份数据库
- 备份文件异地存储
- 定期测试恢复流程
五、常见问题与避坑指南
-
编译错误 :
undefined reference to xxx- 原因:依赖库版本不兼容
- 解决:核对 GEO 源码文档中的依赖版本要求,重新安装对应版本的库
-
连接数据库失败
- 原因:数据库配置错误、网络不通、权限问题
- 解决:
- 检查.env 文件中的数据库配置
- 确保数据库容器正常运行
- 验证数据库用户权限
-
GEO 搜索功能异常
- 原因:GeoIP 数据库未导入、Redis 未启用 GEO 功能
- 解决:
- 执行
php artisan geo:import:geoip导入 GeoIP 数据库 - 确保 Redis 版本≥6.2,且配置正确
- 执行
-
性能问题
- 原因:服务器配置不足、缓存未启用、SQL 语句未优化
- 解决:
- 升级服务器配置
- 启用 Redis 缓存
- 优化慢查询 SQL 语句
六、总结与下一步
本教程提供了两种主流的 GEO 源码部署方案,Docker 容器化部署适合企业级生产环境,宝塔面板部署适合新手快速上手。部署完成后,建议:
- 进行全面的功能测试和压力测试
- 配置监控系统(如 Prometheus+Grafana),实时监控服务状态
- 定期更新系统和依赖库,修复安全漏洞
- 参考官方文档,深入学习 GEO 系统的高级功能和 API 接口