 ### 前言 宝塔面板曾经是国内适用范围最广的面板,然而似乎每个公司做大后都会想尽办法进一步收割用户。无论是绑定个人账号或者是广告植入,都难以令人继续忍受,而目前最受欢迎的替代者应该当属1panel了。 尽管采用了全容器化的部署,带来了一些上手成本,不过相对于AMH、AppNode还是更容易令人接受。 不过令人遗憾的是,官方的Docker镜像中并没有包含所依赖的库,因此没有办法直接启用,而是需要引入对应的模块文件。 ### 快速引入 博主已经编译好了所需要的两个模块文件,因此可以直接通过下载的方式快速进行引入。 首先打开1Panel的后台页面,记录下容器的名称。  比如此处OpenResty的容器名称为`1Panel-openresty-J1l8` 连接到服务器,下载模块文件并复制到Docker容器内。 ```shell export CONTAINER_NAME=1Panel-openresty-J1l8 wget https://f004.backblazeb2.com/file/letertw/br.zip unzip br.zip docker cp ngx_http_brotli_filter_module.so $CONTAINER_NAME:/usr/local/openresty/nginx/modules/ngx_http_brotli_filter_module.so docker cp ngx_http_brotli_static_module.so $CONTAINER_NAME:/usr/local/openresty/nginx/modules/ngx_http_brotli_static_module.so ``` 在1Panel的面板中进入配置文件目录`/opt/1panel/apps/openresty/openresty/conf`,编辑`nginx.conf`文件 在`user root; `下方加入如下代码 ``` load_module modules/ngx_http_brotli_filter_module.so; load_module modules/ngx_http_brotli_static_module.so; ```  同时在`gzip`配置下方加入`brotli`的配置代码 ``` brotli on; brotli_comp_level 9; brotli_static on; brotli_types application/atom+xml application/javascript application/json application/vnd.api+json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml; ```  压缩等级和类型可以对应修改,如无特殊需要直接复制即可。 然后进入应用商店已安装应用中,执行重启即可顺利开启。 ### 编译安装 首先下载`ngx_brotli`源码 ```shell git clone --recurse-submodules -j8 https://github.com/google/ngx_brotli ``` 然后下载对应版本的`openresty`源码并解压,同时进入到其中的nginx目录中 ```shell wget https://openresty.org/download/openresty-1.21.4.3.tar.gz tar -xzvf openresty-1.21.4.3.tar.gz cd openresty-1.21.4.3/bundle/nginx-1.21.4 ``` 安装开发环境,此处以AlmaLinux/RockyLinux为演示 ```shell dnf group install -y "Development Tools" ``` 执行编译,此处以root文件夹为例 ```shell ./configure --with-compat --add-dynamic-module=/path/to/ngx_brotli make modules ``` 等待编译完成后,对应编译好的模块文件将生成在`objs`文件夹内,下面的操作参考上方的`快速引入`部分即可 ### 结语 这样的模块引用方式意味着不用去重新生成对应的Docker镜像,但是每次更新完应用之后都需要手动去进行拷贝动作,还是比较繁琐,目前正在向1Panel提交这方便的建议,希望能够尽快将两个文件直接打包进后续的镜像中。 最后修改:2025 年 04 月 14 日 02 : 11 AM © 著作权归作者所有