chore: use 1Panel images and add dependency mirror fallback

This commit is contained in:
2026-10-23 22:44:16 +08:00
parent 7e2a4157aa
commit 343f66976c
2 changed files with 60 additions and 10 deletions
+25 -5
View File
@@ -1,11 +1,20 @@
FROM node:24-alpine AS frontend ARG NODE_IMAGE=docker.1panel.live/library/node:24-alpine
ARG GO_IMAGE=docker.1panel.live/library/golang:1.26-alpine
ARG ALPINE_IMAGE=docker.1panel.live/library/alpine:3.23
FROM ${NODE_IMAGE} AS frontend
ARG NPM_REGISTRY=auto
WORKDIR /src/web WORKDIR /src/web
COPY web/package*.json ./ COPY web/package*.json ./
RUN npm ci RUN if [ "${NPM_REGISTRY}" = auto ]; then \
npm ci --registry=https://registry.npmjs.org --fetch-retries=0 --fetch-timeout=15000 \
|| { echo 'Retrying npm install with npmmirror'; npm ci --registry=https://registry.npmmirror.com --fetch-retries=1 --fetch-timeout=30000; }; \
else npm ci --registry="${NPM_REGISTRY}"; fi
COPY web/ ./ COPY web/ ./
RUN npm run build RUN npm run build
FROM golang:1.26-alpine AS backend FROM ${GO_IMAGE} AS backend
ARG GOPROXY=https://proxy.golang.org|https://goproxy.cn|direct
WORKDIR /src WORKDIR /src
COPY go.mod go.sum ./ COPY go.mod go.sum ./
RUN go mod download RUN go mod download
@@ -13,8 +22,19 @@ COPY . .
COPY --from=frontend /src/web/dist ./web/dist COPY --from=frontend /src/web/dist ./web/dist
RUN CGO_ENABLED=0 go build -trimpath -ldflags='-s -w' -o /ai-router . RUN CGO_ENABLED=0 go build -trimpath -ldflags='-s -w' -o /ai-router .
FROM alpine:3.23 FROM ${ALPINE_IMAGE}
RUN apk add --no-cache ca-certificates && addgroup -g 10001 router && adduser -D -u 10001 -G router router ARG ALPINE_MIRROR=auto
RUN set -eu; \
if [ "${ALPINE_MIRROR}" = auto ]; then \
apk --timeout 15 add --no-cache ca-certificates \
|| { echo 'Retrying apk install with Aliyun mirror'; \
sed -i 's|https\?://dl-cdn.alpinelinux.org/alpine|https://mirrors.aliyun.com/alpine|g' /etc/apk/repositories; \
apk --timeout 30 add --no-cache ca-certificates; }; \
else \
sed -i "s|https\?://dl-cdn.alpinelinux.org/alpine|${ALPINE_MIRROR%/}|g" /etc/apk/repositories; \
apk add --no-cache ca-certificates; \
fi; \
addgroup -g 10001 router; adduser -D -u 10001 -G router router
WORKDIR /app WORKDIR /app
RUN mkdir /app/data && chown router:router /app/data RUN mkdir /app/data && chown router:router /app/data
COPY --from=backend /ai-router /usr/local/bin/ai-router COPY --from=backend /ai-router /usr/local/bin/ai-router
+35 -5
View File
@@ -23,7 +23,7 @@ HTTPS 反向代理部署时,在配置中设置 `server.public_origin: "https:/
## Docker Compose 部署 ## Docker Compose 部署
需要 Docker Engine 和 Docker Compose v2。Compose 使用现有多阶段 Dockerfile 需要 Docker Engine 和 Docker Compose v2。Compose 使用现有多阶段 Dockerfile
构建前后端,容器以 UID/GID 10001 运行,SQLite 保存在命名卷 router-data 中。 构建前后端,容器以 UID/GID 10001 运行,SQLite 保存在宿主机 ./data 目录中。
首次部署时创建配置(如果已有 config.yaml,请备份并编辑,不要覆盖): 首次部署时创建配置(如果已有 config.yaml,请备份并编辑,不要覆盖):
@@ -33,6 +33,8 @@ openssl rand -hex 32
# 将生成的随机值填入 config.yaml 的 admin.password # 将生成的随机值填入 config.yaml 的 admin.password
sudo chown 10001:10001 config.yaml sudo chown 10001:10001 config.yaml
sudo chmod 600 config.yaml sudo chmod 600 config.yaml
sudo mkdir -p data
sudo chown 10001:10001 data
docker compose config --quiet docker compose config --quiet
docker compose up -d --build docker compose up -d --build
docker compose ps docker compose ps
@@ -60,13 +62,41 @@ HTTPS 反向代理,同时设置 server.public_origin 并禁用 SSE 代理缓
docker compose logs -f --tail=100 docker compose logs -f --tail=100
docker compose up -d --build # 更新源码后重新构建和部署 docker compose up -d --build # 更新源码后重新构建和部署
docker compose restart # 修改配置文件后重启 docker compose restart # 修改配置文件后重启
docker compose down # 停止并删除容器,保留数据库卷 docker compose down # 停止并删除容器,保留宿主机 data 目录
``` ```
不要执行 docker compose down -v,除非明确要删除数据库卷。 目录挂载的数据不会被 docker compose down -v 删除,仍需自行备份。
首次启动使用独立的新数据库,不会自动导入本地运行的数据。 不会自动导入旧命名卷 router-data 中的数据。
迁移时先停止旧服务,备份原数据库目录(含可能存在的 WAL/SHM 文件), 迁移时先停止旧服务,备份原数据库目录(含可能存在的 WAL/SHM 文件),
再将数据复制到命名卷并确保 UID/GID 10001 可读写;不要让两套服务同时写同一数据库。 再将数据复制到 ./data 并确保 UID/GID 10001 可读写;不要让两套服务同时写同一数据库。
### 国内镜像源构建
默认无需指定参数,直接运行 `docker compose up -d --build` 即可自动回退:
- npm:优先官方源,安装失败后使用 npmmirror 重试一次。
- Go:依次尝试官方代理、goproxy.cn、直接获取;使用 `|` 分隔,任意代理错误均可回退。
- Alpine:优先官方源,安装失败后使用阿里云源重试一次。
这不是按地区或测速选择;npm / apk 的单次网络等待有限时,Go 使用自身网络超时。
若所有来源均失败,构建仍会报错,不跳过依赖。可通过构建参数固定依赖源(不再自动切换):
```sh
docker compose build \
--build-arg NPM_REGISTRY=https://registry.npmmirror.com \
--build-arg GOPROXY=https://goproxy.cn,direct \
--build-arg ALPINE_MIRROR=https://mirrors.aliyun.com/alpine
docker compose up -d
```
这些参数也适用于 docker build。Go 仍保留模块校验,不关闭 GOSUMDB。
镜像源可用性取决于网络环境,请只使用可信源。
FROM 基础镜像默认使用 1Panel 镜像源 docker.1panel.live/library/,
分别拉取 node:24-alpine、golang:1.26-alpine、alpine:3.23。
可通过 NODE_IMAGE、GO_IMAGE、ALPINE_IMAGE 构建参数覆盖完整镜像地址,
例如 `--build-arg NODE_IMAGE=node:24-alpine` 改回 Docker Hub 的 Node 镜像。
基础镜像拉取失败不会自动回退,需手动替换地址;依赖软件包仍使用上述自动回退策略。
## 渠道与模型映射 ## 渠道与模型映射