
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
https://quay.io/repository/uchiru/spa-base/status "Docker Repository on Quay"](https://quay.io/repository/uchiru/spa-base)
SPA Base是一个专为JS单页应用(SPA)设计的基础Docker镜像。它基于Nginx构建,提供静态资源服务,并集成了S3资源同步、环境变量模板替换等功能,简化SPA应用的部署流程。
/var/www目录下的静态文件适用于需要部署JS单页应用的场景,特别是:
必选环境变量
BASE_PATH:SPA所在的路径,必须以斜杠开头,不以斜杠结尾(如/profile/students)APP_NAME:应用名称,用于在S3 bucket中区分不同应用的资源S3_ID:S3 bucket的访问IDS3_KEY:S3 bucket的访问密钥S3_BUCKET:S3 bucket的名称可选环境变量
CUSTOM_CONFIG_PATH:自定义Nginx配置文件路径,其内容将被包含在server指令内MANDATORY_VARIABLES:必需环境变量列表(换行分隔),缺少这些变量时容器无法启动
DockerfileENV MANDATORY_VARIABLES=" STUDENT_HEADER_PATH JWT_AUTH_PATH "
USE_SSI:是否启用SSI指令处理,设为true时启用CSP_HEADER:Content Security Policy头内容CSP_HEADER_PATH:包含CSP头内容的文件路径CSP_REPORT_ONLY:是否启用CSP报告模式,设为true时仅报告不阻止BASE_PATH用于指定SPA在域名下的子路径,例如uchi.ru/profile/students对应的BASE_PATH=/profile/students,需与资产编译时配置一致APP_NAME用于在S3 bucket中创建独立目录,避免不同应用或环境的资产混合该镜像需作为基础镜像使用,在构建阶段复制编译后的静态文件到/var/www目录:
dockerfile# Dockerfile FROM node:10.15 as build # 构建步骤 WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build FROM spa-base COPY --from=build /app/build /var/www
构建并运行容器:
bashdocker build -t app . docker run --name app -it --rm -p 8080:80 \ -e BASE_PATH=/profile/students \ -e APP_NAME=test-1 \ -e S3_ID=your-s3-id \ -e S3_KEY=your-s3-key \ -e S3_BUCKET=uchiru-static-files app <command>
可用命令
serve(默认):启动Nginx,以/var/www为根目录提供服务upload:将资产上传至S3 bucket(用于前置步骤)serve-debug:启动Nginx调试模式启动时,JS/CSS/HTML/JSON文件中的模板字符串会通过https://github.com/stephenc/envsub%E6%9B%BF%E6%8D%A2%E4%B8%BA%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E5%80%BC%EF%BC%8C%E6%94%AF%E6%8C%81%E4%BB%A5%E4%B8%8B%E8%AF%AD%E6%B3%95%EF%BC%9A
<%VAR_NAME%>:替换为环境变量VAR_NAME的值,如变量不存在则保留原字符串<%VAR_NAME-%>:替换为环境变量VAR_NAME的值,如变量不存在则替换为空字符串<%VAR_NAME-default%>:替换为环境变量VAR_NAME的值,如变量不存在则替换为default如需限制旧版浏览器访问,可在项目根目录添加browserslist.sh文件,并在Dockerfile中复制:
dockerfileCOPY ./browserslist.sh /browserslist.sh
browserslist.sh示例:
bashexport OUTDATED=" Chrome <= 58, Firefox <= 57, Edge <=16, Safari <= 10.1, ie <= 11, ios_saf <= 10.1, Opera <= 44" export NEED_UPDATE=" Chrome <= 72, Firefox <= 68, ios_saf <= 11.1.2, Edge <=79, Safari <= 11.1.2, Opera <= 59"
OUTDATED:完全不支持的浏览器列表,用户将被重定向至https://uchi.ru/lp/old-browserNEED_UPDATE:需要更新的浏览器列表,用户将被重定向至包含返回链接的提示页,并设置1个月有效期的old_browser_lover cookie自定义配置
通过CUSTOM_CONFIG_PATH指定自定义Nginx配置文件,其内容将被包含在server指令内:
dockerfile# Dockerfile COPY nginx-custom.conf /var/nginx/ ENV CUSTOM_CONFIG_PATH=/var/nginx/nginx-custom.conf
nginx-custom.conf示例:
nginxlocation ^~ /foo/(one|two)/bar/ { rewrite ^/foo/(one|two)/(.*)$ /foo/$2; }
SSI支持
设置USE_SSI=true启用SSI指令处理:
dockerfileENV USE_SSI=true
使用SSI include virtual指令时,需通过自定义配置添加内部代理location:
nginxlocation /include-stub { internal; # 仅内部访问 proxy_pass https://uchi.ru/stub; }
Content Security Policy
通过以下环境变量配置CSP头:
dockerfile# 直接设置CSP内容 ENV CSP_HEADER "script-src 'self';" # 或从文件加载CSP内容 ENV CSP_HEADER_PATH "/app/csp-header" # 启用报告模式(仅报告不阻止) ENV CSP_REPORT_ONLY true
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务