chore: use 1Panel images and add dependency mirror fallback
This commit is contained in:
+25
-5
@@ -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
|
||||
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/ ./
|
||||
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
|
||||
COPY go.mod go.sum ./
|
||||
RUN go mod download
|
||||
@@ -13,8 +22,19 @@ COPY . .
|
||||
COPY --from=frontend /src/web/dist ./web/dist
|
||||
RUN CGO_ENABLED=0 go build -trimpath -ldflags='-s -w' -o /ai-router .
|
||||
|
||||
FROM alpine:3.23
|
||||
RUN apk add --no-cache ca-certificates && addgroup -g 10001 router && adduser -D -u 10001 -G router router
|
||||
FROM ${ALPINE_IMAGE}
|
||||
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
|
||||
RUN mkdir /app/data && chown router:router /app/data
|
||||
COPY --from=backend /ai-router /usr/local/bin/ai-router
|
||||
|
||||
@@ -23,7 +23,7 @@ HTTPS 反向代理部署时,在配置中设置 `server.public_origin: "https:/
|
||||
## Docker Compose 部署
|
||||
|
||||
需要 Docker Engine 和 Docker Compose v2。Compose 使用现有多阶段 Dockerfile
|
||||
构建前后端,容器以 UID/GID 10001 运行,SQLite 保存在命名卷 router-data 中。
|
||||
构建前后端,容器以 UID/GID 10001 运行,SQLite 保存在宿主机 ./data 目录中。
|
||||
|
||||
首次部署时创建配置(如果已有 config.yaml,请备份并编辑,不要覆盖):
|
||||
|
||||
@@ -33,6 +33,8 @@ openssl rand -hex 32
|
||||
# 将生成的随机值填入 config.yaml 的 admin.password
|
||||
sudo chown 10001:10001 config.yaml
|
||||
sudo chmod 600 config.yaml
|
||||
sudo mkdir -p data
|
||||
sudo chown 10001:10001 data
|
||||
docker compose config --quiet
|
||||
docker compose up -d --build
|
||||
docker compose ps
|
||||
@@ -60,13 +62,41 @@ HTTPS 反向代理,同时设置 server.public_origin 并禁用 SSE 代理缓
|
||||
docker compose logs -f --tail=100
|
||||
docker compose up -d --build # 更新源码后重新构建和部署
|
||||
docker compose restart # 修改配置文件后重启
|
||||
docker compose down # 停止并删除容器,保留数据库卷
|
||||
docker compose down # 停止并删除容器,保留宿主机 data 目录
|
||||
```
|
||||
|
||||
不要执行 docker compose down -v,除非明确要删除数据库卷。
|
||||
首次启动使用独立的新数据库,不会自动导入本地运行的数据。
|
||||
目录挂载的数据不会被 docker compose down -v 删除,仍需自行备份。
|
||||
不会自动导入旧命名卷 router-data 中的数据。
|
||||
迁移时先停止旧服务,备份原数据库目录(含可能存在的 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 镜像。
|
||||
基础镜像拉取失败不会自动回退,需手动替换地址;依赖软件包仍使用上述自动回退策略。
|
||||
|
||||
## 渠道与模型映射
|
||||
|
||||
|
||||
Reference in New Issue
Block a user