Nginx運維之路(Docker多段構建新版本并增加第三方模塊)

喜大普奔,前兩天發現Nginx竟然自帶支持了ACME功能,讓我很想測試一下,但是發現手頭沒有資源讓我測試,忽然我想到可以用docker來構建nginx然后測試ACME功能,在這個過程中發現原來官方Nginx鏡像并沒有集成ACME插件,只有少的可憐的幾個插件測試不了acme,這怎么能忍,所以我就想是否能夠自行編譯第三方插件并加入到新Nginx鏡像中,那么話不多說開干!喜歡折騰的朋友也可以加群一起討論哦!如果無法看到圖片可以私信哈!

1.創建Dockerfile

root@wolfan-NUC9V7QNX:~/Docker_Build_image#?cat?Dockerfile
#?使用?nginx:1.29.1?作為構建基礎鏡像
FROM?nginx:1.29.1?AS?build#?安裝構建依賴
RUN?apt-get?update?&&?apt-get?install?-y?--no-install-recommends?\build-essential?\curl?\git?\libpcre3-dev?\libssl-dev?\zlib1g-dev?\ca-certificates?\libxml2-dev?\libxslt1-dev?\pkg-config?\openssl?\build-essential?\libtool?\libssl-dev?\libpcre2-dev?\zlib1g-dev?\pkg-config?\wget?\clang?\libclang-dev?\&&?rm?-rf?/var/lib/apt/lists/*#?安裝?Rust?和?Cargo
RUN?curl?--proto?'=https'?--tlsv1.2?-sSf?https://sh.rustup.rs?|?sh?-s?--?--default-toolchain?stable?-y#?設置環境變量
ENV?PATH="/root/.cargo/bin:$PATH"#?驗證?Rust?和?Cargo?是否安裝成功
RUN?echo?$PATH?&&?ls?/root/.cargo/bin?&&?cargo?--version#?下載?Nginx?源代碼
RUN?curl?-fSL?https://nginx.org/download/nginx-1.29.1.tar.gz?-o?nginx.tar.gz?\&&?tar?-xzvf?nginx.tar.gz?\&&?cd?nginx-1.29.1RUN?git?clone?https://github.com/openresty/echo-nginx-module.git?/tmp/echo-nginx-module?\&&?git?clone?https://github.com/vozlt/nginx-module-vts.git?/tmp/nginx-module-vts?\&&?git?clone?https://github.com/openresty/rds-json-nginx-module.git?/tmp/rds-json-nginx-module?\&&?git?clone?https://github.com/openresty/memc-nginx-module.git?/tmp/memc-nginx-module?\&&?git?clone?https://github.com/yaoweibin/ngx_http_substitutions_filter_module.git?/tmp/ngx_http_substitutions_filter_module?\&&?git?clone?https://github.com/openresty/redis2-nginx-module.git?/tmp/redis2-nginx-module?\&&?git?clone?https://github.com/openresty/headers-more-nginx-module.git?/tmp/headers-more-nginx-module?\&&?git?clone?https://github.com/FRiCKLE/ngx_cache_purge.git?/tmp/ngx_cache_purge?\&&?git?clone?https://github.com/nginx/nginx-acme.git?/tmp/nginx-acme#?配置和編譯?Nginx
RUN?cd?nginx-1.29.1?\&&?./configure?--with-compat?\--with-file-aio?\--with-threads?\--with-http_addition_module?\--with-http_auth_request_module?\--with-http_dav_module?\--with-http_flv_module?\--with-http_gunzip_module?\--with-http_gzip_static_module?\--with-http_mp4_module?\--with-http_random_index_module?\--with-http_realip_module?\--with-http_secure_link_module?\--with-http_slice_module?\--with-http_ssl_module?\--with-http_stub_status_module?\--with-http_sub_module?\--with-http_v2_module?\--with-http_v3_module?\--with-mail?\--with-mail_ssl_module?\--with-stream?\--with-stream_realip_module?\--with-stream_ssl_module?\--with-stream_ssl_preread_module?\--add-dynamic-module=/tmp/echo-nginx-module?\--add-dynamic-module=/tmp/redis2-nginx-module?\--add-dynamic-module=/tmp/nginx-module-vts?\--add-dynamic-module=/tmp/rds-json-nginx-module?\--add-dynamic-module=/tmp/memc-nginx-module?\--add-dynamic-module=/tmp/ngx_http_substitutions_filter_module?\--add-dynamic-module=/tmp/headers-more-nginx-module?\--add-dynamic-module=/tmp/ngx_cache_purge?\--add-dynamic-module=/tmp/nginx-acme?\&&?make?-j$(nproc)?modules?\&&?mkdir?-pv?/usr/lib/nginx/modules?\&&?cp?objs/*.so?/usr/lib/nginx/modules/?\&&?cd?..?\&&?rm?-rf?nginx-1.29.1?nginx.tar.gz?/tmp/*#?第二階段:最小化的運行環境
FROM?nginx:1.29.1#?復制編譯好的模塊
COPY?--from=build?/usr/lib/nginx/modules/*.so?/usr/lib/nginx/modules/#?創建?Nginx?的默認目錄
RUN?mkdir?-p?/etc/nginx/conf.d?/var/log/nginx#?復制自定義配置文件(可選)
#COPY?nginx.conf?/etc/nginx/nginx.conf#?暴露端口
EXPOSE?80?443#?啟動?Nginx
CMD?["nginx",?"-g",?"daemon?off;"]


構建命令

root@wolfan-NUC9V7QNX:~/Docker_Build_image# docker build -t wolf-nginx-mulit:1.29.1 .
[+] Building 1.1s (15/15) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 4.20kB 0.0s
=> [internal] load metadata for docker.io/library/nginx:1.29.1 0.9s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [build 1/9] FROM docker.io/library/nginx:1.29.1@sha256:d5f28ef21aabddd098f3dbc21fe5b7a7d7a184720bc07da0b 0.0s
=> CACHED [build 2/9] RUN apt-get update && apt-get install -y --no-install-recommends build-essential 0.0s
=> CACHED [build 3/9] RUN wget https://github.com/LuaJIT/LuaJIT/archive/refs/tags/v2.1.0-beta3.tar.gz && 0.0s
=> CACHED [build 4/9] RUN ls /usr/local/include/luajit-2.1 0.0s
=> CACHED [build 5/9] RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-to 0.0s
=> CACHED [build 6/9] RUN echo /root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bi 0.0s
=> CACHED [build 7/9] RUN curl -fSL https://nginx.org/download/nginx-1.29.1.tar.gz -o nginx.tar.gz && tar 0.0s
=> CACHED [build 8/9] RUN git clone https://github.com/openresty/echo-nginx-module.git /tmp/echo-nginx-modu 0.0s
=> CACHED [build 9/9] RUN cd nginx-1.29.1 && ./configure --with-compat --with-file-aio --with-threads 0.0s
=> CACHED [stage-1 2/3] COPY --from=build /usr/lib/nginx/modules/*.so /usr/lib/nginx/modules/ 0.0s
=> CACHED [stage-1 3/3] RUN mkdir -p /etc/nginx/conf.d /var/log/nginx 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:eebda8668546569b99b80b701783c788de6be06cceaddfa2a44a88a454c1cdd3 0.0s
=> => naming to docker.io/library/wolf-nginx-mulit:1.29.1 0.0s

What's Next?

  1. 1. Sign in to your Docker account → docker login
  2. 2. View a summary of image vulnerabilities and recommendations → docker scout quickview

2.為什么要多段構建

多段構建就是為了保持最小的鏡像體積(下面就是多段構建和沒有多段構建的區別)

root@wolfan-NUC9V7QNX:~/Docker_Build_image#?docker?images?|grep?1.29
wolf-nginx-mulit?????????????????????????????????????????????????1.29.1?????????????????????????eebda8668546???7?hours?ago?????206MB
wolf-nginx-nomulit???????????????????????????????????????????????1.29.1?????????????????????????f5fe69dfb6f3???7?hours?ago?????2.42GB

3.啟動一個nginx看是否有了加載的模塊

# 啟動一個容器并查看ID
root@wolfan-NUC9V7QNX:~/Docker_Build_image# docker run -it -d --name wolf-nginx-mulit wolf-nginx-mulit:1.29.1
f49189c25fe5b80f135df3396098c6019216f89c7d5524d012c68d78522cd777
root@wolfan-NUC9V7QNX:~/Docker_Build_image# docker ps |grep wolf-nginx-mulit
f49189c25fe5   wolf-nginx-mulit:1.29.1                                                 "/docker-entrypoint.…"    10 seconds ago   Up 9 seconds             80/tcp, 443/tcp                                                                                wolf-nginx-mulit
# 進入已經啟動的容器
root@wolfan-NUC9V7QNX:~/Docker_Build_image# docker exec -it f49189c25fe5 /bin/bash
# 可以看到所有模塊
root@f49189c25fe5:/# ls /usr/lib/nginx/modules/
ngx_http_acme_module.so			ngx_http_image_filter_module-debug.so  ngx_http_rds_json_filter_module.so	ngx_http_xslt_filter_module.so
ngx_http_echo_module.so			ngx_http_image_filter_module.so        ngx_http_redis2_module.so		ngx_stream_geoip_module-debug.so
ngx_http_geoip_module-debug.so		ngx_http_js_module-debug.so	       ngx_http_subs_filter_module.so		ngx_stream_geoip_module.so
ngx_http_geoip_module.so		ngx_http_js_module.so		       ngx_http_vhost_traffic_status_module.so	ngx_stream_js_module-debug.so
ngx_http_headers_more_filter_module.so	ngx_http_memc_module.so		       ngx_http_xslt_filter_module-debug.so	ngx_stream_js_module.so

因為折騰一天流水線改造,所以功能上我還沒有驗證,應該沒什么問題,待我邊整理流水線邊把acme這個功能輸出給大家!

image-20250908171958500

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921837.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921837.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921837.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DrissionPage 優化天貓店鋪商品爬蟲:現代化網頁抓取技術詳解

概述在網絡數據采集領域,傳統的爬蟲方法通常面臨反爬機制、動態內容加載和效率低下等挑戰。本文將以天貓店鋪商品爬蟲為例,詳細介紹如何從傳統的 Requests 庫遷移到更現代化的 DrissionPage 解決方案,實現更高效、穩定的數據采集。----------…

pytest并發測試,資源問題導致用例失敗解決辦法

遇見的問題: 測試用例使用thrift資源和redis資源,單獨運行case沒有問題,但是使用并發pytest-xdist(-n 10 和 --distloadscope)運行失敗原因: 測試用例間存在共享資源競爭(如 Redis、Thrift 連接…

C 盤又滿了?6 個「零風險清理法」+5 款神器,讓電腦瞬間多出 100GB 空間

你是否遇到過這樣的場景:正在趕工寫報告,突然彈出「C 盤存儲空間不足」的警告;想安裝新軟件,卻因為 C 盤爆紅而反復失敗;甚至電腦越來越卡,開機要等 5 分鐘,打開文件夾都要轉圈…… 作為系統盤…

Android 項目:畫圖白板APP開發(四)——筆鋒(單 Path)

上一章講解了如何通過多個 Path 疊加形成筆鋒效果,還有另外的方式實現筆鋒,并且只需要一條Path就可以了。在講解具體方案之前,我們需要了解一個有意思的工具 PathMeasure ,這是一個非常強大且實用的工具,常用于高級動畫…

從C++開始的編程生活(7)——取地址運算符重載、類型轉換、static成員和友元

前言 本系列文章承接C語言的學習,需要有C語言的基礎才能學會哦~ 第7篇主要講的是有關于C的取地址運算符重載、類型轉換、static成員和友元。 C才起步,都很簡單 目錄 前言 取地址運算符重載 const成員函數 基本語法 特點 取地址運算符重載 類型轉換…

SQL 入門指南:排序與分頁查詢(ORDER BY 多字段排序、LIMIT 分頁實戰)

在 SQL 查詢中,我們常需要 “按報名時間先后看活動名單”“只看第 2 頁的活動報名數據”—— 這些需求靠基礎查詢無法實現,而ORDER BY(排序) 和LIMIT(分頁) 就是解決這類問題的核心工具。今天我們用 “校園…

jodconverter將word轉pdf底層libreoffice的問題

近期項目中使用了word轉pdf的功能&#xff0c;其中借助了遠程服務的jodconverter來處理。 <dependency><groupId>org.jodconverter</groupId><artifactId>jodconverter-remote</artifactId><version>4.4.2</version> </dependen…

【為YOLOv11Seg添加MFC界面】詳細指南

要將現有的YOLOv11Seg代碼集成到MFC界面中,我們需要創建一個MFC應用程序框架,并將現有的檢測邏輯封裝到其中。以下是詳細步驟: 1. 創建MFC應用程序框架 1.1 使用Visual Studio創建MFC項目 打開Visual Studio,選擇"創建新項目" 選擇"MFC應用程序"模板…

機器學習03——線性模型(多元線性回歸、對數線性回歸、二分類、線性判別分析)

上一章&#xff1a;機器學習02——模型評估與選擇 下一章&#xff1a;機器學習04——決策樹 機器學習實戰項目&#xff1a;【從 0 到 1 落地】機器學習實操項目目錄&#xff1a;覆蓋入門到進階&#xff0c;大學生就業 / 競賽必備 文章目錄一、線性模型的基本形式&#xff08;一…

qt QLineSeries詳解

1、概述QLineSeries是Qt Charts模塊中的一個重要類&#xff0c;用于繪制折線圖。它是QXYSeries的實現類&#xff0c;將信息顯示為由直線連接的一系列數據點。該類為QAbstractSeries的子類&#xff0c;因此可以通過該類來訪問QAbstractSeries的所有公共方法和屬性。2、重要方法c…

你再也找不到更詳細的3DGS教程了 —— 一萬九千字長文解析3DGS

參考: https://www.bilibili.com/video/BV1MF4m1V7e3/ https://blog.csdn.net/2401_86810419/article/details/148811121 https://www.bilibili.com/video/BV1cz421872F?t=233.9 https://wuli.wiki/online/SphHar.html https://zhuanlan.zhihu.com/p/467466131 特別指出…

Python,遺傳算法與神經網絡架構搜索:基于DEAP的自動模型設計

引言&#xff1a;當進化論遇見深度學習——自動化的黎明在深度學習的蠻荒時代&#xff0c;我們是“手工匠人”。我們依靠直覺、前輩的經驗&#xff08;ResNet 為什么是152層而不是153層&#xff1f;&#xff09;、大量的試錯以及那么一點點玄學&#xff0c;在架構的黑暗森林中摸…

Vue框架技術詳解——項目驅動概念理解【前端】【Vue】

Vue3框架 是前端渲染框架瀏覽器向服務器第一次發送請求&#xff0c;就會將所有頁面的樣式全部返回到瀏覽器vue中會將所有js文件最后打包成一個js文件&#xff0c;當前訪問其中一個頁面時&#xff0c;其他頁面的樣式也已經返回到瀏覽器中了&#xff0c;下次切換頁面時&#xff…

HTML 網頁靜態托管 API 接口文檔(可集成到智能體Agent)

HTML 網頁靜態托管 API 接口文檔&#xff08;可集成到智能體Agent&#xff09; 接口概述 本接口用于將HTML代碼轉換為可訪問的網頁&#xff0c;支持通過API密鑰進行身份驗證。 API 密鑰申請地址&#xff1a; https://www.cuobiezi.net/user/api_keys/apply API接口信息 接…

springboot vue sse消息推送,封裝系統公共消息推送前后端方法

概述 1、封裝springboot全局的消息推送接口&#xff1b; 注&#xff1a;1&#xff09;由于原生HTML5 EventSource 不支持添加header&#xff0c;所以要把連接創建接口加入身份驗證白名單&#xff0c;并在接口內添加自己校驗token2&#xff09;后臺需定時心跳&#xff0c;保證鏈…

LeetCode 每日一題 2025/9/1-2025/9/7

記錄了初步解題思路 以及本地實現代碼&#xff1b;并不一定為最優 也希望大家能一起探討 一起進步 目錄9/1 1792. 最大平均通過率9/2 3025. 人員站位的方案數 I9/3 3027. 人員站位的方案數 II9/4 3516. 找到最近的人9/5 2749. 得到整數零需要執行的最少操作數9/6 3495. 使數組元…

小迪安全v2023學習筆記(八十講)—— 中間件安全WPS分析WeblogicJenkinsJettyCVE

文章目錄前記服務攻防——第八十天中間件安全&HW2023-WPS分析&Weblogic&Jetty&Jenkins&CVE應用WPS - HW2023-RCE&復現&上線CS介紹漏洞復現中間件 - Weblogic-CVE&反序列化&RCE介紹利用中間件 - Jenkins-CVE&RCE執行介紹漏洞復現CVE-20…

各webshell管理工具流量分析

哥斯拉哥斯拉是一個基于流量、HTTP全加密的webshell管理工具 特點 1.內置了3種Payload以及6種加密器&#xff0c;6種支持腳本后綴&#xff0c;20個內置插件 2.基于java&#xff0c;可以跨平臺使用 3.可以自己生成webshell&#xff0c;根據管理來生成一些payload&#xff0c;然后…

pytest(1):fixture從入門到精通

pytest&#xff08;1&#xff09;&#xff1a;fixture從入門到精通前言1. Fixture 是什么&#xff1f;為什么我們需要它&#xff1f;2. 快速上手&#xff1a;第一個 Fixture 與基本用法3. 作用域 (Scope)&#xff1a;控制 Fixture 的生命周期4. 資源管理&#xff1a;Setup/Tear…

Java17 LTS 新特性用例

基于 Java 17 LTS 的 實用示例 以下是基于 Java 17 LTS 的 30 個實用示例,涵蓋語言新特性、API 改進及常見場景。所有代碼均兼容 Java 17 語法規范。 文本塊(Text Blocks) String json = """{"name": "Java 17","type": &qu…