404
Either this page is private or doesn't exist.
Return to Homepagediff --git a/.gitea/workflows/README.md b/.gitea/workflows/README.md deleted file mode 100644 index 60dd24f..0000000 --- a/.gitea/workflows/README.md +++ /dev/null @@ -1,121 +0,0 @@ -# NGINX CI/CD 配置说明 - -本目录包含了为 NGINX 项目定制的 Git Action 工作流配置文件。 - -## 工作流文件说明 - -### 1. `build-ubuntu.yaml` - 主要构建流程 -这是主要的构建和部署流水线,适用于生产环境: - -- **触发条件**: 代码推送和 Pull Request -- **功能**: - - 在 Ubuntu 22.04 上编译 NGINX - - 包含完整的模块配置(SSL、流处理、图像处理等) - - 创建 Docker 镜像并推送到 Harbor 仓库 - - 进行基本的功能测试 - - 上传构建产物 - -### 2. `build-multi-platform.yaml` - 多平台构建 -用于发布版本的完整构建流程: - -- **触发条件**: 标签推送、工作流手动触发 -- **功能**: - - 多 Ubuntu 版本支持(20.04、22.04) - - 配置验证和编译测试 - - 安全漏洞扫描 - - 完整的 Docker 镜像构建和发布 - -### 3. `build-dev.yaml` - 开发测试流程 -用于日常开发的快速验证: - -- **触发条件**: develop 分支和 feature 分支推送 -- **功能**: - - 快速构建(最小配置) - - 代码质量检查 - - 多编译器兼容性测试(GCC、Clang) - - 构建缓存优化 - -## 配置要点 - -### 依赖库安装 -根据 NGINX 官方文档,安装了以下依赖: -- `libpcre3-dev` - 正则表达式支持 -- `zlib1g-dev` - 压缩支持 -- `libssl-dev` - SSL/TLS 支持 -- `libxslt1-dev` - XSLT 模块 -- `libgd-dev` - 图像处理模块 -- `libgeoip-dev` - GeoIP 模块 - -### 编译配置 -使用 `./auto/configure` 脚本进行配置,主要特性: -- HTTP/2 支持 -- SSL/TLS 加密 -- 流处理模块 -- 图像过滤器 -- 地理位置模块 -- 负载均衡功能 - -### Docker 镜像 -- 基于 Ubuntu 22.04 -- 运行时优化(仅包含必要的运行时库) -- 健康检查配置 -- 非 root 用户运行 - -## 环境变量配置 - -需要在仓库设置中配置以下 Secrets: - -``` -HARBOR_REGISTRY # Harbor 仓库地址 -HARBOR_USERNAME # Harbor 用户名 -HARBOR_PASSWORD # Harbor 密码 -``` - -## 使用说明 - -### 开发流程 -1. 在 `develop` 或 `feature/*` 分支上工作 -2. 推送代码会触发 `build-dev.yaml`,进行快速验证 -3. 创建 Pull Request 到 `main` 分支 -4. 会触发完整的构建测试 - -### 发布流程 -1. 合并到 `main` 分支后,创建版本标签 -2. 推送标签会触发 `build-multi-platform.yaml` -3. 执行完整的多平台构建和安全扫描 -4. 自动构建并推送 Docker 镜像 - -### 手动触发 -可以在 Actions 页面手动触发 `build-multi-platform.yaml` 工作流。 - -## 构建产物 - -- **二进制文件**: 上传到 GitHub Actions Artifacts -- **Docker 镜像**: 推送到配置的 Harbor 仓库 -- **版本标记**: 支持语义化版本标签 - -## 故障排除 - -### 常见问题 -1. **依赖安装失败**: 检查 Ubuntu 版本和包名称 -2. **编译错误**: 查看具体的编译器错误信息 -3. **Docker 推送失败**: 检查 Harbor 凭据配置 -4. **测试失败**: 检查 NGINX 配置文件语法 - -### 调试建议 -- 查看 Actions 日志中的详细输出 -- 本地使用相同的命令进行测试 -- 检查依赖库版本兼容性 - -## 性能优化 - -- 使用 `make -j$(nproc)` 进行并行编译 -- 配置构建缓存减少重复下载 -- 分阶段构建减少单次运行时间 - -## 安全考虑 - -- 定期更新基础镜像 -- 运行 Trivy 安全扫描 -- 使用非 root 用户运行容器 -- 及时更新依赖库版本 diff --git a/.gitea/workflows/build-ubuntu.yaml b/.gitea/workflows/build-ubuntu.yaml index 141da9c..5200a17 100644 --- a/.gitea/workflows/build-ubuntu.yaml +++ b/.gitea/workflows/build-ubuntu.yaml @@ -111,6 +111,20 @@ jobs: echo "复制 nginx 文件到构建上下文..." sudo cp -r /usr/local/nginx ./nginx-install sudo chown -R $(whoami):$(whoami) ./nginx-install + + # 检查并复制前端文件 + echo "检查 app 目录..." + if [ -d "./app" ]; then + echo "发现前端应用目录,准备复制到 Nginx HTML 目录..." + mkdir -p ./nginx-install/html + cp -r ./app/* ./nginx-install/html/ + echo "前端文件已复制到 Nginx HTML 目录" + ls -la ./nginx-install/html/ + else + echo "未找到 app 目录,将使用默认 HTML 内容" + mkdir -p ./nginx-install/html + echo "
Replace this with your application.
" > ./nginx-install/html/index.html + fi - name: 创建 Dockerfile run: | diff --git a/app/404.html b/app/404.html new file mode 100644 index 0000000..a420a1c --- /dev/null +++ b/app/404.html @@ -0,0 +1,125 @@ + +在您初始化 Quartz
之后,我们可以来看看它在本地构建出来的样子:
npx quartz build --serve
+
+这将在您的计算机上启动一个本地 Web 服务器来运行 Quartz,打开浏览器并访问 http://localhost:8080/
进行查看。
要获得完整的帮助选项,您可以运行 npx quartz build --help
.
其中大多数都有合理的默认值,但如果您需要自定义设置,则可以覆盖它们:
+-d
或 --directory
: 内容文件夹,一般即 content
-v
或 --verbose
: 输出额外的日志信息
-o
或 --output
: 输出文件夹,一般即 public
--serve
: 在本地运行一个支持热重载的服务器来预览您的 Quartz
--port
: 本地服务器运行的端口
--concurrency
: 解析文档内容所使用的线程数
This is a blank Quartz installation. +See the documentation for how to get started.
=this.B&&!m[I]){m[I]=1;let Q=this.l&&I>T;Le(this,F,Q?T:I,Ae(E+(p/2>E?0:1),p,z,C-1,M-1),g,S,Q?I:T)}}}}}this.m||(this.register[g]=1)}}return this};function Ae(g,b,S,p,m){return S&&1 #${et} #${et} ${et} Try another search term? e.right?e.right:this.right)<=fe)return!1;let ue=this.y {"use strict"});function Of(t,e,r,i,n){let s=e.a,a=e.b,o=e.c,l=e.d,h=e.tx,u=e.ty;r||(r=0),i||(i=2),n||(n=t.length/i-r);let c=r*i;for(let f=0;fm.length-p.length)};function Hi(g,b,S){let p=Si(g),m=b.split(/\s+/).filter(M=>M!==""),T=0,E=m.length-1;if(S){let M=q=>p.some(z=>q.toLowerCase().startsWith(z.toLowerCase())),F=m.map(M),V=0,W=0;for(let q=0;q${Se}
+ ${Ot}
+ No results.
+ {"use strict"}),un,di=_(()=>{ir(),kt(),un={allowChildren:!0,removeChildren(t=0,e){let r=e??this.children.length,i=r-t,n=[];if(i>0&&i<=r){for(let a=r-1;a>=t;a--){let o=this.children[a];o&&(n.push(o),o.parent=null)}Sr(this.children,t,r);let s=this.renderGroup||this.parentRenderGroup;s&&s.removeChildren(n);for(let a=0;a=0;u--){let c=h[u],f=this.hitTestMoveRecursive(c,this._isInteractive(e)?e:c.eventMode,r,i,n,s||n(t,r));if(f){if(f.length>0&&!f[f.length-1].parent)continue;let d=t.isInteractive();(f.length>0||d)&&(d&&this._allInteractiveElements.push(t),f.push(t)),this._hitElements.length===0&&(this._hitElements=f),a=!0}}}let o=this._isInteractive(e),l=t.isInteractive();return l&&l&&this._allInteractiveElements.push(t),s||this._hitElements.length>0?null:a?this._hitElements:o&&!n(t,r)&&i(t,r)?l?[t]:[]:null}hitTestRecursive(t,e,r,i,n){if(this._interactivePrune(t)||n(t,r))return null;if((t.eventMode==="dynamic"||e==="dynamic")&&(pi.pauseUpdate=!1),t.interactiveChildren&&t.children){let o=t.children,l=r;for(let h=o.length-1;h>=0;h--){let u=o[h],c=this.hitTestRecursive(u,this._isInteractive(e)?e:u.eventMode,l,i,n);if(c){if(c.length>0&&!c[c.length-1].parent)continue;let f=t.isInteractive();return(c.length>0||f)&&c.push(t),c}}}let s=this._isInteractive(e),a=t.isInteractive();return s&&i(t,r)?a?[t]:[]:null}_isInteractive(t){return t==="static"||t==="dynamic"}_interactivePrune(t){return!t||!t.visible||!t.renderable||!t.measurable||t.eventMode==="none"||t.eventMode==="passive"&&!t.interactiveChildren}hitPruneFn(t,e){if(t.hitArea&&(t.worldTransform.applyInverse(e,_n),!t.hitArea.contains(_n.x,_n.y)))return!0;if(t.effects&&t.effects.length)for(let r=0;r {"use strict"});function Sx(t){return(t instanceof yr||Array.isArray(t)||t.BYTES_PER_ELEMENT)&&(t={buffer:t}),t.buffer=lf(t.buffer,!1),t}var Sn,es=_(()=>{It(),T(),Wt(),Ki(),bx(),Tx(),Sn=class extends at{constructor(t={}){super(),this.uid=Mt("geometry"),this._layoutKey=0,this.instanceCount=1,this._bounds=new m,this._boundsDirty=!0;let{attributes:e,indexBuffer:r,topology:i}=t;if(this.buffers=[],this.attributes={},e)for(let n in e)this.addAttribute(n,e[n]);this.instanceCount=t.instanceCount??1,r&&this.addIndex(r),this.topology=i||"triangle-list"}onBufferUpdate(){this._boundsDirty=!0,this.emit("update",this)}getAttribute(t){return this.attributes[t]}getIndex(){return this.indexBuffer}getBuffer(t){return this.getAttribute(t).buffer}getSize(){for(let t in this.attributes){let e=this.attributes[t];return e.buffer.data.length/(e.stride/4||e.size)}return 0}addAttribute(t,e){let r=Sx(e);this.buffers.indexOf(r.buffer)===-1&&(this.buffers.push(r.buffer),r.buffer.on("update",this.onBufferUpdate,this),r.buffer.on("change",this.onBufferUpdate,this)),this.attributes[t]=r}addIndex(t){this.indexBuffer=lf(t,!0),this.buffers.push(this.indexBuffer)}get bounds(){return this._boundsDirty?(this._boundsDirty=!1,wx(this,"aPosition",this._bounds)):this._bounds}destroy(t=!1){this.emit("destroy",this),this.removeAllListeners(),t&&this.buffers.forEach(e=>e.destroy()),this.attributes=null,this.buffers=null,this.indexBuffer=null,this._bounds=null}}}),hf,uf,cf,Ex=_(()=>{Ki(),Mi(),es(),hf=new Float32Array(1),uf=new Uint32Array(1),cf=class extends Sn{constructor(){let t=new yr({data:hf,label:"attribute-batch-buffer",usage:dt.VERTEX|dt.COPY_DST,shrinkToFit:!1}),e=new yr({data:uf,label:"index-batch-buffer",usage:dt.INDEX|dt.COPY_DST,shrinkToFit:!1}),r=6*4;super({attributes:{aPosition:{buffer:t,format:"float32x2",stride:r,offset:0},aUV:{buffer:t,format:"float32x2",stride:r,offset:2*4},aColor:{buffer:t,format:"unorm8x4",stride:r,offset:4*4},aTextureIdAndRound:{buffer:t,format:"uint16x2",stride:r,offset:5*4}},indexBuffer:e})}}});function ts(t,e){let r=zl[t];return r===void 0&&(pa[e]===void 0&&(pa[e]=1),zl[t]=r=pa[e]++),r}var pa,zl,ga=_(()=>{"use strict";pa=Object.create(null),zl=Object.create(null)});function Cx(){if(!ma){ma="mediump";let t=Kd();t&&t.getShaderPrecisionFormat&&(ma=t.getShaderPrecisionFormat(t.FRAGMENT_SHADER,t.HIGH_FLOAT).precision?"highp":"mediump")}return ma}var ma,Ax=_(()=>{Zd()});function Px(t,e,r){return e?t:r?(t=t.replace("out vec4 finalColor;",""),`
+
+ #ifdef GL_ES // This checks if it is WebGL1
+ #define in varying
+ #define finalColor gl_FragColor
+ #define texture texture2D
+ #endif
+ ${t}
+ `):`
+
+ #ifdef GL_ES // This checks if it is WebGL1
+ #define in attribute
+ #define out varying
+ #endif
+ ${t}
+ `}var Mx=_(()=>{"use strict"});function Rx(t,e,r){let i=r?e.maxSupportedFragmentPrecision:e.maxSupportedVertexPrecision;if(t.substring(0,9)!=="precision"){let n=r?e.requestedFragmentPrecision:e.requestedVertexPrecision;return n==="highp"&&i!=="highp"&&(n="mediump"),`precision ${n} float;
+${t}`}else if(i!=="highp"&&t.substring(0,15)==="precision highp")return t.replace("precision highp","precision mediump");return t}var kx=_(()=>{"use strict"});function Bx(t,e){return e?`#version 300 es
+${t}`:t}var Ix=_(()=>{"use strict"});function Ox(t,{name:e="pixi-program"},r=!0){e=e.replace(/\s+/g,"-"),e+=r?"-fragment":"-vertex";let i=r?df:ff;return i[e]?(i[e]++,e+=`-${i[e]}`):i[e]=1,t.indexOf("#define SHADER_NAME")!==-1?t:`${`#define SHADER_NAME ${e}`}
+${t}`}var df,ff,Gx=_(()=>{"use strict";df={},ff={}});function Fx(t,e){return e?t.replace("#version 300 es",""):t}var Dx=_(()=>{"use strict"}),_a,va,jl,Zi,En=_(()=>{ga(),Ax(),Mx(),kx(),Ix(),Gx(),Dx(),_a={stripVersion:Fx,ensurePrecision:Rx,addProgramDefines:Px,setProgramName:Ox,insertVersion:Bx},va=Object.create(null),jl=class zc{constructor(e){e={...zc.defaultOptions,...e};let r=e.fragment.indexOf("#version 300 es")!==-1,i={stripVersion:r,ensurePrecision:{requestedFragmentPrecision:e.preferredFragmentPrecision,requestedVertexPrecision:e.preferredVertexPrecision,maxSupportedVertexPrecision:"highp",maxSupportedFragmentPrecision:Cx()},setProgramName:{name:e.name},addProgramDefines:r,insertVersion:r},n=e.fragment,s=e.vertex;Object.keys(_a).forEach(a=>{let o=i[a];n=_a[a](n,o,!0),s=_a[a](s,o,!1)}),this.fragment=n,this.vertex=s,this.transformFeedbackVaryings=e.transformFeedbackVaryings,this._key=ts(`${this.vertex}:${this.fragment}`,"gl-program")}destroy(){this.fragment=null,this.vertex=null,this._attributeData=null,this._uniformData=null,this._uniformBlockData=null,this.transformFeedbackVaryings=null}static from(e){let r=`${e.vertex}:${e.fragment}`;return va[r]||(va[r]=new zc(e)),va[r]}},jl.defaultOptions={preferredVertexPrecision:"highp",preferredFragmentPrecision:"mediump"},Zi=jl});function Ri(t){return Vl[t]??Vl.float32}var Vl,Cn=_(()=>{"use strict";Vl={uint8x2:{size:2,stride:2,normalised:!1},uint8x4:{size:4,stride:4,normalised:!1},sint8x2:{size:2,stride:2,normalised:!1},sint8x4:{size:4,stride:4,normalised:!1},unorm8x2:{size:2,stride:2,normalised:!0},unorm8x4:{size:4,stride:4,normalised:!0},snorm8x2:{size:2,stride:2,normalised:!0},snorm8x4:{size:4,stride:4,normalised:!0},uint16x2:{size:2,stride:4,normalised:!1},uint16x4:{size:4,stride:8,normalised:!1},sint16x2:{size:2,stride:4,normalised:!1},sint16x4:{size:4,stride:8,normalised:!1},unorm16x2:{size:2,stride:4,normalised:!0},unorm16x4:{size:4,stride:8,normalised:!0},snorm16x2:{size:2,stride:4,normalised:!0},snorm16x4:{size:4,stride:8,normalised:!0},float16x2:{size:2,stride:4,normalised:!1},float16x4:{size:4,stride:8,normalised:!1},float32:{size:1,stride:4,normalised:!1},float32x2:{size:2,stride:8,normalised:!1},float32x3:{size:3,stride:12,normalised:!1},float32x4:{size:4,stride:16,normalised:!1},uint32:{size:1,stride:4,normalised:!1},uint32x2:{size:2,stride:8,normalised:!1},uint32x3:{size:3,stride:12,normalised:!1},uint32x4:{size:4,stride:16,normalised:!1},sint32:{size:1,stride:4,normalised:!1},sint32x2:{size:2,stride:8,normalised:!1},sint32x3:{size:3,stride:12,normalised:!1},sint32x4:{size:4,stride:16,normalised:!1}}});function Ux({source:t,entryPoint:e}){let r={},i=t.indexOf(`fn ${e}`);if(i!==-1){let n=t.indexOf("->",i);if(n!==-1){let s=t.substring(i,n),a=/@location\((\d+)\)\s+([a-zA-Z0-9_]+)\s*:\s*([a-zA-Z0-9_<>]+)(?:,|\s|$)/g,o;for(;(o=a.exec(s))!==null;){let l=pf[o[3]]??"float32";r[o[2]]={location:parseInt(o[1],10),format:l,stride:Ri(l).stride,offset:0,instance:!1,start:0}}}}return r}var pf,Lx=_(()=>{Cn(),pf={f32:"float32","vec2r!=u>r&&e<(h-o)*((r-l)/(u-l))+o&&(i=!i)}return i}strokeContains(e,r,i,n=.5){let s=i*i,a=s*(1-n),o=s-a,{points:l}=this,h=l.length-(this.closePath?0:2);for(let u=0;ua?u:a}return e.x=i,e.width=n-i,e.y=s,e.height=a-s,e}copyFrom(e){return this.points=e.points.slice(),this.closePath=e.closePath,this}copyTo(e){return e.copyFrom(this),e}toString(){return`[pixi.js/math:PolygoncloseStroke=${this.closePath}points=${this.points.reduce((e,r)=>`${e}, ${r}`,"")}]`}get lastX(){return this.points[this.points.length-2]}get lastY(){return this.points[this.points.length-1]}get x(){return this.points[this.points.length-2]}get y(){return this.points[this.points.length-1]}}}),ds,Tp,h0=_(()=>{S(),ds=(t,e,r,i,n,s,a)=>{let o=t-r,l=e-i,h=Math.sqrt(o*o+l*l);return h>=n-s&&h<=n+a},Tp=class ly{constructor(e=0,r=0,i=0,n=0,s=20){this.type="roundedRectangle",this.x=e,this.y=r,this.width=i,this.height=n,this.radius=s}getBounds(e){return e||(e=new b),e.x=this.x,e.y=this.y,e.width=this.width,e.height=this.height,e}clone(){return new ly(this.x,this.y,this.width,this.height,this.radius)}copyFrom(e){return this.x=e.x,this.y=e.y,this.width=e.width,this.height=e.height,this}copyTo(e){return e.copyFrom(this),e}contains(e,r){if(this.width<=0||this.height<=0)return!1;if(e>=this.x&&e<=this.x+this.width&&r>=this.y&&r<=this.y+this.height){let i=Math.max(0,Math.min(this.radius,Math.min(this.width,this.height)/2));if(r>=this.y+i&&r<=this.y+this.height-i||e>=this.x+i&&e<=this.x+this.width-i)return!0;let n=e-(this.x+i),s=r-(this.y+i),a=i*i;if(n*n+s*s<=a||(n=e-(this.x+this.width-i),n*n+s*s<=a)||(s=r-(this.y+this.height-i),n*n+s*s<=a)||(n=e-(this.x+i),n*n+s*s<=a))return!0}return!1}strokeContains(e,r,i,n=.5){let{x:s,y:a,width:o,height:l,radius:h}=this,u=i*(1-n),c=i-u,f=s+h,d=a+h,y=o-h*2,x=l-h*2,v=s+o,w=a+l;return(e>=s-u&&e<=s+c||e>=v-c&&e<=v+u)&&r>=d&&r<=d+x||(r>=a-u&&r<=a+c||r>=w-c&&r<=w+u)&&e>=f&&e<=f+y?!0:e