forked from DevOps/deploy.stack
docs(mixapi): 补充 buildx 多架构构建并调整镜像仓库
- Dockerfile/compose 头部与 readme 补充 buildx 多架构(amd64+arm64)构建示例 - IMAGE_TAG 默认改指私有仓库 hub.6t7.net/cnphpbb/mixapi 并同步各处 tag
This commit is contained in:
+9
-3
@@ -2,14 +2,20 @@
|
|||||||
# MIXAPI 镜像 — 官方无 Docker Hub 镜像,本文件从 GitHub Release
|
# MIXAPI 镜像 — 官方无 Docker Hub 镜像,本文件从 GitHub Release
|
||||||
# 下载官方编译好的二进制构建(与上游仓库 Dockerfile 思路一致)。
|
# 下载官方编译好的二进制构建(与上游仓库 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 \
|
# 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 同名,二进制命名规则:
|
# disc:: MIXAPI_VER 需与 GitHub release tag 同名,二进制命名规则:
|
||||||
# mixapi-${MIXAPI_VER}-linux-${amd64|arm64}
|
# mixapi-${MIXAPI_VER}-linux-${amd64|arm64}
|
||||||
|
# disc:: 多平台构建时每个 --platform 的 RUN 阶段都会按 apk --print-arch
|
||||||
|
# 自动下载对应架构二进制(需 QEMU/binfmt;也可 --build-arg MIXAPI_ARCH 显式指定)
|
||||||
# disc:: 数据目录:容器内工作目录为 /data(不配置 SQL_DSN 时默认使用
|
# disc:: 数据目录:容器内工作目录为 /data(不配置 SQL_DSN 时默认使用
|
||||||
# /data/one-api.db 的 SQLite;--log-dir 未指定时日志在 /data/logs)
|
# /data 下的 SQLite 数据文件,文件名随版本;--log-dir 未指定时日志在 /data/logs)
|
||||||
# ============================================================
|
# ============================================================
|
||||||
|
|
||||||
FROM alpine:3.21
|
FROM alpine:3.21
|
||||||
|
|||||||
+12
-6
@@ -6,11 +6,17 @@
|
|||||||
# 使用方式(在 deploy.stack 仓库根目录执行):
|
# 使用方式(在 deploy.stack 仓库根目录执行):
|
||||||
# cp mixapi/env.cfg.example mixapi/env.cfg
|
# cp mixapi/env.cfg.example mixapi/env.cfg
|
||||||
# $EDITOR mixapi/env.cfg # 填入真实密码后保存
|
# $EDITOR mixapi/env.cfg # 填入真实密码后保存
|
||||||
|
# 本地单架构构建(-t 打与 IMAGE_TAG 相同的 tag):
|
||||||
# docker build --build-arg MIXAPI_VER=${IMAGE_TAG_VER} -t ${IMAGE_TAG} ./mixapi
|
# 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
|
# docker compose -p mixapi --env-file ./mixapi/env.cfg -f ./mixapi/stack.yml up -d
|
||||||
#
|
#
|
||||||
# 说明:MIXAPI 官方未发布 Docker Hub 镜像(GitHub 仅提供 release 二进制),
|
# 说明:MIXAPI 官方未发布 Docker Hub 镜像(GitHub 仅提供 release 二进制),
|
||||||
# 故 IMAGE_TAG 指向本地构建的镜像,需先按上面命令 docker build。
|
# IMAGE_TAG 默认指向私有仓库 hub.6t7.net/cnphpbb/mixapi(换仓库地址时须与
|
||||||
|
# buildx/build 推送地址保持一致),需先按上面命令构建/推送再拉起。
|
||||||
# 本栈为全容器化独立部署(MIXAPI + Redis + PostgreSQL),
|
# 本栈为全容器化独立部署(MIXAPI + Redis + PostgreSQL),
|
||||||
# 容器内 PostgreSQL 会自动初始化库和账号,无需在宿主机手动建库或配置 pg_hba。
|
# 容器内 PostgreSQL 会自动初始化库和账号,无需在宿主机手动建库或配置 pg_hba。
|
||||||
# 容器 PG 未映射宿主机端口,不会与宿主机已有的 PostgreSQL 服务产生端口冲突。
|
# 容器 PG 未映射宿主机端口,不会与宿主机已有的 PostgreSQL 服务产生端口冲突。
|
||||||
@@ -22,18 +28,18 @@
|
|||||||
# 含 @ : / # 等字符时需做百分号转义
|
# 含 @ : / # 等字符时需做百分号转义
|
||||||
# - MIXAPI 首次启动无管理员账号:浏览器打开后走 /setup 页,
|
# - MIXAPI 首次启动无管理员账号:浏览器打开后走 /setup 页,
|
||||||
# 创建的第一个账号即为 root(同 new-api 行为)
|
# 创建的第一个账号即为 root(同 new-api 行为)
|
||||||
# - 如已把镜像推到私有仓库(如 hub.tp229.com:3500/mixapi),
|
# - 换用其它私有仓库时,同步修改 IMAGE_TAG 与 buildx/build 命令里的仓库地址
|
||||||
# 把 IMAGE_TAG 改为仓库地址即可跳过本地 docker build
|
|
||||||
|
|
||||||
# ---------- 端口 ----------
|
# ---------- 端口 ----------
|
||||||
# MIXAPI Web 服务对外暴露端口(与 newapi 默认同为 3000,同机部署需改其一)
|
# MIXAPI Web 服务对外暴露端口(与 newapi 默认同为 3000,同机部署需改其一)
|
||||||
PORT=3000
|
PORT=3000
|
||||||
|
|
||||||
# ---------- 镜像(本地构建)----------
|
# ---------- 镜像(无官方 Docker Hub 镜像,走私有仓库/本地构建)----------
|
||||||
# MIXAPI 版本号(与 GitHub release tag 同名,如 v2.5.1cl)
|
# MIXAPI 版本号(与 GitHub release tag 同名,如 v2.5.1cl)
|
||||||
IMAGE_TAG_VER=v2.5.1cl
|
IMAGE_TAG_VER=v2.5.1cl
|
||||||
# 完整镜像引用(默认本地镜像;已推送私有仓库则改为 仓库地址/mixapi:${IMAGE_TAG_VER})
|
# 完整镜像引用:默认 hub.6t7.net/cnphpbb/mixapi 私有仓库;
|
||||||
IMAGE_TAG=mixapi:${IMAGE_TAG_VER}
|
# 本地单架构可 docker build 打同名 tag 直接使用,多架构用 buildx --push
|
||||||
|
IMAGE_TAG=hub.6t7.net/cnphpbb/mixapi:${IMAGE_TAG_VER}
|
||||||
# Redis 镜像
|
# Redis 镜像
|
||||||
REDIS_IMAGE_TAG=redis:8.2
|
REDIS_IMAGE_TAG=redis:8.2
|
||||||
# PostgreSQL 镜像
|
# PostgreSQL 镜像
|
||||||
|
|||||||
+24
-7
@@ -9,18 +9,35 @@ MIXAPI 基于 New-API/One-API 二次开发,配置语义与 `../newapi` 同源
|
|||||||
|
|
||||||
MIXAPI 官方**没有发布 Docker Hub 镜像**:仓库 CI 与 README 的分发方式是
|
MIXAPI 官方**没有发布 Docker Hub 镜像**:仓库 CI 与 README 的分发方式是
|
||||||
GitHub Release 二进制(或自行 `docker build`)。本目录 `Dockerfile` 即采用
|
GitHub Release 二进制(或自行 `docker build`)。本目录 `Dockerfile` 即采用
|
||||||
官方方式——构建时从 GitHub Release 下载与 `IMAGE_TAG_VER` 同名的二进制:
|
官方方式——构建时从 GitHub Release 下载与 `IMAGE_TAG_VER` 同名的二进制,
|
||||||
|
`IMAGE_TAG` 默认指向私有仓库 `hub.6t7.net/cnphpbb/mixapi`:
|
||||||
|
|
||||||
```bash
|
```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`),需与
|
- 版本号:`env.cfg` 中 `IMAGE_TAG_VER`(默认 `v2.5.1cl`),需与
|
||||||
https://github.com/aiprodcoder/MIXAPI/releases 的 tag 同名;
|
https://github.com/aiprodcoder/MIXAPI/releases 的 tag 同名;
|
||||||
- 架构:构建机 x86_64 → amd64,aarch64 → arm64,跨架构构建可用
|
- 架构:构建机 x86_64 → amd64,aarch64 → arm64,跨架构构建可用
|
||||||
`--build-arg MIXAPI_ARCH=amd64` 显式指定;
|
`--build-arg MIXAPI_ARCH=amd64` 显式指定;
|
||||||
- 若已把镜像推送到私有仓库(如 `hub.tp229.com:3500/mixapi`),把 `env.cfg`
|
- 换用其它私有仓库时,同步修改 `env.cfg` 的 `IMAGE_TAG` 与构建命令里的仓库地址。
|
||||||
的 `IMAGE_TAG` 改为仓库地址,即可跳过本地构建,走常规 `pull`。
|
|
||||||
|
### 多架构构建(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)
|
## 部署方式 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}
|
mkdir -pv /data/volumes/mixapi/{data,logs,redis,pgsql_data}
|
||||||
cp mixapi/env.cfg.example mixapi/env.cfg && vim mixapi/env.cfg # 填密码
|
cp mixapi/env.cfg.example mixapi/env.cfg && vim mixapi/env.cfg # 填密码
|
||||||
|
|
||||||
# 2. 构建镜像(首次或升级版本时)
|
# 2. 构建镜像(首次或升级版本时;-t 与 env.cfg 的 IMAGE_TAG 一致)
|
||||||
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
|
||||||
|
|
||||||
# 3. 启动 / 状态 / 日志
|
# 3. 启动 / 状态 / 日志
|
||||||
docker compose -p mixapi --env-file ./mixapi/env.cfg -f ./mixapi/stack.yml up -d
|
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
|
```bash
|
||||||
mkdir -pv /data/volumes/mixapi/{data,logs}
|
mkdir -pv /data/volumes/mixapi/{data,logs}
|
||||||
cp mixapi/env.cfg.example mixapi/env.cfg && vim mixapi/env.cfg # 填 prod-postgres 密码
|
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
|
docker compose -p mixapi-host --env-file ./mixapi/env.cfg -f ./mixapi/stack.host.yml up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -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}
|
# 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
|
# 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 网络解析)
|
# disc:: 单容器部署:复用 prod-dbs 项目里的 prod-postgres(join 同一 docker 网络解析)
|
||||||
|
|||||||
+4
-1
@@ -1,5 +1,8 @@
|
|||||||
# path:: mkdir -pv /data/volumes/mixapi/{data,logs,redis,pgsql_data}
|
# 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
|
# run:: docker compose -p mixapi --env-file ./mixapi/env.cfg -f ./mixapi/stack.yml up -d
|
||||||
# disc:: 全栈容器化部署:包含 MIXAPI、Redis 缓存及 PostgreSQL 数据库
|
# disc:: 全栈容器化部署:包含 MIXAPI、Redis 缓存及 PostgreSQL 数据库
|
||||||
# disc:: 容器间处于自定义桥接网络 mixapi 内,内部通过服务名 postgres:5432 / redis:6379 互通
|
# disc:: 容器间处于自定义桥接网络 mixapi 内,内部通过服务名 postgres:5432 / redis:6379 互通
|
||||||
|
|||||||
Reference in New Issue
Block a user