- Dockerfile/compose 头部与 readme 补充 buildx 多架构(amd64+arm64)构建示例 - IMAGE_TAG 默认改指私有仓库 hub.6t7.net/cnphpbb/mixapi 并同步各处 tag
mixapi
MIXAPI(https://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.cfg中IMAGE_TAG_VER(默认v2.5.1cl),需与 https://github.com/aiprodcoder/MIXAPI/releases 的 tag 同名; - 架构:构建机 x86_64 → amd64,aarch64 → arm64,跨架构构建可用
--build-arg MIXAPI_ARCH=amd64显式指定; - 换用其它私有仓库时,同步修改
env.cfg的IMAGE_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-Redis(stack.host.yml)
场景与 ../newapi/stack.host.yml 一致:本机已有 prod-dbs 项目的
PostgreSQL 和 dbSer/redis 的 Dev-Redis(172.22.10.205,固定 IP,无密码)。
前置条件:
prod-dbs已启动,docker network ls能看到prod-dbs_default;- 在 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.cfg的DB_USER/DB_NAME/DB_PASSWORD即可,无需执行上面 SQL。
首次初始化
- 浏览器访问
http://<host>:<PORT>(默认 3000); - 走
/setup初始化页:创建的第一个账号即 root 管理员 (勾选「自用模式」可关闭注册/充值等对外功能); - 登录后先在「设置」里配置渠道(上游 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:6379;Dev-Redis 无密码时不带 :密码@ |
SESSION_SECRET |
会话密钥。设为字面量 random_string 会启动失败;留空则重启随机(登录态失效);多节点必须同值 |
CRYPTO_SECRET |
渠道密钥加密密钥,默认取 SESSION_SECRET;存量数据加密后不可变更 |
NODE_TYPE |
多节点:主节点默认 master,从节点设 slave |
STREAMING_TIMEOUT |
流式无响应超时(秒),默认 120,出现空补全时调大 |
升级与备份
- 升级:改
env.cfg的IMAGE_TAG_VER→ 重新docker build→docker 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