56 lines
2.1 KiB
Docker
56 lines
2.1 KiB
Docker
# 开源项目门户(VitePress)构建镜像
|
|
#
|
|
# 构建参数:
|
|
# SITE_BASE —— 站点资源前缀,同时决定容器内 nginx 的形态:
|
|
# /www/ 子路径形态:挂在已有网关的 /www/ 路径下
|
|
# / 独立域名形态:站点独占域名根路径
|
|
# BASE_REGISTRY —— 基础镜像来源,默认官方 docker.io 的 library 命名空间。
|
|
# 部分内网机器拉不动 docker.io(实测 192.168.101.164 直连
|
|
# registry-1.docker.io 超时),换代理源即可:
|
|
# docker build --build-arg BASE_REGISTRY=docker.m.daocloud.io/library ...
|
|
# 形如 <registry>/<命名空间段>,需包含镜像自身的命名空间
|
|
# (如 docker.io/library、docker.m.daocloud.io/library)。
|
|
#
|
|
# 用法(仓库根目录):
|
|
# docker build -t snowgoat-open-portal:dev \
|
|
# --build-arg SITE_BASE=/ \
|
|
# --build-arg BASE_REGISTRY=docker.m.daocloud.io/library .
|
|
ARG BASE_REGISTRY=docker.io/library
|
|
|
|
# 统一补上结尾斜杠,调用方传 "docker.m.daocloud.io/library" 或带斜杠都能拼对
|
|
FROM ${BASE_REGISTRY%/}/node:22-alpine AS builder
|
|
|
|
ARG SITE_BASE=/www/
|
|
ARG BASE_REGISTRY
|
|
|
|
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
|
|
&& apk add --no-cache git
|
|
|
|
WORKDIR /app
|
|
|
|
COPY package*.json .npmrc ./
|
|
RUN npm ci
|
|
|
|
COPY . .
|
|
RUN SITE_BASE=${SITE_BASE} npm run build
|
|
|
|
FROM ${BASE_REGISTRY%/}/nginx:1.27-alpine
|
|
|
|
ARG SITE_BASE=/www/
|
|
ARG BASE_REGISTRY
|
|
|
|
COPY --from=builder /app/.vitepress/dist /usr/share/nginx/html
|
|
COPY docker/nginx.root.conf /etc/nginx/conf.d/default.conf
|
|
COPY docker/nginx.prefix.conf /tmp/nginx.prefix.conf
|
|
RUN set -eu; \
|
|
base="${SITE_BASE%/}"; \
|
|
if [ "$base" = "" ]; then \
|
|
echo "门户形态:独立域名(根路径)"; \
|
|
else \
|
|
sed -e "s|__SITE_BASE__|${SITE_BASE}|g" -e "s|__SITE_BASE_NO_SLASH__|${base}|g" \
|
|
/tmp/nginx.prefix.conf > /etc/nginx/conf.d/default.conf; \
|
|
echo "门户形态:子路径 ${SITE_BASE}"; \
|
|
fi
|
|
|
|
EXPOSE 80
|