new-api Docker Compose 部署

new-api Docker Compose 部署

说明:本文件用于指导在本机或服务器上通过 Docker Compose 部署 new-api 服务。

同时,为公司制定 AI 资源整合的选型方案,涵盖不同 AI 模型、API 接口及数据存储方案的评估标准。方案需详细列出技术兼容性、成本控制、安全性和可扩展性等关键维度的对比指标,并结合实际业务需求给出建议选择,帮助决策团队快速确定最优整合路径。

目录结构

  • docker-compose.yml:主服务编排文件
  • .env:环境变量配置文件(包含数据库、Redis 等敏感配置)
  • /AppHome/docker/newapi:宿主机统一数据目录(需要在服务器上手动创建)
    • /AppHome/docker/newapi/data:应用业务数据
    • /AppHome/docker/newapi/logs:应用日志
    • /AppHome/docker/newapi/postgres:PostgreSQL 数据
    • /AppHome/docker/newapi/redis:Redis 数据

前置准备

  1. 在宿主机创建数据目录(以 Linux 为例):
mkdir -p /AppHome/docker/newapi/{data,logs,postgres,redis}
  1. docker-compose.yml 同级目录创建 .env 文件(示例):
POSTGRES_PASSWORD=123456   # ⚠️ 生产环境必须修改为复杂密码
REDIS_PASSWORD=123456      # ⚠️ 生产环境必须修改为复杂密码

注意:.env 文件不应提交到版本控制系统,避免泄露敏感信息。

启动与停止

启动服务

cd /AppHome/docker/newapi
# 后台启动
docker-compose up -d

启动后访问:

  • HTTP:http://<服务器IP>/(宿主机 80 端口映射到容器 3000)

查看运行状态

# 查看容器状态
docker ps

# 查看某个容器日志(例如 new-api)
docker logs -f new-api

停止服务

cd /AppHome/docker/newapi
docker-compose down

服务说明

new-api

  • 镜像:ddd.ajunyunwei.xyz/calciumion/new-api:v1.0.0-rc.4-arm64
    • 说明:该镜像为 ARM 架构专用镜像(适用于 ARM 服务器或 Apple M 系列芯片)
    • 如果在 x86_64 架构服务器部署,请替换为对应的 x86 镜像 tag,并保持 docker-compose.yml 与此文档同步
  • 端口:宿主机 80 → 容器 3000
  • 依赖:redispostgres
  • 配置:通过环境变量 SQL_DSNREDIS_CONN_STRING 等进行数据库、缓存配置

PostgreSQL(postgres)

  • 镜像:ddd.ajunyunwei.xyz/library/postgres:15
  • 数据持久化目录:/AppHome/docker/newapi/postgres
  • 默认数据库:new-api
  • 默认用户:root
  • 密码来源:.env 中的 POSTGRES_PASSWORD

Redis

  • 镜像:redis:8.4-alpine(官方镜像,避免第三方模块导致崩溃)
  • 数据持久化目录:/AppHome/docker/newapi/redis
  • 认证密码来源:.env 中的 REDIS_PASSWORD

常见问题

1. Redis 启动后异常退出 / 有 redisearch.so 模块

现象:日志中出现:

  • module:name=bf
  • module:name=vectorset
  • Module: /usr/local/lib/redis/modules//redisearch.so

处理建议

  1. 确认 docker-compose.yml 中 Redis 镜像为:
    image: redis:8.4-alpine
    
  2. 删除旧的第三方 Redis 镜像:
    docker rmi ddd.ajunyunwei.xyz/library/redis:latest || true
    docker rmi ddd.ajunyunwei.xyz/library/redis:8.4 || true
    docker rmi ddd.ajunyunwei.xyz/library/redis:8.4-alpine || true
    
  3. 重新拉取官方镜像并启动:
    docker pull redis:8.4-alpine
    docker-compose down
    docker-compose up -d
    

2. 无法访问 80 端口

  • 检查宿主机防火墙是否放行 80 端口。
  • 检查 Nginx / 其他服务是否已经占用 80 端口:
    ss -lntp | grep :80
    
  • 如已被占用,可修改 docker-compose.yml 中端口映射,例如改为 8080:3000

运维建议

  • 密码:生产环境必须使用强密码,并通过安全方式管理(如 Vault/Secret Manager)。
  • 备份:定期备份 PostgreSQL 数据目录和 Redis 数据目录。
  • 监控:建议接入 Prometheus / Grafana,对容器和服务进行监控。
  • 日志/AppHome/docker/newapi/logs 建议接入集中日志系统(如 ELK / Loki)。

docekr compose yaml

# New-API Docker Compose Configuration
# 优化版:数据统一存放至 /AppHome/docker/newapi
#
# Quick Start:
#   1. mkdir -p /AppHome/docker/newapi  # 确保宿主机目录存在

# 在 docker-compose.yml 同级目录创建 .env
# cat > .env << 'EOF'
# POSTGRES_PASSWORD=123456      # ⚠️ 生产环境必须修改!
# REDIS_PASSWORD=123456          # ⚠️ 生产环境必须修改!
# POSTGRES_MAX_CONNECTIONS=100
# EOF
#   2. docker-compose up -d
#   3. Access at http://localhost-ip
#
# ⚠️  IMPORTANT: Change all default passwords before deploying to production!

version: '3.4'

services:
  new-api:
    image: ddd.ajunyunwei.xyz/calciumion/new-api:v1.0.0-rc.4-arm64
    container_name: new-api
    restart: always
    command: --log-dir /app/logs
    ports:
      - "80:3000"
    volumes:
      - /AppHome/docker/newapi/data:/data         # 应用数据目录
      - /AppHome/docker/newapi/logs:/app/logs     # 应用日志目录
    environment:
      - SQL_DSN=postgresql://root:${POSTGRES_PASSWORD}@postgres:5432/new-api
      - REDIS_CONN_STRING=redis://:${REDIS_PASSWORD}@redis:6379
      - TZ=Asia/Shanghai
      - ERROR_LOG_ENABLED=true                    # 启用错误日志
      - BATCH_UPDATE_ENABLED=true                 # 启用批量更新
      - NODE_NAME=new-api-node-1                 # 节点名称,多实例部署时需修改
      - STREAMING_TIMEOUT=300                   # 流模式超时(秒)

    depends_on:
      - redis
      - postgres

    networks:
      - new-api-network
    healthcheck:
      test: ["CMD-SHELL", "wget -q -O - http://localhost:3000/api/status | grep -o '\"success\":\\s*true' || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s                           # 启动等待时间

  redis:
    image: ddd.ajunyunwei.xyz/library/redis:6.2-alpine
    container_name: redis
    restart: always
    command: >
      redis-server
      --requirepass ${REDIS_PASSWORD}

    volumes:
      - /AppHome/docker/newapi/redis:/data
    networks:
      - new-api-network


  postgres:
    image: ddd.ajunyunwei.xyz/library/postgres:15
    container_name: postgres
    restart: always
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: new-api
      POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C"
    volumes:
      - /AppHome/docker/newapi/postgres:/var/lib/postgresql/data  # PostgreSQL 数据持久化
    networks:
      - new-api-network


networks:
  new-api-network:
    driver: bridge


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇