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 数据
前置准备
- 在宿主机创建数据目录(以 Linux 为例):
mkdir -p /AppHome/docker/newapi/{data,logs,postgres,redis}
- 在
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
- 依赖:
redis、postgres - 配置:通过环境变量
SQL_DSN、REDIS_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=bfmodule:name=vectorsetModule: /usr/local/lib/redis/modules//redisearch.so
处理建议:
- 确认
docker-compose.yml中 Redis 镜像为:image: redis:8.4-alpine - 删除旧的第三方 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 - 重新拉取官方镜像并启动:
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