GeekAI 部署与运维指南
本文详细介绍了GeekAI的Docker部署方案、Nginx负载均衡配置、数据库初始化与迁移以及日志与监控方案。涵盖了从环境准备、服务配置到高可用性设计的全流程,帮助开发者快速完成GeekAI的部署与运维工作。
Docker 部署与配置
GeekAI 提供了基于 Docker 的部署方案,通过 docker-compose.yaml 文件快速启动和管理服务。本节将详细介绍如何配置和运行 GeekAI 的 Docker 环境。
1. 准备工作
在开始之前,请确保已安装以下工具:
- Docker Engine(版本 20.10.0 或更高)
- Docker Compose(版本 2.0.0 或更高)
2. 项目结构
GeekAI 的 Docker 部署目录结构如下:
deploy/
├── conf/
│ ├── config.toml
│ ├── mysql/
│ ├── nginx/
│ └── xxl-job/
├── data/
│ └── mysql/
└── docker-compose.yaml
3. 核心服务配置
以下是 docker-compose.yaml 中定义的核心服务及其配置:
3.1 MySQL 服务
geekai-mysql:
image: registry.cn-shenzhen.aliyuncs.com/geekmaster/mysql:8.0.33
ports:
- '3307:3306'
volumes:
- ./conf/mysql/my.cnf:/etc/mysql/my.cnf
- ./data/mysql/data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=your_secure_password
3.2 Redis 服务
geekai-redis:
image: registry.cn-shenzhen.aliyuncs.com/geekmaster/redis:6.0.6
ports:
- '6380:6379'
command: redis-server --requirepass your_secure_password
3.3 后端 API 服务
geekai-api:
image: registry.cn-shenzhen.aliyuncs.com/geekmaster/geekai-api:v4.1.8-amd64
ports:
- '5678:5678'
- '9999:9999'
volumes:
- ./conf/config.toml:/var/www/app/config.toml
depends_on:
- geekai-mysql
- geekai-redis
3.4 前端 Web 服务
geekai-web:
image: registry.cn-shenzhen.aliyuncs.com/geekmaster/geekai-web:v4.1.8-amd64
ports:
- '8080:8080'
volumes:
- ./conf/nginx/nginx.conf:/etc/nginx/nginx.conf
4. 配置文件详解
4.1 config.toml
MysqlDns = "root:your_secure_password@tcp(geekai-mysql:3306)/geekai_plus?charset=utf8mb4&collation=utf8mb4_unicode_ci&parseTime=True&loc=Local"
Redis.Host = "geekai-redis"
Redis.Password = "your_secure_password"
4.2 nginx.conf
client_max_body_size 100M;
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
5. 启动服务
运行以下命令启动所有服务:
docker-compose up -d
6. 验证服务
- MySQL: 检查端口
3307是否开放。 - Redis: 检查端口
6380是否开放。 - API: 访问
http://localhost:5678。 - Web: 访问
http://localhost:8080。
7. 服务依赖关系
通过以上步骤,您可以快速完成 GeekAI 的 Docker 部署与配置。
Nginx 与负载均衡设置
在 GeekAI 的部署架构中,Nginx 作为反向代理和负载均衡的核心组件,承担了请求分发、静态资源服务和 SSL 终端等重要职责。本节将详细介绍如何配置 Nginx 以实现高效的负载均衡和请求路由。
Nginx 基础配置
GeekAI 的 Nginx 基础配置文件位于 deploy/conf/nginx/nginx.conf,其主要功能包括:
- 定义全局配置(如工作进程数、日志路径等)。
- 配置 HTTP 模块的基本参数(如
sendfile、gzip等)。 - 引入子配置文件(如
conf.d/*.conf)。
以下是核心配置的示例:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
client_max_body_size 100M;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_min_length 1k;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
include /etc/nginx/conf.d/*.conf;
}
负载均衡配置
GeekAI 的负载均衡通过 Nginx 的 upstream 模块实现,支持多台后端服务器的请求分发。以下是一个典型的负载均衡配置示例:
upstream geekai_api {
server geekai-api:5678;
server backup-api:5678 backup;
}
server {
listen 80;
server_name api.geekai.com;
location / {
proxy_pass http://geekai_api;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
负载均衡策略
Nginx 支持多种负载均衡策略,GeekAI 默认使用轮询(Round Robin)策略。其他可选策略包括:
- 权重轮询:通过
weight参数分配请求比例。 - IP 哈希:通过
ip_hash确保同一客户端的请求始终转发到同一后端。 - 最少连接:通过
least_conn选择当前连接数最少的后端。
静态资源服务
Nginx 还负责提供前端静态资源(如 HTML、CSS、JS 文件)。以下是一个静态资源服务的配置示例:
server {
listen 8080;
server_name geekai.com;
location / {
root /var/www/geekai-web;
index index.html;
}
location /static/ {
alias /var/www/app/static/;
}
}
高可用与健康检查
为确保服务的高可用性,Nginx 支持对后端服务进行健康检查。GeekAI 的 Docker Compose 文件中已配置了健康检查逻辑:
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost:5678/health']
interval: 5s
timeout: 10s
retries: 3
性能优化建议
- 启用缓存:通过
proxy_cache缓存动态内容,减少后端压力。 - 调整超时:根据实际业务需求设置
proxy_connect_timeout和proxy_read_timeout。 - 日志分割:使用
logrotate定期分割日志文件,避免日志文件过大。
通过以上配置,GeekAI 的 Nginx 能够高效地处理请求分发和静态资源服务,确保系统的稳定性和可扩展性。
数据库初始化与迁移
GeekAI 的数据库初始化与迁移是项目部署过程中的关键步骤。本节将详细介绍如何完成数据库的初始化、表结构创建以及数据迁移,确保系统能够正常运行。
数据库初始化
GeekAI 使用 MySQL 作为主要数据库,所有表结构和初始数据都通过 SQL 脚本完成初始化。以下是数据库初始化的步骤:
-
准备数据库环境
确保已安装 MySQL 服务器,并创建了一个空数据库用于 GeekAI。例如:CREATE DATABASE geekai CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -
执行初始化脚本
项目提供了多个版本的 SQL 初始化脚本,位于database/目录下。选择最新版本的脚本执行:mysql -u username -p geekai < database/geekai_plus-v4.1.8.sql -
验证表结构
执行完成后,检查数据库中是否成功创建了所有表:USE geekai; SHOW TABLES;
数据迁移
当项目升级或需要从旧版本迁移数据时,可以使用以下方法:
-
增量迁移脚本
项目提供了增量迁移脚本,位于database/update-*.sql文件中。例如,从v4.1.7升级到v4.1.8:mysql -u username -p geekai < database/update-v4.1.8.sql -
手动迁移
如果需要自定义迁移,可以编写 SQL 脚本或使用 ORM 工具(如 GORM)完成数据迁移。以下是一个示例:// 使用 GORM 迁移数据 db.AutoMigrate(&models.User{}, &models.Session{}, &models.Order{})
数据库表结构示例
以下是部分核心表的结构说明:
| 表名 | 描述 | 关键字段 |
|---|---|---|
users | 用户信息表 | id, username, email |
sessions | 会话记录表 | id, user_id, content |
orders | 订单信息表 | id, user_id, amount |
流程图:数据库初始化流程
注意事项
-
备份数据
在执行迁移或初始化前,务必备份现有数据库,防止数据丢失。 -
版本兼容性
确保迁移脚本与当前项目版本兼容,避免因版本不匹配导致的问题。 -
性能优化
对于大型数据库,建议在低峰期执行迁移操作,减少对系统性能的影响。
日志与监控方案
GeekAI 作为一个功能丰富的 AI 助手解决方案,其日志与监控方案是确保系统稳定性和可维护性的关键部分。通过合理的日志记录和监控机制,可以快速定位问题、优化性能,并为运维提供数据支持。以下将详细介绍 GeekAI 的日志与监控实现方案。
日志系统设计
GeekAI 的日志系统基于 zap 高性能日志库实现,支持多级别日志记录(如 Info、Debug、Error 等),并提供了灵活的日志输出配置。日志文件默认存储在 logs/app.log 中,同时支持通过环境变量 LOG_LEVEL 动态调整日志级别。
日志级别与输出
日志级别从低到高分为:
Debug:用于调试信息,记录详细的运行状态。Info:记录常规操作信息,如服务启动、任务处理等。Error:记录错误信息,如 API 调用失败、数据库操作异常等。
日志输出格式为 JSON,便于后续分析和处理。以下是一个日志记录的代码示例:
logger.Infof("http://%s", s.Config.Listen)
logger.Errorf("register install info failed: %v", err)
日志文件管理
日志文件按天分割,避免单个文件过大。可以通过配置调整日志文件的存储路径和分割策略。例如:
Filename: "logs/app.log",
监控方案
GeekAI 的监控方案主要通过以下方式实现:
- 关键指标记录:如用户登录时间、IP 地址、API 调用频率等。
- 任务状态监控:记录 AI 任务(如 DALL-E 绘画、MJ 任务等)的执行状态和耗时。
- 异常告警:通过日志系统捕获错误信息,并结合第三方工具(如 Prometheus)实现告警。
用户行为监控
用户登录行为会被记录到数据库中,包括登录时间、IP 地址和地理位置信息。例如:
LastLoginAt int64 `json:"last_login_at"` // 最后登录时间
LastLoginIp string `json:"last_login_ip"` // 最后登录 IP
任务监控
AI 任务的执行状态和结果会被详细记录。例如,DALL-E 任务的日志如下:
logger.Infof("add a new DALL-E task to the task list: %+v", task)
logger.Errorf("error with image task: %v", err)
日志与监控流程图
以下是一个简化的日志与监控流程的流程图:
总结
GeekAI 的日志与监控方案通过高性能日志库和灵活的监控机制,确保了系统的可观测性和稳定性。开发者可以根据实际需求扩展日志记录和监控功能,进一步提升系统的运维效率。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



