d78379486c
- website/:VitePress 官网工程(首页/功能/对比/快速开始/部署运维/教程/社区),与文档站同构 - 两种形态由 SITE_BASE 决定:/www/ 子路径(过渡)与 / 根路径(独立域名),内容同源 - deploy/:新增 with-website profile、网关 /www/ 路由、多域名 website vhost 段 - Makefile:新增 website 镜像条目与 make website 目标 - 教程页给出部署/使用两支视频的元数据与录制要求,官网留有教程入口
50 lines
1.7 KiB
Docker
50 lines
1.7 KiB
Docker
# 官网(开源版门户站)构建镜像
|
||
#
|
||
# 与 docs/ 同一套构建思路:Node 构建 VitePress 产物,Nginx 托管静态文件。
|
||
#
|
||
# 构建参数:
|
||
# SITE_BASE —— 站点资源前缀,同时决定容器内 nginx 的形态:
|
||
# /www/ 过渡形态:挂在统一网关的 /www/ 路径下(没有独立域名时用)
|
||
# / 独立域名形态:站点独占域名根路径
|
||
#
|
||
# 前缀与 nginx 形态必须配套:VitePress 产物里的资源引用是绝对路径
|
||
# (<base>assets/xxx),base=/www/ 时只能由带 alias 的 location 提供服务;
|
||
# base=/ 时只能由根路径 location 提供服务。混用会出现「页面 200 但 JS/CSS 全 404」。
|
||
#
|
||
# 用法(仓库根目录):
|
||
# docker build -f website/Dockerfile -t iotlcm-website:dev \
|
||
# --build-arg SITE_BASE=/www/ website/
|
||
FROM node:22-alpine AS builder
|
||
|
||
ARG SITE_BASE=/www/
|
||
|
||
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 nginx:1.27-alpine
|
||
|
||
ARG SITE_BASE=/www/
|
||
|
||
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
|