# 开源项目门户（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 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

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
