From 9b823ba34eb5eaaaaec7c377c8afdeda5f8ddca1 Mon Sep 17 00:00:00 2001 From: cnphpbb Date: Thu, 3 Sep 2026 21:54:10 +0800 Subject: [PATCH] =?UTF-8?q?docs(mixapi):=20=E8=A1=A5=E5=85=85=20buildx=20?= =?UTF-8?q?=E5=A4=9A=E6=9E=B6=E6=9E=84=E6=9E=84=E5=BB=BA=E5=B9=B6=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E9=95=9C=E5=83=8F=E4=BB=93=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Dockerfile/compose 头部与 readme 补充 buildx 多架构(amd64+arm64)构建示例 - IMAGE_TAG 默认改指私有仓库 hub.6t7.net/cnphpbb/mixapi 并同步各处 tag --- mixapi/Dockerfile | 12 +++++++++--- mixapi/env.cfg.example | 18 ++++++++++++------ mixapi/readme.md | 31 ++++++++++++++++++++++++------- mixapi/stack.host.yml | 5 ++++- mixapi/stack.yml | 5 ++++- 5 files changed, 53 insertions(+), 18 deletions(-) diff --git a/mixapi/Dockerfile b/mixapi/Dockerfile index a35781d..ab9357c 100644 --- a/mixapi/Dockerfile +++ b/mixapi/Dockerfile @@ -2,14 +2,20 @@ # MIXAPI 镜像 — 官方无 Docker Hub 镜像,本文件从 GitHub Release # 下载官方编译好的二进制构建(与上游仓库 Dockerfile 思路一致)。 # -# build:: docker build --build-arg MIXAPI_VER=v2.5.1cl -t mixapi:v2.5.1cl . +# build:: docker build --build-arg MIXAPI_VER=v2.5.1cl -t hub.6t7.net/cnphpbb/mixapi:v2.5.1cl . +# (-t tag 需与 env.cfg 的 IMAGE_TAG 保持一致) +# buildx:: 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 . # run:: docker run --name mixapi -d --restart always -p 3000:3000 \ -# -v /data/volumes/mixapi/data:/data -e TZ=Asia/Shanghai mixapi:v2.5.1cl +# -v /data/volumes/mixapi/data:/data -e TZ=Asia/Shanghai hub.6t7.net/cnphpbb/mixapi:v2.5.1cl # # disc:: MIXAPI_VER 需与 GitHub release tag 同名,二进制命名规则: # mixapi-${MIXAPI_VER}-linux-${amd64|arm64} +# disc:: 多平台构建时每个 --platform 的 RUN 阶段都会按 apk --print-arch +# 自动下载对应架构二进制(需 QEMU/binfmt;也可 --build-arg MIXAPI_ARCH 显式指定) # disc:: 数据目录:容器内工作目录为 /data(不配置 SQL_DSN 时默认使用 -# /data/one-api.db 的 SQLite;--log-dir 未指定时日志在 /data/logs) +# /data 下的 SQLite 数据文件,文件名随版本;--log-dir 未指定时日志在 /data/logs) # ============================================================ FROM alpine:3.21 diff --git a/mixapi/env.cfg.example b/mixapi/env.cfg.example index 61e353d..760eff0 100644 --- a/mixapi/env.cfg.example +++ b/mixapi/env.cfg.example @@ -6,11 +6,17 @@ # 使用方式(在 deploy.stack 仓库根目录执行): # cp mixapi/env.cfg.example mixapi/env.cfg # $EDITOR mixapi/env.cfg # 填入真实密码后保存 +# 本地单架构构建(-t 打与 IMAGE_TAG 相同的 tag): # docker build --build-arg MIXAPI_VER=${IMAGE_TAG_VER} -t ${IMAGE_TAG} ./mixapi +# 多架构(amd64+arm64)构建并推送私有仓库: +# docker buildx build --platform linux/amd64,linux/arm64 \ +# --build-arg MIXAPI_VER=${IMAGE_TAG_VER} -t ${IMAGE_TAG} --push ./mixapi +# 然后拉起(镜像已本地存在或已推送至仓库): # docker compose -p mixapi --env-file ./mixapi/env.cfg -f ./mixapi/stack.yml up -d # # 说明:MIXAPI 官方未发布 Docker Hub 镜像(GitHub 仅提供 release 二进制), -# 故 IMAGE_TAG 指向本地构建的镜像,需先按上面命令 docker build。 +# IMAGE_TAG 默认指向私有仓库 hub.6t7.net/cnphpbb/mixapi(换仓库地址时须与 +# buildx/build 推送地址保持一致),需先按上面命令构建/推送再拉起。 # 本栈为全容器化独立部署(MIXAPI + Redis + PostgreSQL), # 容器内 PostgreSQL 会自动初始化库和账号,无需在宿主机手动建库或配置 pg_hba。 # 容器 PG 未映射宿主机端口,不会与宿主机已有的 PostgreSQL 服务产生端口冲突。 @@ -22,18 +28,18 @@ # 含 @ : / # 等字符时需做百分号转义 # - MIXAPI 首次启动无管理员账号:浏览器打开后走 /setup 页, # 创建的第一个账号即为 root(同 new-api 行为) -# - 如已把镜像推到私有仓库(如 hub.tp229.com:3500/mixapi), -# 把 IMAGE_TAG 改为仓库地址即可跳过本地 docker build +# - 换用其它私有仓库时,同步修改 IMAGE_TAG 与 buildx/build 命令里的仓库地址 # ---------- 端口 ---------- # MIXAPI Web 服务对外暴露端口(与 newapi 默认同为 3000,同机部署需改其一) PORT=3000 -# ---------- 镜像(本地构建)---------- +# ---------- 镜像(无官方 Docker Hub 镜像,走私有仓库/本地构建)---------- # MIXAPI 版本号(与 GitHub release tag 同名,如 v2.5.1cl) IMAGE_TAG_VER=v2.5.1cl -# 完整镜像引用(默认本地镜像;已推送私有仓库则改为 仓库地址/mixapi:${IMAGE_TAG_VER}) -IMAGE_TAG=mixapi:${IMAGE_TAG_VER} +# 完整镜像引用:默认 hub.6t7.net/cnphpbb/mixapi 私有仓库; +# 本地单架构可 docker build 打同名 tag 直接使用,多架构用 buildx --push +IMAGE_TAG=hub.6t7.net/cnphpbb/mixapi:${IMAGE_TAG_VER} # Redis 镜像 REDIS_IMAGE_TAG=redis:8.2 # PostgreSQL 镜像 diff --git a/mixapi/readme.md b/mixapi/readme.md index e70e7ad..068b00b 100644 --- a/mixapi/readme.md +++ b/mixapi/readme.md @@ -9,18 +9,35 @@ MIXAPI 基于 New-API/One-API 二次开发,配置语义与 `../newapi` 同源 MIXAPI 官方**没有发布 Docker Hub 镜像**:仓库 CI 与 README 的分发方式是 GitHub Release 二进制(或自行 `docker build`)。本目录 `Dockerfile` 即采用 -官方方式——构建时从 GitHub Release 下载与 `IMAGE_TAG_VER` 同名的二进制: +官方方式——构建时从 GitHub Release 下载与 `IMAGE_TAG_VER` 同名的二进制, +`IMAGE_TAG` 默认指向私有仓库 `hub.6t7.net/cnphpbb/mixapi`: ```bash -docker build --build-arg MIXAPI_VER=v2.5.1cl -t mixapi:v2.5.1cl ./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` 显式指定; -- 若已把镜像推送到私有仓库(如 `hub.tp229.com:3500/mixapi`),把 `env.cfg` - 的 `IMAGE_TAG` 改为仓库地址,即可跳过本地构建,走常规 `pull`。 +- 换用其它私有仓库时,同步修改 `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) @@ -31,8 +48,8 @@ docker build --build-arg MIXAPI_VER=v2.5.1cl -t mixapi:v2.5.1cl ./mixapi mkdir -pv /data/volumes/mixapi/{data,logs,redis,pgsql_data} cp mixapi/env.cfg.example mixapi/env.cfg && vim mixapi/env.cfg # 填密码 -# 2. 构建镜像(首次或升级版本时) -docker build --build-arg MIXAPI_VER=v2.5.1cl -t mixapi:v2.5.1cl ./mixapi +# 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 @@ -60,7 +77,7 @@ 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 mixapi:v2.5.1cl ./mixapi +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 ``` diff --git a/mixapi/stack.host.yml b/mixapi/stack.host.yml index 1d20b53..fdbb6c4 100644 --- a/mixapi/stack.host.yml +++ b/mixapi/stack.host.yml @@ -1,4 +1,7 @@ -# build:: docker build --build-arg MIXAPI_VER=v2.5.1cl -t mixapi:v2.5.1cl ./mixapi +# build:: docker build --build-arg MIXAPI_VER=v2.5.1cl -t hub.6t7.net/cnphpbb/mixapi:v2.5.1cl ./mixapi +# buildx:: 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 # path:: mkdir -pv /data/volumes/mixapi/{data,logs} # run:: docker compose -p mixapi-host --env-file ./mixapi/env.cfg -f ./mixapi/stack.host.yml up -d # disc:: 单容器部署:复用 prod-dbs 项目里的 prod-postgres(join 同一 docker 网络解析) diff --git a/mixapi/stack.yml b/mixapi/stack.yml index 8dd59aa..9bdb8b5 100644 --- a/mixapi/stack.yml +++ b/mixapi/stack.yml @@ -1,5 +1,8 @@ # path:: mkdir -pv /data/volumes/mixapi/{data,logs,redis,pgsql_data} -# build:: docker build --build-arg MIXAPI_VER=v2.5.1cl -t mixapi:v2.5.1cl ./mixapi +# build:: docker build --build-arg MIXAPI_VER=v2.5.1cl -t hub.6t7.net/cnphpbb/mixapi:v2.5.1cl ./mixapi +# buildx:: 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 # run:: docker compose -p mixapi --env-file ./mixapi/env.cfg -f ./mixapi/stack.yml up -d # disc:: 全栈容器化部署:包含 MIXAPI、Redis 缓存及 PostgreSQL 数据库 # disc:: 容器间处于自定义桥接网络 mixapi 内,内部通过服务名 postgres:5432 / redis:6379 互通