diff --git a/.github/workflows/check-openresty-modules.yml b/.github/workflows/check-openresty-modules.yml new file mode 100644 index 000000000000..131c42f18db4 --- /dev/null +++ b/.github/workflows/check-openresty-modules.yml @@ -0,0 +1,20 @@ +name: Check OpenResty Modules + +on: + pull_request: + paths: + - 'apps/openresty/**' + - 'scripts/check-openresty-modules.sh' + push: + branches: ['dev'] + paths: + - 'apps/openresty/**' + - 'scripts/check-openresty-modules.sh' + +jobs: + check-openresty-modules: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Verify module.json matches module.catalog.json + run: bash scripts/check-openresty-modules.sh diff --git a/apps/openresty/1.27.1.2-5-1-focal/build/Dockerfile.modules b/apps/openresty/1.27.1.2-5-1-focal/build/Dockerfile.modules new file mode 100644 index 000000000000..1f043ccf64de --- /dev/null +++ b/apps/openresty/1.27.1.2-5-1-focal/build/Dockerfile.modules @@ -0,0 +1,44 @@ +ARG RESTY_IMAGE_BASE="ubuntu" +ARG RESTY_IMAGE_TAG="focal" +ARG PANEL_OPENRESTY_VERSION="1.27.1.2-5-1-focal" + +FROM 1panel/openresty:${PANEL_OPENRESTY_VERSION} AS panel-openresty + +FROM ${RESTY_IMAGE_BASE}:${RESTY_IMAGE_TAG} AS module-builder + +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +ARG RESTY_VERSION="1.27.1.2" +ARG RESTY_J="1" +ARG RESTY_ADD_PACKAGE_BUILDDEPS="" + +RUN DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + build-essential ca-certificates curl git libgd-dev libgeoip-dev libpcre3-dev \ + libreadline-dev libssl-dev libxslt1-dev make patchelf perl unzip wget zlib1g-dev \ + ${RESTY_ADD_PACKAGE_BUILDDEPS} + +COPY tmp /tmp +COPY --from=panel-openresty /usr/local/openresty/modules/ngx_brotli /usr/local/openresty/modules/ngx_brotli + +RUN bash /tmp/module-pre.sh \ + && cd /tmp \ + && tar xzf openresty-${RESTY_VERSION}.tar.gz \ + && cd /tmp/openresty-${RESTY_VERSION} \ + && mapfile -t MODULE_CONFIG < /tmp/module-config.args \ + && ./configure -j${RESTY_J} --with-compat --with-http_ssl_module --with-stream --with-stream_ssl_module --with-http_realip_module --with-http_dav_module "${MODULE_CONFIG[@]}" \ + && NGINX_BUILD_DIR="$(find build -mindepth 1 -maxdepth 1 -type d -name 'nginx-*' | head -n 1)" \ + && test -n "${NGINX_BUILD_DIR}" \ + && make -C "${NGINX_BUILD_DIR}" -j${RESTY_J} modules \ + && mkdir -p /out/lib \ + && find "${NGINX_BUILD_DIR}/objs" -maxdepth 1 -type f -name '*.so' -exec cp -a {} /out/ \; \ + && test -n "$(find /out -maxdepth 1 -type f -name '*.so' -print -quit)" \ + && if find /usr/local/lib -maxdepth 1 -name '*.so*' -print -quit 2>/dev/null | grep -q .; then \ + find /usr/local/lib -maxdepth 1 -name '*.so*' -exec cp -a {} /out/lib/ \; ; \ + fi \ + && find /out -maxdepth 1 -type f -name '*.so' \ + -exec patchelf --set-rpath '$ORIGIN/lib:/usr/local/openresty/1pwaf/libraries' {} \; + +FROM ${RESTY_IMAGE_BASE}:${RESTY_IMAGE_TAG} AS module-output +COPY --from=module-builder /out /out +CMD ["/bin/true"] diff --git a/apps/openresty/1.27.1.2-5-1-focal/build/module.catalog.json b/apps/openresty/1.27.1.2-5-1-focal/build/module.catalog.json new file mode 100644 index 000000000000..ff9c313097a3 --- /dev/null +++ b/apps/openresty/1.27.1.2-5-1-focal/build/module.catalog.json @@ -0,0 +1,59 @@ +[ + { + "name": "ngx_brotli", + "script": "", + "packages": [ + "libbrotli-dev" + ], + "params": "--add-module=/usr/local/openresty/modules/ngx_brotli", + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 10 + }, + { + "name": "rtmp", + "script": "unzip -o /tmp/nginx-rtmp-module.zip -d /tmp", + "packages": [], + "params": "--add-module=/tmp/nginx-rtmp-module", + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 20 + }, + { + "name": "web_dav", + "script": "unzip -o /tmp/nginx-dav-ext-module.zip -d /tmp", + "packages": [], + "params": "--with-http_dav_module --add-module=/tmp/nginx-dav-ext-module", + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 30 + }, + { + "name": "geoip2", + "script": "unzip -o /tmp/ngx_http_geoip2_module.zip -d /tmp && tar -zxvf /tmp/libmaxminddb.tar.gz -C /tmp && cd /tmp/libmaxminddb && ./configure && make && make install", + "packages": [], + "params": "--add-module=/tmp/ngx_http_geoip2_module", + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 40 + }, + { + "name": "http_substitutions_filter", + "script": "unzip -o /tmp/ngx_http_substitutions_filter_module.zip -d /tmp", + "packages": [], + "params": "--add-module=/tmp/ngx_http_substitutions_filter_module", + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 50 + } +] \ No newline at end of file diff --git a/apps/openresty/1.27.1.2-5-1-focal/build/module.json b/apps/openresty/1.27.1.2-5-1-focal/build/module.json index 722238955efa..ff9c313097a3 100644 --- a/apps/openresty/1.27.1.2-5-1-focal/build/module.json +++ b/apps/openresty/1.27.1.2-5-1-focal/build/module.json @@ -1,37 +1,59 @@ [ { - "name":"ngx_brotli", - "script":"", - "packages":[], + "name": "ngx_brotli", + "script": "", + "packages": [ + "libbrotli-dev" + ], "params": "--add-module=/usr/local/openresty/modules/ngx_brotli", - "enable":false + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 10 }, { - "name":"rtmp", - "script":"unzip -o /tmp/nginx-rtmp-module.zip -d /tmp", - "packages":[], + "name": "rtmp", + "script": "unzip -o /tmp/nginx-rtmp-module.zip -d /tmp", + "packages": [], "params": "--add-module=/tmp/nginx-rtmp-module", - "enable":false + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 20 }, { - "name":"web_dav", - "script":"unzip -o /tmp/nginx-dav-ext-module.zip -d /tmp", - "packages":[], - "params": "--with-http_dav_module --add-module=/tmp/nginx-dav-ext-module", - "enable":false + "name": "web_dav", + "script": "unzip -o /tmp/nginx-dav-ext-module.zip -d /tmp", + "packages": [], + "params": "--with-http_dav_module --add-module=/tmp/nginx-dav-ext-module", + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 30 }, { - "name":"geoip2", - "script":"unzip -o /tmp/ngx_http_geoip2_module.zip -d /tmp && tar -zxvf /tmp/libmaxminddb.tar.gz -C /tmp && cd /tmp/libmaxminddb && ./configure && make && make install", - "packages":[], + "name": "geoip2", + "script": "unzip -o /tmp/ngx_http_geoip2_module.zip -d /tmp && tar -zxvf /tmp/libmaxminddb.tar.gz -C /tmp && cd /tmp/libmaxminddb && ./configure && make && make install", + "packages": [], "params": "--add-module=/tmp/ngx_http_geoip2_module", - "enable":false + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 40 }, { - "name":"http_substitutions_filter", - "script":"unzip -o /tmp/ngx_http_substitutions_filter_module.zip -d /tmp", - "packages":[], + "name": "http_substitutions_filter", + "script": "unzip -o /tmp/ngx_http_substitutions_filter_module.zip -d /tmp", + "packages": [], "params": "--add-module=/tmp/ngx_http_substitutions_filter_module", - "enable":false + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 50 } ] \ No newline at end of file diff --git a/apps/openresty/1.27.1.2-5-1-focal/conf/modules-enabled/.gitkeep b/apps/openresty/1.27.1.2-5-1-focal/conf/modules-enabled/.gitkeep new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/apps/openresty/1.27.1.2-5-1-focal/conf/modules-enabled/.gitkeep @@ -0,0 +1 @@ + diff --git a/apps/openresty/1.27.1.2-5-1-focal/conf/nginx.conf b/apps/openresty/1.27.1.2-5-1-focal/conf/nginx.conf index fa39f3c21090..b76b9946af88 100644 --- a/apps/openresty/1.27.1.2-5-1-focal/conf/nginx.conf +++ b/apps/openresty/1.27.1.2-5-1-focal/conf/nginx.conf @@ -5,6 +5,8 @@ error_log /dev/stdout notice; pid /var/run/nginx.pid; worker_rlimit_nofile 51200; +include /usr/local/openresty/nginx/conf/modules-enabled/*.conf; + events { use epoll; worker_connections 5120; diff --git a/apps/openresty/1.27.1.2-5-1-focal/docker-compose.yml b/apps/openresty/1.27.1.2-5-1-focal/docker-compose.yml index 0644301e22de..63e12d5debae 100644 --- a/apps/openresty/1.27.1.2-5-1-focal/docker-compose.yml +++ b/apps/openresty/1.27.1.2-5-1-focal/docker-compose.yml @@ -18,6 +18,8 @@ services: - ./conf/mime.types:/usr/local/openresty/nginx/conf/mime.types - ./conf/default:/usr/local/openresty/nginx/conf/default/ - ./conf/ssl:/usr/local/openresty/nginx/conf/ssl/ + - ./conf/modules-enabled:/usr/local/openresty/nginx/conf/modules-enabled/:ro + - ./modules:/usr/local/openresty/nginx/modules/1panel/:ro - ./log:/var/log/nginx - ./root:/usr/share/nginx/html - /etc/localtime:/etc/localtime diff --git a/apps/openresty/1.27.1.2-5-1-focal/scripts/init.sh b/apps/openresty/1.27.1.2-5-1-focal/scripts/init.sh index 9c981ce084f6..494e80d096ca 100755 --- a/apps/openresty/1.27.1.2-5-1-focal/scripts/init.sh +++ b/apps/openresty/1.27.1.2-5-1-focal/scripts/init.sh @@ -2,6 +2,8 @@ source ./.env +mkdir -p modules conf/modules-enabled + sed -i -E "s/(listen[[:space:]]+)80([[:space:]]*default_server;)/\1${PANEL_APP_PORT_HTTP}\2/" conf/default/00.default.conf sed -i -E "s/(listen[[:space:]]+)\[::]:80([[:space:]]*default_server;)/\1\[::]:${PANEL_APP_PORT_HTTP}\2/" conf/default/00.default.conf diff --git a/apps/openresty/1.27.1.2-5-1-focal/scripts/upgrade.sh b/apps/openresty/1.27.1.2-5-1-focal/scripts/upgrade.sh index b851a4f23671..27a0980b6e53 100644 --- a/apps/openresty/1.27.1.2-5-1-focal/scripts/upgrade.sh +++ b/apps/openresty/1.27.1.2-5-1-focal/scripts/upgrade.sh @@ -1,5 +1,17 @@ #!/bin/bash NGINX_CONF="conf/nginx.conf" +MODULE_INCLUDE="include /usr/local/openresty/nginx/conf/modules-enabled/*.conf;" + +mkdir -p modules conf/modules-enabled + +if [ ! -f "$NGINX_CONF" ]; then + echo "✗ failed: $NGINX_CONF not found" + exit 1 +fi + +if ! grep -Fq "$MODULE_INCLUDE" "$NGINX_CONF"; then + sed -i "1i$MODULE_INCLUDE" "$NGINX_CONF" +fi STREAM_BLOCK='stream { log_format streamlog '\''$remote_addr[$time_local] '\'' @@ -11,11 +23,6 @@ STREAM_BLOCK='stream { include /usr/local/openresty/nginx/conf/stream.d/*.conf; }' -if [ ! -f "$NGINX_CONF" ]; then - echo "✗ failed: $NGINX_CONF not found" - exit 1 -fi - if grep -q "stream[[:space:]]*{" "$NGINX_CONF"; then exit 0 fi diff --git a/apps/openresty/1.29.2.5-0-noble/build/Dockerfile.modules b/apps/openresty/1.29.2.5-0-noble/build/Dockerfile.modules new file mode 100644 index 000000000000..21aac0d7ce41 --- /dev/null +++ b/apps/openresty/1.29.2.5-0-noble/build/Dockerfile.modules @@ -0,0 +1,44 @@ +ARG RESTY_IMAGE_BASE="ubuntu" +ARG RESTY_IMAGE_TAG="noble" +ARG PANEL_OPENRESTY_VERSION="1.29.2.5-0-noble" + +FROM 1panel/openresty:${PANEL_OPENRESTY_VERSION} AS panel-openresty + +FROM ${RESTY_IMAGE_BASE}:${RESTY_IMAGE_TAG} AS module-builder + +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +ARG RESTY_VERSION="1.29.2.5" +ARG RESTY_J="1" +ARG RESTY_ADD_PACKAGE_BUILDDEPS="" + +RUN DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + build-essential ca-certificates curl git libgd-dev libgeoip-dev libpcre2-dev \ + libreadline-dev libssl-dev libxslt1-dev make patchelf perl unzip wget zlib1g-dev \ + ${RESTY_ADD_PACKAGE_BUILDDEPS} + +COPY tmp /tmp +COPY --from=panel-openresty /usr/local/openresty/modules/ngx_brotli /usr/local/openresty/modules/ngx_brotli + +RUN bash /tmp/module-pre.sh \ + && cd /tmp \ + && tar xzf openresty-${RESTY_VERSION}.tar.gz \ + && cd /tmp/openresty-${RESTY_VERSION} \ + && mapfile -t MODULE_CONFIG < /tmp/module-config.args \ + && ./configure -j${RESTY_J} --with-compat --with-http_ssl_module --with-stream --with-stream_ssl_module --with-http_realip_module --with-http_dav_module "${MODULE_CONFIG[@]}" \ + && NGINX_BUILD_DIR="$(find build -mindepth 1 -maxdepth 1 -type d -name 'nginx-*' | head -n 1)" \ + && test -n "${NGINX_BUILD_DIR}" \ + && make -C "${NGINX_BUILD_DIR}" -j${RESTY_J} modules \ + && mkdir -p /out/lib \ + && find "${NGINX_BUILD_DIR}/objs" -maxdepth 1 -type f -name '*.so' -exec cp -a {} /out/ \; \ + && test -n "$(find /out -maxdepth 1 -type f -name '*.so' -print -quit)" \ + && if find /usr/local/lib -maxdepth 1 -name '*.so*' -print -quit 2>/dev/null | grep -q .; then \ + find /usr/local/lib -maxdepth 1 -name '*.so*' -exec cp -a {} /out/lib/ \; ; \ + fi \ + && find /out -maxdepth 1 -type f -name '*.so' \ + -exec patchelf --set-rpath '$ORIGIN/lib:/usr/local/openresty/1pwaf/libraries' {} \; + +FROM ${RESTY_IMAGE_BASE}:${RESTY_IMAGE_TAG} AS module-output +COPY --from=module-builder /out /out +CMD ["/bin/true"] diff --git a/apps/openresty/1.29.2.5-0-noble/build/module.catalog.json b/apps/openresty/1.29.2.5-0-noble/build/module.catalog.json new file mode 100644 index 000000000000..ff9c313097a3 --- /dev/null +++ b/apps/openresty/1.29.2.5-0-noble/build/module.catalog.json @@ -0,0 +1,59 @@ +[ + { + "name": "ngx_brotli", + "script": "", + "packages": [ + "libbrotli-dev" + ], + "params": "--add-module=/usr/local/openresty/modules/ngx_brotli", + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 10 + }, + { + "name": "rtmp", + "script": "unzip -o /tmp/nginx-rtmp-module.zip -d /tmp", + "packages": [], + "params": "--add-module=/tmp/nginx-rtmp-module", + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 20 + }, + { + "name": "web_dav", + "script": "unzip -o /tmp/nginx-dav-ext-module.zip -d /tmp", + "packages": [], + "params": "--with-http_dav_module --add-module=/tmp/nginx-dav-ext-module", + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 30 + }, + { + "name": "geoip2", + "script": "unzip -o /tmp/ngx_http_geoip2_module.zip -d /tmp && tar -zxvf /tmp/libmaxminddb.tar.gz -C /tmp && cd /tmp/libmaxminddb && ./configure && make && make install", + "packages": [], + "params": "--add-module=/tmp/ngx_http_geoip2_module", + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 40 + }, + { + "name": "http_substitutions_filter", + "script": "unzip -o /tmp/ngx_http_substitutions_filter_module.zip -d /tmp", + "packages": [], + "params": "--add-module=/tmp/ngx_http_substitutions_filter_module", + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 50 + } +] \ No newline at end of file diff --git a/apps/openresty/1.29.2.5-0-noble/build/module.json b/apps/openresty/1.29.2.5-0-noble/build/module.json index 722238955efa..ff9c313097a3 100644 --- a/apps/openresty/1.29.2.5-0-noble/build/module.json +++ b/apps/openresty/1.29.2.5-0-noble/build/module.json @@ -1,37 +1,59 @@ [ { - "name":"ngx_brotli", - "script":"", - "packages":[], + "name": "ngx_brotli", + "script": "", + "packages": [ + "libbrotli-dev" + ], "params": "--add-module=/usr/local/openresty/modules/ngx_brotli", - "enable":false + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 10 }, { - "name":"rtmp", - "script":"unzip -o /tmp/nginx-rtmp-module.zip -d /tmp", - "packages":[], + "name": "rtmp", + "script": "unzip -o /tmp/nginx-rtmp-module.zip -d /tmp", + "packages": [], "params": "--add-module=/tmp/nginx-rtmp-module", - "enable":false + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 20 }, { - "name":"web_dav", - "script":"unzip -o /tmp/nginx-dav-ext-module.zip -d /tmp", - "packages":[], - "params": "--with-http_dav_module --add-module=/tmp/nginx-dav-ext-module", - "enable":false + "name": "web_dav", + "script": "unzip -o /tmp/nginx-dav-ext-module.zip -d /tmp", + "packages": [], + "params": "--with-http_dav_module --add-module=/tmp/nginx-dav-ext-module", + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 30 }, { - "name":"geoip2", - "script":"unzip -o /tmp/ngx_http_geoip2_module.zip -d /tmp && tar -zxvf /tmp/libmaxminddb.tar.gz -C /tmp && cd /tmp/libmaxminddb && ./configure && make && make install", - "packages":[], + "name": "geoip2", + "script": "unzip -o /tmp/ngx_http_geoip2_module.zip -d /tmp && tar -zxvf /tmp/libmaxminddb.tar.gz -C /tmp && cd /tmp/libmaxminddb && ./configure && make && make install", + "packages": [], "params": "--add-module=/tmp/ngx_http_geoip2_module", - "enable":false + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 40 }, { - "name":"http_substitutions_filter", - "script":"unzip -o /tmp/ngx_http_substitutions_filter_module.zip -d /tmp", - "packages":[], + "name": "http_substitutions_filter", + "script": "unzip -o /tmp/ngx_http_substitutions_filter_module.zip -d /tmp", + "packages": [], "params": "--add-module=/tmp/ngx_http_substitutions_filter_module", - "enable":false + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 50 } ] \ No newline at end of file diff --git a/apps/openresty/1.29.2.5-0-noble/conf/modules-enabled/.gitkeep b/apps/openresty/1.29.2.5-0-noble/conf/modules-enabled/.gitkeep new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/apps/openresty/1.29.2.5-0-noble/conf/modules-enabled/.gitkeep @@ -0,0 +1 @@ + diff --git a/apps/openresty/1.29.2.5-0-noble/conf/nginx.conf b/apps/openresty/1.29.2.5-0-noble/conf/nginx.conf index fa39f3c21090..b76b9946af88 100644 --- a/apps/openresty/1.29.2.5-0-noble/conf/nginx.conf +++ b/apps/openresty/1.29.2.5-0-noble/conf/nginx.conf @@ -5,6 +5,8 @@ error_log /dev/stdout notice; pid /var/run/nginx.pid; worker_rlimit_nofile 51200; +include /usr/local/openresty/nginx/conf/modules-enabled/*.conf; + events { use epoll; worker_connections 5120; diff --git a/apps/openresty/1.29.2.5-0-noble/docker-compose.yml b/apps/openresty/1.29.2.5-0-noble/docker-compose.yml index f6a44f5961d5..35f2319ab97b 100644 --- a/apps/openresty/1.29.2.5-0-noble/docker-compose.yml +++ b/apps/openresty/1.29.2.5-0-noble/docker-compose.yml @@ -18,6 +18,8 @@ services: - ./conf/mime.types:/usr/local/openresty/nginx/conf/mime.types - ./conf/default:/usr/local/openresty/nginx/conf/default/ - ./conf/ssl:/usr/local/openresty/nginx/conf/ssl/ + - ./conf/modules-enabled:/usr/local/openresty/nginx/conf/modules-enabled/:ro + - ./modules:/usr/local/openresty/nginx/modules/1panel/:ro - ./log:/var/log/nginx - ./root:/usr/share/nginx/html - /etc/localtime:/etc/localtime diff --git a/apps/openresty/1.29.2.5-0-noble/scripts/init.sh b/apps/openresty/1.29.2.5-0-noble/scripts/init.sh index 9c981ce084f6..494e80d096ca 100755 --- a/apps/openresty/1.29.2.5-0-noble/scripts/init.sh +++ b/apps/openresty/1.29.2.5-0-noble/scripts/init.sh @@ -2,6 +2,8 @@ source ./.env +mkdir -p modules conf/modules-enabled + sed -i -E "s/(listen[[:space:]]+)80([[:space:]]*default_server;)/\1${PANEL_APP_PORT_HTTP}\2/" conf/default/00.default.conf sed -i -E "s/(listen[[:space:]]+)\[::]:80([[:space:]]*default_server;)/\1\[::]:${PANEL_APP_PORT_HTTP}\2/" conf/default/00.default.conf diff --git a/apps/openresty/1.29.2.5-0-noble/scripts/upgrade.sh b/apps/openresty/1.29.2.5-0-noble/scripts/upgrade.sh index b851a4f23671..27a0980b6e53 100644 --- a/apps/openresty/1.29.2.5-0-noble/scripts/upgrade.sh +++ b/apps/openresty/1.29.2.5-0-noble/scripts/upgrade.sh @@ -1,5 +1,17 @@ #!/bin/bash NGINX_CONF="conf/nginx.conf" +MODULE_INCLUDE="include /usr/local/openresty/nginx/conf/modules-enabled/*.conf;" + +mkdir -p modules conf/modules-enabled + +if [ ! -f "$NGINX_CONF" ]; then + echo "✗ failed: $NGINX_CONF not found" + exit 1 +fi + +if ! grep -Fq "$MODULE_INCLUDE" "$NGINX_CONF"; then + sed -i "1i$MODULE_INCLUDE" "$NGINX_CONF" +fi STREAM_BLOCK='stream { log_format streamlog '\''$remote_addr[$time_local] '\'' @@ -11,11 +23,6 @@ STREAM_BLOCK='stream { include /usr/local/openresty/nginx/conf/stream.d/*.conf; }' -if [ ! -f "$NGINX_CONF" ]; then - echo "✗ failed: $NGINX_CONF not found" - exit 1 -fi - if grep -q "stream[[:space:]]*{" "$NGINX_CONF"; then exit 0 fi diff --git a/apps/openresty/1.31.1.1-0-noble/build/Dockerfile.modules b/apps/openresty/1.31.1.1-0-noble/build/Dockerfile.modules new file mode 100644 index 000000000000..99fdc2124dc4 --- /dev/null +++ b/apps/openresty/1.31.1.1-0-noble/build/Dockerfile.modules @@ -0,0 +1,44 @@ +ARG RESTY_IMAGE_BASE="ubuntu" +ARG RESTY_IMAGE_TAG="noble" +ARG PANEL_OPENRESTY_VERSION="1.31.1.1-0-noble" + +FROM 1panel/openresty:${PANEL_OPENRESTY_VERSION} AS panel-openresty + +FROM ${RESTY_IMAGE_BASE}:${RESTY_IMAGE_TAG} AS module-builder + +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +ARG RESTY_VERSION="1.31.1.1" +ARG RESTY_J="1" +ARG RESTY_ADD_PACKAGE_BUILDDEPS="" + +RUN DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + build-essential ca-certificates curl git libgd-dev libgeoip-dev libpcre2-dev \ + libreadline-dev libssl-dev libxslt1-dev make patchelf perl unzip wget zlib1g-dev \ + ${RESTY_ADD_PACKAGE_BUILDDEPS} + +COPY tmp /tmp +COPY --from=panel-openresty /usr/local/openresty/modules/ngx_brotli /usr/local/openresty/modules/ngx_brotli + +RUN bash /tmp/module-pre.sh \ + && cd /tmp \ + && tar xzf openresty-${RESTY_VERSION}.tar.gz \ + && cd /tmp/openresty-${RESTY_VERSION} \ + && mapfile -t MODULE_CONFIG < /tmp/module-config.args \ + && ./configure -j${RESTY_J} --with-compat --with-http_ssl_module --with-stream --with-stream_ssl_module --with-http_realip_module --with-http_dav_module "${MODULE_CONFIG[@]}" \ + && NGINX_BUILD_DIR="$(find build -mindepth 1 -maxdepth 1 -type d -name 'nginx-*' | head -n 1)" \ + && test -n "${NGINX_BUILD_DIR}" \ + && make -C "${NGINX_BUILD_DIR}" -j${RESTY_J} modules \ + && mkdir -p /out/lib \ + && find "${NGINX_BUILD_DIR}/objs" -maxdepth 1 -type f -name '*.so' -exec cp -a {} /out/ \; \ + && test -n "$(find /out -maxdepth 1 -type f -name '*.so' -print -quit)" \ + && if find /usr/local/lib -maxdepth 1 -name '*.so*' -print -quit 2>/dev/null | grep -q .; then \ + find /usr/local/lib -maxdepth 1 -name '*.so*' -exec cp -a {} /out/lib/ \; ; \ + fi \ + && find /out -maxdepth 1 -type f -name '*.so' \ + -exec patchelf --set-rpath '$ORIGIN/lib:/usr/local/openresty/1pwaf/libraries' {} \; + +FROM ${RESTY_IMAGE_BASE}:${RESTY_IMAGE_TAG} AS module-output +COPY --from=module-builder /out /out +CMD ["/bin/true"] diff --git a/apps/openresty/1.31.1.1-0-noble/build/module.catalog.json b/apps/openresty/1.31.1.1-0-noble/build/module.catalog.json new file mode 100644 index 000000000000..ff9c313097a3 --- /dev/null +++ b/apps/openresty/1.31.1.1-0-noble/build/module.catalog.json @@ -0,0 +1,59 @@ +[ + { + "name": "ngx_brotli", + "script": "", + "packages": [ + "libbrotli-dev" + ], + "params": "--add-module=/usr/local/openresty/modules/ngx_brotli", + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 10 + }, + { + "name": "rtmp", + "script": "unzip -o /tmp/nginx-rtmp-module.zip -d /tmp", + "packages": [], + "params": "--add-module=/tmp/nginx-rtmp-module", + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 20 + }, + { + "name": "web_dav", + "script": "unzip -o /tmp/nginx-dav-ext-module.zip -d /tmp", + "packages": [], + "params": "--with-http_dav_module --add-module=/tmp/nginx-dav-ext-module", + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 30 + }, + { + "name": "geoip2", + "script": "unzip -o /tmp/ngx_http_geoip2_module.zip -d /tmp && tar -zxvf /tmp/libmaxminddb.tar.gz -C /tmp && cd /tmp/libmaxminddb && ./configure && make && make install", + "packages": [], + "params": "--add-module=/tmp/ngx_http_geoip2_module", + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 40 + }, + { + "name": "http_substitutions_filter", + "script": "unzip -o /tmp/ngx_http_substitutions_filter_module.zip -d /tmp", + "packages": [], + "params": "--add-module=/tmp/ngx_http_substitutions_filter_module", + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 50 + } +] \ No newline at end of file diff --git a/apps/openresty/1.31.1.1-0-noble/build/module.json b/apps/openresty/1.31.1.1-0-noble/build/module.json index 722238955efa..ff9c313097a3 100644 --- a/apps/openresty/1.31.1.1-0-noble/build/module.json +++ b/apps/openresty/1.31.1.1-0-noble/build/module.json @@ -1,37 +1,59 @@ [ { - "name":"ngx_brotli", - "script":"", - "packages":[], + "name": "ngx_brotli", + "script": "", + "packages": [ + "libbrotli-dev" + ], "params": "--add-module=/usr/local/openresty/modules/ngx_brotli", - "enable":false + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 10 }, { - "name":"rtmp", - "script":"unzip -o /tmp/nginx-rtmp-module.zip -d /tmp", - "packages":[], + "name": "rtmp", + "script": "unzip -o /tmp/nginx-rtmp-module.zip -d /tmp", + "packages": [], "params": "--add-module=/tmp/nginx-rtmp-module", - "enable":false + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 20 }, { - "name":"web_dav", - "script":"unzip -o /tmp/nginx-dav-ext-module.zip -d /tmp", - "packages":[], - "params": "--with-http_dav_module --add-module=/tmp/nginx-dav-ext-module", - "enable":false + "name": "web_dav", + "script": "unzip -o /tmp/nginx-dav-ext-module.zip -d /tmp", + "packages": [], + "params": "--with-http_dav_module --add-module=/tmp/nginx-dav-ext-module", + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 30 }, { - "name":"geoip2", - "script":"unzip -o /tmp/ngx_http_geoip2_module.zip -d /tmp && tar -zxvf /tmp/libmaxminddb.tar.gz -C /tmp && cd /tmp/libmaxminddb && ./configure && make && make install", - "packages":[], + "name": "geoip2", + "script": "unzip -o /tmp/ngx_http_geoip2_module.zip -d /tmp && tar -zxvf /tmp/libmaxminddb.tar.gz -C /tmp && cd /tmp/libmaxminddb && ./configure && make && make install", + "packages": [], "params": "--add-module=/tmp/ngx_http_geoip2_module", - "enable":false + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 40 }, { - "name":"http_substitutions_filter", - "script":"unzip -o /tmp/ngx_http_substitutions_filter_module.zip -d /tmp", - "packages":[], + "name": "http_substitutions_filter", + "script": "unzip -o /tmp/ngx_http_substitutions_filter_module.zip -d /tmp", + "packages": [], "params": "--add-module=/tmp/ngx_http_substitutions_filter_module", - "enable":false + "enable": false, + "buildMode": "auto", + "provider": "local", + "dynamicSupport": "unknown", + "loadOrder": 50 } ] \ No newline at end of file diff --git a/apps/openresty/1.31.1.1-0-noble/conf/modules-enabled/.gitkeep b/apps/openresty/1.31.1.1-0-noble/conf/modules-enabled/.gitkeep new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/apps/openresty/1.31.1.1-0-noble/conf/modules-enabled/.gitkeep @@ -0,0 +1 @@ + diff --git a/apps/openresty/1.31.1.1-0-noble/conf/nginx.conf b/apps/openresty/1.31.1.1-0-noble/conf/nginx.conf index fa39f3c21090..b76b9946af88 100644 --- a/apps/openresty/1.31.1.1-0-noble/conf/nginx.conf +++ b/apps/openresty/1.31.1.1-0-noble/conf/nginx.conf @@ -5,6 +5,8 @@ error_log /dev/stdout notice; pid /var/run/nginx.pid; worker_rlimit_nofile 51200; +include /usr/local/openresty/nginx/conf/modules-enabled/*.conf; + events { use epoll; worker_connections 5120; diff --git a/apps/openresty/1.31.1.1-0-noble/docker-compose.yml b/apps/openresty/1.31.1.1-0-noble/docker-compose.yml index 0a11ea8b9664..899216e374ef 100644 --- a/apps/openresty/1.31.1.1-0-noble/docker-compose.yml +++ b/apps/openresty/1.31.1.1-0-noble/docker-compose.yml @@ -18,6 +18,8 @@ services: - ./conf/mime.types:/usr/local/openresty/nginx/conf/mime.types - ./conf/default:/usr/local/openresty/nginx/conf/default/ - ./conf/ssl:/usr/local/openresty/nginx/conf/ssl/ + - ./conf/modules-enabled:/usr/local/openresty/nginx/conf/modules-enabled/:ro + - ./modules:/usr/local/openresty/nginx/modules/1panel/:ro - ./log:/var/log/nginx - ./root:/usr/share/nginx/html - /etc/localtime:/etc/localtime diff --git a/apps/openresty/1.31.1.1-0-noble/scripts/init.sh b/apps/openresty/1.31.1.1-0-noble/scripts/init.sh index 9c981ce084f6..494e80d096ca 100755 --- a/apps/openresty/1.31.1.1-0-noble/scripts/init.sh +++ b/apps/openresty/1.31.1.1-0-noble/scripts/init.sh @@ -2,6 +2,8 @@ source ./.env +mkdir -p modules conf/modules-enabled + sed -i -E "s/(listen[[:space:]]+)80([[:space:]]*default_server;)/\1${PANEL_APP_PORT_HTTP}\2/" conf/default/00.default.conf sed -i -E "s/(listen[[:space:]]+)\[::]:80([[:space:]]*default_server;)/\1\[::]:${PANEL_APP_PORT_HTTP}\2/" conf/default/00.default.conf diff --git a/apps/openresty/1.31.1.1-0-noble/scripts/upgrade.sh b/apps/openresty/1.31.1.1-0-noble/scripts/upgrade.sh index b851a4f23671..27a0980b6e53 100644 --- a/apps/openresty/1.31.1.1-0-noble/scripts/upgrade.sh +++ b/apps/openresty/1.31.1.1-0-noble/scripts/upgrade.sh @@ -1,5 +1,17 @@ #!/bin/bash NGINX_CONF="conf/nginx.conf" +MODULE_INCLUDE="include /usr/local/openresty/nginx/conf/modules-enabled/*.conf;" + +mkdir -p modules conf/modules-enabled + +if [ ! -f "$NGINX_CONF" ]; then + echo "✗ failed: $NGINX_CONF not found" + exit 1 +fi + +if ! grep -Fq "$MODULE_INCLUDE" "$NGINX_CONF"; then + sed -i "1i$MODULE_INCLUDE" "$NGINX_CONF" +fi STREAM_BLOCK='stream { log_format streamlog '\''$remote_addr[$time_local] '\'' @@ -11,11 +23,6 @@ STREAM_BLOCK='stream { include /usr/local/openresty/nginx/conf/stream.d/*.conf; }' -if [ ! -f "$NGINX_CONF" ]; then - echo "✗ failed: $NGINX_CONF not found" - exit 1 -fi - if grep -q "stream[[:space:]]*{" "$NGINX_CONF"; then exit 0 fi diff --git a/scripts/check-openresty-modules.sh b/scripts/check-openresty-modules.sh new file mode 100644 index 000000000000..0ec951ab610d --- /dev/null +++ b/scripts/check-openresty-modules.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +# Verify that every OpenResty version keeps build/module.json and +# build/module.catalog.json byte-identical (the two files must stay in sync). +set -euo pipefail + +root_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +failed=0 + +for module_json in "${root_dir}"/apps/openresty/*/build/module.json; do + [[ -f "${module_json}" ]] || continue + catalog_json="$(dirname "${module_json}")/module.catalog.json" + if [[ ! -f "${catalog_json}" ]]; then + echo "MISSING: ${catalog_json}" + failed=1 + continue + fi + if ! diff -u "${module_json}" "${catalog_json}"; then + echo "MISMATCH: ${module_json} and ${catalog_json} differ" + failed=1 + fi +done + +if [[ "${failed}" -ne 0 ]]; then + echo "OpenResty module.json/module.catalog.json consistency check failed" + exit 1 +fi +echo "OpenResty module.json/module.catalog.json consistency check passed"