分类: 全部文章

  • 在 Ubuntu 系統中設置代理:網絡連接、Shell 和 Docker 的配置方法與影響範圍

    在 Ubuntu 系統中設置代理:網絡連接、Shell 和 Docker 的配置方法與影響範圍在 Ubuntu 系統中,設置代理是常見的需求,特別是在企業網絡環境或需要訪問特定資源時。本文將詳細介紹如何在 Ubuntu 的網絡連接、Shell 環境以及 Docker 中設置代理,並闡述它們的影響範圍和注意事項。無論你是普通用戶還是開發者,這篇博客都能幫助你清晰理解代理配置的邏輯與實操。


    1. 為什麼需要分別配置代理?在 Ubuntu 中,代理設置的應用範圍因環境而異:

    • 系統網絡設置:適用於圖形界面應用程序(如瀏覽器、某些 GUI 工具),由系統的網絡管理工具(如 NetworkManager)控制。
    • Shell 環境:命令行工具(如 curl、wget、apt)依賴環境變量或專屬配置文件,獨立於系統代理設置。
    • Docker:Docker 引擎(dockerd)和容器內的命令有各自的代理配置,分別影響鏡像拉取和 Dockerfile 中的網絡操作。

    由於這些環境的網絡棧相互獨立,代理設置不會自動共享,因此需要在每個環境中單獨配置。


    2. 配置系統網絡代理方法Ubuntu 的圖形界面(如 GNOME)允許通過設置應用程序配置全局代理,影響支持系統代理的應用(如 Firefox、Chrome)。

    1. 打開網絡設置:
      • 打開「設置」 > 「網絡」 > 「網絡代理」。
      • 選擇代理類型(如 HTTP、HTTPS、SOCKS)並輸入代理服務器地址和端口。
      • 如果需要認證,填入用戶名和密碼。
    2. 命令行配置(適用於無 GUI 環境):
      • 編輯 /etc/environment,添加全局代理設置:bashsudo nano /etc/environment添加:http_proxy="http://proxy_server:port" https_proxy="http://proxy_server:port" ftp_proxy="http://proxy_server:port" no_proxy="localhost,127.0.0.1,::1"
      • 保存後,登出或重啟使設置生效。
    3. NetworkManager CLI 工具(nmcli): 如果使用 NetworkManager,可以通過命令行設置代理:bashnmcli connection modify <connection_name> proxy.method manual nmcli connection modify <connection_name> proxy.http http://proxy_server:port nmcli connection modify <connection_name> proxy.https http://proxy_server:port查看當前連接名稱:bashnmcli connection show

    影響範圍

    • 適用:圖形界面的應用程序(如瀏覽器、某些更新工具)。
    • 不適用:Shell 環境中的命令行工具(如 curl、apt)和 Docker 引擎。

    注意事項

    • 系統代理設置不影響命令行工具,因為它們不直接讀取 NetworkManager 或 GSettings 的配置。
    • 如果代理需要認證,確保格式為 http://username:password@proxy_server:port。

    3. 配置 Shell 環境代理Shell 環境中的命令行工具(如 curl、wget、apt)依賴環境變量或專屬配置文件來使用代理。方法3.1 臨時設置(僅當前會話)在 Shell 中設置環境變量:

    bash

    export http_proxy="http://proxy_server:port"
    export https_proxy="http://proxy_server:port"
    export ftp_proxy="http://proxy_server:port"
    export no_proxy="localhost,127.0.0.1,::1"

    這些設置僅對當前 Shell 會話有效,關閉終端後失效。3.2 全局設置將環境變量添加到 Shell 配置文件(如 ~/.bashrc 或 ~/.zshrc):

    bash

    echo 'export http_proxy="http://proxy_server:port"' >> ~/.bashrc
    echo 'export https_proxy="http://proxy_server:port"' >> ~/.bashrc
    echo 'export ftp_proxy="http://proxy_server:port"' >> ~/.bashrc
    echo 'export no_proxy="localhost,127.0.0.1,::1"' >> ~/.bashrc

    使配置生效:

    bash

    source ~/.bashrc

    或者,編輯 /etc/environment(影響所有用戶):

    bash

    sudo nano /etc/environment

    添加:

    http_proxy="http://proxy_server:port"
    https_proxy="http://proxy_server:port"
    ftp_proxy="http://proxy_server:port"
    no_proxy="localhost,127.0.0.1,::1"

    3.3 特定工具配置某些工具需要獨立配置代理:

    • APT: 創建或編輯 /etc/apt/apt.conf.d/proxy.conf:bashsudo nano /etc/apt/apt.conf.d/proxy.conf添加:Acquire::http::Proxy "http://proxy_server:port"; Acquire::https::Proxy "http://proxy_server:port";
    • curl: 在命令行指定:bashcurl --proxy http://proxy_server:port http://example.com或在 ~/.curlrc 中設置:bashecho "proxy = http://proxy_server:port" >> ~/.curlrc
    • wget: 在 ~/.wgetrc 中設置:bashecho "http_proxy = http://proxy_server:port" >> ~/.wgetrc echo "https_proxy = http://proxy_server:port" >> ~/.wgetrc echo "use_proxy = on" >> ~/.wgetrc

    3.4 使用 proxychains(可選)對於不支持環境變量的工具,可以使用 proxychains:

    • 安裝:bashsudo apt install proxychains
    • 編輯 /etc/proxychains.conf,添加代理:http proxy_server port
    • 運行命令:bashproxychains curl http://example.com

    影響範圍

    • 適用:大多數命令行工具(如 curl、wget),但需要工具支持環境變量或有自己的配置文件。
    • 不適用:Docker 引擎的網絡操作(如拉取鏡像)或 Dockerfile 中的命令,除非顯式傳遞。

    注意事項

    • 環境變量大小寫敏感,建議同時設置小寫和大寫(如 http_proxy 和 HTTP_PROXY)。
    • 臨時禁用代理:bashunset http_proxy https_proxy

    4. 配置 Docker 代理Docker 的代理設置分為兩部分:Docker 引擎(影響鏡像拉取)和容器內部(影響 Dockerfile 的 RUN 命令)。方法4.1 配置 Docker 引擎代理(用於拉取鏡像)Docker 引擎負責從倉庫(如 Docker Hub)下載鏡像,其代理設置獨立於 Shell 和系統代理。

    • 編輯 /etc/docker/daemon.json:json{ "proxies": { "http-proxy": "http://proxy_server:port", "https-proxy": "http://proxy_server:port", "no-proxy": "localhost,127.0.0.1,::1" } }
    • 重啟 Docker 服務:bashsudo systemctl restart docker
    • 驗證:bashdocker info --format '{{.HTTPProxy}}'

    4.2 配置容器內代理(用於 Dockerfile 的 RUN 命令)Dockerfile 中的 RUN 命令運行在臨時容器中,默認不繼承宿主機的代理設置。

    • 方法 1:在 Dockerfile 中設置:dockerfileFROM ubuntu:20.04 ENV http_proxy=http://proxy_server:port ENV https_proxy=http://proxy_server:port RUN apt-get update && apt-get install -y curl # 清理代理設置(安全考慮) ENV http_proxy="" ENV https_proxy=""
    • 方法 2:通過 docker build 傳遞: 如果 Shell 已設置 http_proxy 等變量,可以在構建時傳遞:bashdocker build \ --build-arg http_proxy=$http_proxy \ --build-arg https_proxy=$https_proxy \ --build-arg no_proxy=$no_proxy \ -t myimage .
    • 方法 3:為特定工具配置(如 APT): 在 Dockerfile 中為 apt 配置代理:dockerfileRUN echo 'Acquire::http::Proxy "http://proxy_server:port";' > /etc/apt/apt.conf.d/proxy.conf RUN echo 'Acquire::https::Proxy "http://proxy_server:port";' >> /etc/apt/apt.conf.d/proxy.conf RUN apt-get update

    影響範圍

    • Docker 引擎代理:影響 docker pull 和 docker build 中的鏡像拉取。
    • 容器內代理:影響 Dockerfile 中 RUN 命令的網絡操作(如 apt-get、curl)。
    • 不適用:Shell 的 http_proxy 不會自動影響 Docker,除非通過 –build-arg 或 Dockerfile 傳遞。

    注意事項

    • 如果代理需要認證,格式為 http://username:password@proxy_server:port。
    • 在 Dockerfile 中設置代理後,建議在構建結束時清理環境變量以避免泄露。
    • proxychains 不推薦用於 Docker,因其對容器內部行為影響有限。

    5. 驗證代理配置

    • 系統代理: 使用瀏覽器訪問外部網站,檢查是否通過代理。
    • Shell 代理:bashenv | grep -i proxy curl -I http://example.com
    • Docker 引擎代理:bashdocker pull hello-world
    • 容器內代理: 在 Dockerfile 中添加測試命令:dockerfileRUN curl -I http://example.com

    6. 總結與最佳實踐配置總結

    • 系統網絡代理:適用於 GUI 應用,通過設置或 /etc/environment 配置。
    • Shell 代理:通過環境變量或工具特定配置文件設置,影響命令行工具。
    • Docker 代理:
      • Docker 引擎:配置 /etc/docker/daemon.json,影響鏡像拉取。
      • 容器內:通過 Dockerfile 或 –build-arg 設置,影響 RUN 命令。

    最佳實踐

    1. 分環境配置:根據需求分別設置系統、Shell 和 Docker 代理,避免依賴單一配置。
    2. 安全性:在 Dockerfile 中清理代理設置,避免敏感信息泄露。
    3. 靈活性:使用 –build-arg 動態傳遞代理,適應不同環境。
    4. 驗證:每次配置後測試代理是否生效,確保網絡行為符合預期。

    通過以上方法,你可以在 Ubuntu 中靈活配置代理,滿足不同場景的網絡需求。希望這篇博客能為你的代理設置提供清晰的指導!

    from:grok

    ps:要想從grok裏面整體複製以上內容還要想一點特殊的辦法,否則容易被截斷或者丟失格式。方法如下:打開瀏覽器的調試窗口,選中回復內容的區塊,編輯HTML,全選其中的代碼並複製,然後粘貼到wordpress的編輯窗口中,注意直接粘貼即可,wordpress的編輯窗口對輸入的html會進行自動處理。

  • 中医的针灸针

    朋友最近很累,几年来从来没有见他这么累过,显然是心累。

    作为一个中医,拿到手上的针灸针不如意,显然是采购那里有猫腻,退货,退货,目前还在僵持。

    grok给的建议中如下部分可以参考:

    保持中立:绝不直接指控“回扣”或高层问题,避免被贴上“麻烦制造者”标签。始终以“保障医疗质量”和“患者安全”为出发点。

    记录沟通:与采购科、上级或管理层的所有沟通(邮件、会议、口头)都要记录时间、内容、对方态度,防止被反咬或推责。

    人际关系:私下与同事或可信上级沟通,了解采购科或高层的背景,判断问题深度。避免孤军奋战,争取盟友支持。

    心理调理:面对复杂职场环境,心累加剧。建议继续针灸(内关、神门、三阴交、太冲)或中药(归脾汤、逍遥散加酸枣仁、合欢皮)调理,配合散步、冥想,保持情绪稳定。

  • 为什么要交社保

    有人说既然现在的人交的社保,直接发给了现在的这波老年人,那么每个月两三干的社保为什么不直接给自己家老人呢?毕竟,能每月按时给自己家老人这个数目的人并不多。

    问这个问题不如问下为什么不能不交社保。

    如果你的答案是不能不交,那就证明社保不是转移支付的方式,而是保护费。

  • 我的下一代前端开发工作站

    目前初步计划采用macbook air m4(32G内存,1T硬盘)+40寸(5120*2160)显示器,替代目前的imac27寸(2015)。

    主机方面,一个macbook air即可移动办公,又可以外接超大屏来长时间工作,而目前的imac+macbookpro造成需要维护两个开发环境,其中macbookpro利用率比较低,很浪费。

    以mac的硬件和系统更新频率来看,性价比比较高的方案是用好前五年,硬件在前五年可以随时更新最新的操作系统,后五年则只能锁定老系统运行。

    我的imac2015是2018年五折买入,至今已经用了7年,消耗的是生命周期后半截。这其中,前一半时间是以办公室工作为主,回家后基本不干活,后半截是居家办公,七年中一直是主力机。

    新方案中的显示器纠结了比较久,一度计划选择57寸超宽5k屏(5120*1440),后来考虑开发的话,尽管超宽屏字体大一些,但太宽了,窗口全部横向排列,似乎不是很好的选择,而40寸(5120*2160)显示器相对集中,窗口即可横向排列,也可以纵向切分,更适合多窗口开发场景。


    以上是我的初稿,以下是grok整理后的版本


    我计划升级我的工作站,用 MacBook Air M4(32GB 内存,1TB 硬盘)搭配一台 40 英寸(5120×2160)显示器,替换现有的 2015 年款 27 英寸 iMac。

    主机选择

    MacBook Air M4 兼顾移动办公和外接大屏长时间工作的需求。相比之下,目前的 iMac 和 MacBook Pro 组合需要维护两套开发环境,而 MacBook Pro 的使用率较低,显得有些浪费。新方案以一台 MacBook Air 为核心,既高效又简化了维护。

    硬件生命周期

    根据 Mac 的硬件和系统更新频率,前五年是性能和系统更新的黄金期,可流畅运行最新 macOS;后五年则可能因硬件限制只能使用较老的系统。因此,性价比最高的策略是用好前五年的性能。我的 2015 年款 iMac 是 2018 年以五折价格购入,至今已使用 7 年,处于生命周期的后半段。前三年主要用于办公室工作,回家后几乎不使用;后四年转为居家办公,一直作为主力设备。

    显示器选择

    在显示器选择上,我曾考虑一台 57 英寸超宽 5K 屏(5120×1440)。超宽屏字体更大,但窗口全部横向排列,对开发场景不太友好。经过比较,我选择了 40 英寸(5120×2160)显示器。这种尺寸和分辨率更适合多窗口开发,既支持横向排列窗口,也方便纵向切分,视觉焦点更集中,提升工作效率。总结
    新工作站以 MacBook Air M4 和 40 英寸 5K 显示器为核心,兼顾性能、便携性和开发效率,取代老旧的 iMac,适应未来的工作需求。

  • 我的macbook pro 2018(16寸,i7,16G内存)系统锁定12.7.6

    如题,为了保持流畅,但这个本用的少,只是出门带着,有点浪费了,主力机依然是iMac

  • 我的iMac2015(27寸,i7,5k屏,32G内存)锁定系统版本11.7.10

    如题,保持流畅稳定,但最近开始出现提醒chrome将不再支持更新了。

  • 为mac选择外接屏幕最关键的因素是hidpi模型下支持的分辨率

    虽然颜色很重要,但如果是mac的话,最重要的是在hidpi模式下的分辨率,这个分辨率是按人眼设定的,而不是屏幕本身的物理分辨率,因为物理分辨率有很大可能看上去数字很大,但因为屏幕小,那么高的分辨率下字太小,没法用,但当成倍缩放时,可视分辨率成倍减小,原来看上去很高的分辨率也就很低了,比如某米笔记本就这么干,不知道最新的型号是怎么样,几年前遇到过,果断退货了。

    想知道某个屏幕在hidpi模式下的分辨率到底是多少不太容易,因为几乎所有显示器都不在官方信息中提供,比较推荐的渠道是https://github.com/waydabber/BetterDisplay/discussions/2626,这个专门致力于提供mac适配方案的软件上能提供一些信息。

    退一步来说,其实也不一定要追求hidpi,我试了一下用macbook pro 2018外接微星msi pro mp341c,在3440×1440分辨率下,尽管和mac上的显示相比,字体的像素明显,但也不至于不能看,如果两个屏同时用的话,代码放在外接屏上,画面放在mac上来,似乎也是个不错的省钱方案。

  • 宛平城第三轮博物馆之城计划会成功吗?

    宛平城第三轮博物馆之城计划会成功吗?

    昨天晚上散步,顺便把宛平城里街两边的店拍了照,发到了小红书上,算是立此存照,号称的博物馆之城,沿街大部分都是饭店,名字叫博物馆的只有文房四宝博物馆和中医药博物馆,之前的奇石好像都没有找到。

    尽管我对这个新的计划依然不看好,但如果有机会,我倒是可以拿林一苇放到我这里的一箱子战斗机邮票做个博物馆,再搞上一屋子3D打印机,作个战斗机打印农场。再弄一些无刷电机,做做垂直涵道发动机。

    可惜,不想搞事情了,如果能维持生活,现在的主要目标是收缩,精力有限。

  • 遇到了微信小程序的视频资质问题

    这一直是一个潜在的隐患,微信小程序不止小程序,就连放个正文也容易被识别成小说啥的,需要提供互联网出版资质,当然,这不是腾讯自己的问题,但作为一个平台,没有解决好这些问题,还是可以指责的,何况小程序每年还要收300元的巨额认证费。

    而对于一个独立数字出版人来说,尽管有自己的公司,但几乎任何资质都不可能办理下来,也不太可能在搞好自己的技术研发的同时,去兼顾这么多额外的事务。

    于是,我只好决定把微信小程序蜷缩为一个搜索入口,其他功能都迁移到H5中。如此一来,也就不再纠结那些在微信小程序因为兼容问题不好做的功能,可以在H5里面堂堂正正做人。