Files
deploy.stack/mixapi
cnphpbb 9b823ba34e docs(mixapi): 补充 buildx 多架构构建并调整镜像仓库
- Dockerfile/compose 头部与 readme 补充 buildx 多架构(amd64+arm64)构建示例
- IMAGE_TAG 默认改指私有仓库 hub.6t7.net/cnphpbb/mixapi 并同步各处 tag
2026-09-03 21:54:10 +08:00
..

mixapi

MIXAPIhttps://github.com/aiprodcoder/MIXAPI)大模型 API 网关部署。 MIXAPI 基于 New-API/One-API 二次开发,配置语义与 ../newapi 同源 SQL_DSN / REDIS_CONN_STRING / SESSION_SECRET / --log-dir 等一致), 本目录按 ../newapi 的结构提供两套部署方案。

镜像说明(重要)

MIXAPI 官方没有发布 Docker Hub 镜像:仓库 CI 与 README 的分发方式是 GitHub Release 二进制(或自行 docker build)。本目录 Dockerfile 即采用 官方方式——构建时从 GitHub Release 下载与 IMAGE_TAG_VER 同名的二进制, IMAGE_TAG 默认指向私有仓库 hub.6t7.net/cnphpbb/mixapi

# 本地单架构构建(-t 与 env.cfg 的 IMAGE_TAG 一致;打同名 tag 后 compose 直接使用)
docker build --build-arg MIXAPI_VER=v2.5.1cl -t hub.6t7.net/cnphpbb/mixapi:v2.5.1cl ./mixapi
  • 版本号:env.cfgIMAGE_TAG_VER(默认 v2.5.1cl),需与 https://github.com/aiprodcoder/MIXAPI/releases 的 tag 同名;
  • 架构:构建机 x86_64 → amd64aarch64 → arm64,跨架构构建可用 --build-arg MIXAPI_ARCH=amd64 显式指定;
  • 换用其它私有仓库时,同步修改 env.cfgIMAGE_TAG 与构建命令里的仓库地址。

多架构构建(buildx

一台构建机同时产出 amd64 + arm64(如 x86_64 服务器 + 树莓派)并推送私有仓库时, 用 buildx(多平台构建需 QEMU/binfmt,先 docker buildx create --use 多平台产物必须 --push--load 只能装载本机架构镜像):

docker buildx build \
  --platform linux/amd64,linux/arm64 \
  --build-arg MIXAPI_VER=v2.5.1cl \
  -t hub.6t7.net/cnphpbb/mixapi:v2.5.1cl \
  --push ./mixapi

推送完成后各主机直接 docker compose ... up -d(或先 docker compose ... pull)即可。

部署方式 A:全容器化独立栈(stack.yml)

自带 PostgreSQL + Redis,与宿主机已有服务互不冲突:

# 1. 数据目录 + 环境变量
mkdir -pv /data/volumes/mixapi/{data,logs,redis,pgsql_data}
cp mixapi/env.cfg.example mixapi/env.cfg && vim mixapi/env.cfg   # 填密码

# 2. 构建镜像(首次或升级版本时;-t 与 env.cfg 的 IMAGE_TAG 一致)
docker build --build-arg MIXAPI_VER=v2.5.1cl -t hub.6t7.net/cnphpbb/mixapi:v2.5.1cl ./mixapi

# 3. 启动 / 状态 / 日志
docker compose -p mixapi --env-file ./mixapi/env.cfg -f ./mixapi/stack.yml up -d
docker compose -p mixapi -f ./mixapi/stack.yml ps
docker compose -p mixapi -f ./mixapi/stack.yml logs -f mixapi

部署方式 B:单容器复用 prod-dbs PG + Dev-Redisstack.host.yml

场景与 ../newapi/stack.host.yml 一致:本机已有 prod-dbs 项目的 PostgreSQL 和 dbSer/redis 的 Dev-Redis172.22.10.205,固定 IP,无密码)。

前置条件:

  1. prod-dbs 已启动,docker network ls 能看到 prod-dbs_default
  2. 在 prod-postgres 上为 mixapi 建库建号(与 new_api 库隔离):
CREATE USER mixapi WITH PASSWORD '<strong-password>';
CREATE DATABASE mixapi OWNER mixapi;

之后:

mkdir -pv /data/volumes/mixapi/{data,logs}
cp mixapi/env.cfg.example mixapi/env.cfg && vim mixapi/env.cfg   # 填 prod-postgres 密码
docker build --build-arg MIXAPI_VER=v2.5.1cl -t hub.6t7.net/cnphpbb/mixapi:v2.5.1cl ./mixapi
docker compose -p mixapi-host --env-file ./mixapi/env.cfg -f ./mixapi/stack.host.yml up -d

若 prod-postgres 已有可复用的专用账号,直接改 env.cfgDB_USER / DB_NAME / DB_PASSWORD 即可,无需执行上面 SQL。

首次初始化

  1. 浏览器访问 http://<host>:<PORT>(默认 3000);
  2. /setup 初始化页:创建的第一个账号即 root 管理员 (勾选「自用模式」可关闭注册/充值等对外功能);
  3. 登录后先在「设置」里配置渠道(上游 API Key)并开启缓存 (栈内已内置 Redis,无需额外配置)。

健康检查:curl http://127.0.0.1:${PORT}/api/status

端口与同机部署冲突

  • MIXAPI 与 newapi 默认端口同为 3000,同机部署两者时必须把其中一个 的 PORT 改掉(env.cfg)。
  • 全容器栈 A 的容器 PG/Redis 不映射宿主机端口,无冲突。

环境变量要点

变量 说明
SQL_DSN postgresql://user:pass@host:port/db不设置则回落使用 /data 下的 SQLite(文件名随版本,v2.5.1cl 为 mix-api.db
REDIS_CONN_STRING redis://:密码@host:6379Dev-Redis 无密码时不带 :密码@
SESSION_SECRET 会话密钥。设为字面量 random_string启动失败;留空则重启随机(登录态失效);多节点必须同值
CRYPTO_SECRET 渠道密钥加密密钥,默认取 SESSION_SECRET存量数据加密后不可变更
NODE_TYPE 多节点:主节点默认 master,从节点设 slave
STREAMING_TIMEOUT 流式无响应超时(秒),默认 120,出现空补全时调大

升级与备份

  • 升级:改 env.cfgIMAGE_TAG_VER → 重新 docker builddocker compose ... up -d(数据卷保留,无需迁移);
  • 备份:全栈 A 备份 /data/volumes/mixapi/pgsql_data;若走 SQLite 回退 则备份 /data/volumes/mixapi/data 下的数据库文件;SESSION_SECRET / CRYPTO_SECRET 变更会导致会话与已加密渠道失效,升级时保持原值。

停止与清理

docker compose -p mixapi     -f ./mixapi/stack.yml     down        # 全栈 A
docker compose -p mixapi-host -f ./mixapi/stack.host.yml down       # 方案 B
# 数据目录不随 down 删除,需要彻底清理时手动 rm -rf /data/volumes/mixapi