Files
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

129 lines
5.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`
```bash
# 本地单架构构建(-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 → amd64aarch64 → arm64,跨架构构建可用
`--build-arg MIXAPI_ARCH=amd64` 显式指定;
- 换用其它私有仓库时,同步修改 `env.cfg``IMAGE_TAG` 与构建命令里的仓库地址。
### 多架构构建(buildx
一台构建机同时产出 amd64 + arm64(如 x86_64 服务器 + 树莓派)并推送私有仓库时,
用 buildx(多平台构建需 QEMU/binfmt,先 `docker buildx create --use`
多平台产物必须 `--push``--load` 只能装载本机架构镜像):
```bash
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,与宿主机已有服务互不冲突:
```bash
# 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 库隔离):
```sql
CREATE USER mixapi WITH PASSWORD '<strong-password>';
CREATE DATABASE mixapi OWNER mixapi;
```
之后:
```bash
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。
## 首次初始化
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: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` 变更会导致会话与已加密渠道失效,升级时保持原值。
## 停止与清理
```bash
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
```