Docker 搭建本地Harbor私有鏡像倉庫

Docker 搭建本地Harbor私有鏡像倉庫

一、Harbor 核心價值與企業級特性解析

在容器化技術普及的背景下,鏡像倉庫作為容器生命周期的核心組件,其可靠性直接影響開發效率與生產穩定性。Docker 官方的 Registry 雖能實現基礎鏡像存儲,但存在明顯短板:無可視化界面、缺乏權限管控、無安全掃描等企業級功能,無法滿足企業對鏡像管理的精細化需求。

從企業實際需求出發,私有鏡像倉庫的部署具有不可替代的價值:

  • 安全隔離:企業核心業務鏡像無需暴露在公共倉庫,降低源碼泄露與惡意篡改風險;
  • 效率提升:內部網絡環境下鏡像傳輸速度遠高于公共倉庫,減少部署等待時間;
  • 合規可控:支持操作審計、權限細化管理,滿足金融、政務等行業的監管要求。

Harbor 作為 VMware 推出的開源企業級鏡像倉庫,針對性解決了這些問題,其核心企業級特性包括:

  • 權限管理體系:基于 RBAC(角色基礎訪問控制)實現多用戶、多項目的權限隔離,支持 LDAP 集成實現統一身份認證;
  • 安全防護能力:集成 Clair、Trivy 等漏洞掃描工具,可自動檢測鏡像中的安全風險,同時支持鏡像簽名與驗真,確保鏡像完整性;
  • 可視化與易用性:提供直觀的 Web 管理界面,支持中文顯示,降低運維門檻;
  • 高可用支撐:內置鏡像復制功能,為跨節點數據同步提供基礎,支持多節點部署;
  • 本地化適配:針對國內用戶設計鏡像跨倉庫復制功能,滿足多地域鏡像同步需求。

二、高可用方案選型與架構設計

2.1 高可用方案核心目標

容器鏡像倉庫的高可用本質是減少服務中斷時間,確保開發人員能穩定推送鏡像、業務集群能正常拉取鏡像。對于中小型企業,通常可接受 “分鐘級” 故障恢復(即故障發生后,通過手動操作在幾分鐘內恢復服務),無需追求金融級 “秒級” 高可用(需復雜集群架構支撐)。

2.2 方案選型:雙主復制 + Nginx 代理

本次采用 “雙主復制 + Nginx 代理” 的高可用方案,架構示意圖如下:

外部訪問 → Nginx代理節點 → Harbor A節點/Harbor B節點(雙向復制)

該方案的核心邏輯是:通過兩個 Harbor 節點的雙向復制實現數據冗余,通過 Nginx 代理提供統一訪問入口,節點故障時手動切換 Nginx 代理目標。

方案選型理由:
  • 架構簡單易維護:無需復雜的集群編排工具,中小型企業運維人員可快速上手;
  • 適配云環境限制:云服務商通常不支持自定義外網虛擬 IP(keepalived 依賴虛擬 IP 實現自動切換),而手動切換 Nginx 配置可規避此問題;
  • 平衡成本與可用性:雙節點部署成本低,且 “分鐘級恢復” 可滿足內部開發場景的可用性需求。
不選擇 keepalived 的原因:
  • 云環境限制:主流云廠商(如阿里云、騰訊云)不允許自定義外網可訪問的虛擬 IP,keepalived 的 “虛擬 IP 漂移” 功能無法生效;
  • 操作復雜度:內網環境雖可使用 keepalived,但需額外配置 VRRP 協議、健康檢查腳本,增加運維成本。

三、環境準備與前置依賴配置

3.1 服務器硬件與系統配置

本次部署使用 3 臺 CentOS-7.9 虛擬機,具體配置如下表所示,各節點角色與資源要求均經過實踐驗證:

系統版本IP 地址節點角色CPU 要求內存要求Hostname核心作用
CentOS-7.9192.168.10.101Nginx 代理節點≥2 核≥2GNginx提供統一訪問入口,轉發請求到 Harbor 節點
CentOS-7.9192.168.10.102Harbor1 節點≥2 核≥2GDocker01主鏡像倉庫節點,存儲與管理鏡像
CentOS-7.9192.168.10.103Harbor2 節點≥2 核≥2GDocker02備用鏡像倉庫節點,與 Harbor1 雙向同步數據
資源要求說明:
  • CPU≥2 核:Harbor 運行時需啟動多個核心組件(API 服務、數據庫、緩存、日志等),單核 CPU 會導致組件競爭資源,出現響應緩慢問題;
  • 內存≥2G:Docker 容器、Harbor 核心服務(如 API Server、Registry)均需占用內存,內存不足會導致服務頻繁崩潰。

3.2 前置依賴安裝:Docker

所有節點必須提前安裝 Docker,因為 Harbor 的所有組件均以 Docker 容器形式運行。安裝步驟參考 Docker 官方文檔(https://docs.docker.com/engine/install/centos/),核心驗證命令:

# 檢查Docker是否安裝成功
docker --version  
# 確保Docker服務正常運行
systemctl status docker  

四、Harbor 節點部署全流程(以 Harbor1 為例)

4.1 下載與解壓 Harbor 安裝包

Harbor 提供離線安裝包(包含所有依賴鏡像),適合內網環境部署。本次選擇 v2.4.3 版本,下載地址:
https://github.com/goharbor/harbor/releases/tag/v2.4.3,具體步驟:

# 上傳離線安裝包到服務器
[root@localhost ~]# ls  
harbor-offline-installer-v2.4.3.tgz  # 解壓安裝包
[root@localhost ~]# tar -zxvf harbor-offline-installer-v2.4.3.tgz  
[root@localhost ~]# cd harbor  
[root@localhost harbor]# ls  
common.sh  harbor.v2.4.3.tar.gz  harbor.yml.tmpl  install.sh  LICENSE  prepare  

4.2 核心配置文件修改(harbor.yml)

Harbor 的配置依賴harbor.yml文件,需從模板拷貝并修改關鍵參數:

# 拷貝配置模板
[root@localhost harbor]# cp harbor.yml.tmpl harbor.yml  # 編輯配置文件
[root@localhost harbor]# vim harbor.yml  
關鍵配置項說明:
# 節點唯一標識(必須為當前節點IP,用于鏡像訪問與復制)
hostname: 192.168.10.102  # 管理員初始密碼(生產環境需設置強密碼,如包含大小寫、數字、特殊字符)
harbor_admin_password: pwd123  # 臨時關閉HTTPS(后續由Nginx統一處理,生產環境需啟用HTTPS)
#https:# https port for harbor, default is 443
#  port: 443# The path of cert and key files for nginx
#  certificate: /your/certificate/path
#  private_key: /your/private/key/path
配置注意事項:
  • hostname必須正確配置為節點 IP 或域名,否則鏡像 tag 會包含錯誤地址,導致拉取失敗;
  • HTTPS 配置暫時注釋的原因:簡化初期部署,后續可通過 Nginx 統一配置 HTTPS,避免每個 Harbor 節點單獨配置證書的麻煩。

4.3 安裝 docker-compose 依賴

Harbor 由多個關聯容器(如 API 服務、數據庫、Registry、日志服務等)組成,需通過docker-compose實現容器編排與生命周期管理。安裝步驟:

# 下載docker-compose二進制文件
[root@localhost ~]# curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose  # 賦予執行權限
[root@localhost ~]# chmod 755 /usr/local/bin/docker-compose  # 驗證安裝
[root@localhost ~]# docker-compose --version  
docker-compose version 1.26.2, build eefe0d31  

4.4 啟動 Harbor 服務

通過官方安裝腳本啟動 Harbor,腳本會自動完成鏡像加載、配置生成、容器啟動等流程:

[root@localhost harbor]# ./install.sh  
啟動流程解析:
  1. 環境檢查:驗證 Docker 與 docker-compose 是否安裝成功;
  2. 鏡像加載:將離線包中的harbor.v2.4.3.tar.gz鏡像導入本地 Docker;
  3. 配置生成:根據harbor.yml生成各組件(Nginx、Core、DB 等)的配置文件;
  4. 容器啟動:通過docker-compose創建并啟動所有服務容器。
啟動成功驗證:
? ----Harbor has been installed and started successfully.----  

此時通過瀏覽器訪問http://192.168.10.102,可看到 Harbor 登錄界面,使用默認用戶名admin和配置的密碼pwd123即可登錄。

五、Nginx 代理節點部署與配置

Nginx 節點的核心作用是提供統一訪問入口,并在 Harbor 節點故障時通過修改配置實現手動切換。

5.1 拉取 Nginx 鏡像與創建配置文件

# 拉取指定版本的Nginx鏡像(版本穩定性經過生產驗證)
[root@m1 ~]# docker pull nginx:1.13.12  # 創建配置文件目錄并編寫配置
[root@m1 ~]# mkdir nginx  
[root@m1 ~]# cd nginx  
[root@m1 nginx]# vim nginx.conf  

5.2 Nginx 核心配置解析

user nginx;
worker_processes 1;  # 單進程足夠支撐中小型企業內部訪問需求error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;events {worker_connections 1024;  # 最大并發連接數,可根據實際訪問量調整
}# 使用stream模塊實現四層TCP代理(適配Docker鏡像的TCP協議傳輸)
stream {# 定義上游服務組(初始代理到Harbor1節點)upstream hub{server 192.168.10.102:80;  }# 代理服務配置server {listen 80;  # 監聽80端口,與Harbor節點端口保持一致proxy_pass hub;  # 轉發請求到上游服務組proxy_timeout 300s;  # 長連接超時時間(適配大鏡像傳輸)proxy_connect_timeout 5s;  # 連接超時時間}
}
配置關鍵點說明:
  • 使用 stream 模塊:Docker 鏡像拉取 /push 基于 TCP 協議,需用 stream 模塊而非 http 模塊;
  • 僅代理單節點的原因:Harbor 節點間鏡像同步存在延遲(尤其是大型鏡像),若代理兩個節點會出現 “推送至 A 節點后,Nginx 轉發請求到 B 節點導致拉取失敗” 的問題;
  • 手動切換邏輯:當192.168.10.102故障時,修改upstream hubserver 192.168.10.103:80;,重啟 Nginx 即可切換到備用節點。

5.3 啟動 Nginx 容器

通過腳本快速啟動 Nginx 容器,確保配置文件正確掛載:

# 創建啟動腳本
[root@m1 nginx]# vim restart.sh  
#!/bin/bash
# 停止并刪除舊容器(若存在)
docker stop harbor-nginx  
docker rm harbor-nginx  # 啟動新容器:使用宿主機網絡,掛載本地配置文件
docker run -itd --net=host --name harbor-nginx -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf nginx:1.13.12  # 執行腳本啟動Nginx
[root@m1 ~/nginx]# sh restart.sh  
啟動參數說明:
  • --net=host:讓 Nginx 直接使用宿主機網絡,避免端口映射導致的協議適配問題;
  • -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf:將本地配置文件掛載到容器內,修改配置后無需重建鏡像,重啟容器即可生效。

六、Harbor 節點雙向復制配置(核心高可用保障)

雙向復制是實現數據冗余的關鍵,確保任一節點的鏡像變更能同步到另一節點,避免單節點故障導致數據丟失。

6.1 配置 Harbor1 到 Harbor2 的復制規則

步驟 1:添加目標倉庫(Harbor2 節點)

登錄 Harbor1 的 Web 界面(http://192.168.10.102),進入 “倉庫管理”→“新建目標”,配置如下:

  • 提供者:選擇 “Harbor”(目標為另一 Harbor 節點);
  • 目標名192.168.10.103(清晰標識目標節點 IP);
  • 目標 URLhttp://192.168.10.103(Harbor2 節點的訪問地址);
  • 訪問 IDadmin(Harbor2 的管理員用戶名);
  • 訪問密碼pwd123(Harbor2 的管理員密碼);
  • 點擊 “測試連接”,提示 “連接成功” 后保存。
步驟 2:創建復制規則

進入 “復制管理”→“新建規則”,配置如下:

  • 名稱to192.168.10.103(標識復制方向);
  • 復制模式Push-based(本地鏡像新增 / 刪除時主動推送到目標);
  • 源資源過濾器:默認復制全部鏡像(可按名稱、Tag 過濾,如僅復制prod-*標簽鏡像);
  • 目標倉庫:選擇步驟 1 創建的目標(192.168.10.103);
  • 目標名稱空間:選擇 “替換 1 級”(保持與源倉庫一致的項目結構);
  • 觸發模式事件驅動(鏡像推送 / 刪除時自動觸發復制);
  • 點擊 “保存” 完成配置。

6.2 配置 Harbor2 到 Harbor1 的復制規則

重復 6.1 的步驟,在 Harbor2 節點(http://192.168.10.103)中添加目標倉庫(Harbor1 節點http://192.168.10.102),并創建復制規則to192.168.10.102,實現 “雙向復制”。

6.3 復制規則核心參數說明

  • 復制模式Push-based(主動推送)適合鏡像源節點,確保本地變更及時同步;若需從目標節點拉取鏡像,可選擇Pull-based(被動拉取);
  • 觸發模式事件驅動可實時同步,適合頻繁更新場景;若鏡像更新頻率低,也可選擇 “定時觸發”(如每天凌晨同步);
  • 資源過濾器:通過名稱、Tag 過濾可減少無效同步(如僅同步生產環境鏡像,忽略測試鏡像)。

6.4 復制效果驗證

步驟 1:在 Harbor1 創建項目并推送鏡像
  • 登錄 Harbor1,進入 “項目”→“新建項目”,名稱為kubernetes(公開項目);

  • 在客戶端配置 Docker 信任私有倉庫(需在所有訪問 Harbor 的 Docker 主機上操作):

    [root@localhost ~]# vim /etc/docker/daemon.json  
    {"insecure-registries": ["192.168.10.101"]  # Nginx代理節點IP
    }  
    [root@localhost ~]# systemctl daemon-reload  
    [root@localhost ~]# systemctl restart docker  
    
  • 登錄倉庫并推送鏡像:

    [root@localhost ~]# docker login 192.168.10.101  # 登錄Nginx代理地址
    Username: admin  
    Password: pwd123  
    Login Succeeded  # 標記并推送鏡像
    [root@localhost ~]# docker pull cirros  
    [root@localhost ~]# docker tag cirros 192.168.10.101/kubernetes/cirros:v1  
    [root@localhost ~]# docker push 192.168.10.101/kubernetes/cirros:v1  
    
步驟 2:檢查 Harbor2 的同步結果

登錄 Harbor2 的 Web 界面(http://192.168.10.103),進入 “項目”,可看到自動同步的kubernetes項目及項目下的cirros:v1鏡像,表明復制成功。

七、全流程功能驗證與故障切換演練

7.1 基礎功能驗證

  • 登錄驗證:通過 Nginx 代理地址(http://192.168.10.101)登錄 Harbor,確認可正常訪問;
  • 推送驗證:客戶端推送鏡像到192.168.10.101/kubernetes,確認 Harbor1 節點可接收;
  • 拉取驗證:另一客戶端從192.168.10.101/kubernetes拉取鏡像,確認成功下載;
  • 復制驗證:檢查 Harbor2 節點是否同步到推送的鏡像。

7.2 故障切換演練(模擬 Harbor1 節點故障)

  • 步驟 1

    :手動停止 Harbor1 節點的服務(模擬故障):

    [root@localhost harbor]# docker-compose down  
    
  • 步驟 2

    :修改 Nginx 配置,切換代理目標到 Harbor2:

    [root@m1 nginx]# vim nginx.conf  
    stream {upstream hub{server 192.168.10.103:80;  # 改為Harbor2節點IP}# 其他配置不變
    }  
    
  • 步驟 3

    :重啟 Nginx 生效配置:

    [root@m1 ~/nginx]# sh restart.sh  
    
  • 步驟 4:驗證切換效果:客戶端從192.168.10.101拉取kubernetes/cirros:v1鏡像,確認可正常拉取(數據來自 Harbor2 節點)。

八、方案總結與生產環境優化建議

8.1 方案優勢與適用場景

  • 優勢:架構簡單、部署成本低、數據冗余可靠,適合中小型企業內部鏡像管理;
  • 適用場景:內部開發 / 測試環境、非核心生產環境,可接受分鐘級故障恢復的場景。

8.2 生產環境優化建議

  • 啟用 HTTPS:在 Nginx 層配置 SSL 證書,將stream模塊改為http模塊并啟用 HTTPS,避免鏡像傳輸過程中被竊聽;
  • 增加監控告警:通過 Prometheus 監控 Harbor 節點狀態與磁盤使用率,配置告警避免磁盤滿導致服務異常;
  • 定期備份:定期備份 Harbor 的數據庫與鏡像存儲目錄,防止復制失效導致的數據丟失;
  • 權限細化:通過 “用戶管理” 與 “項目成員” 配置,實現開發、測試、運維人員的權限隔離,避免誤操作;
  • 鏡像清理策略:配置定時 GC(垃圾回收)任務,刪除過期鏡像釋放存儲空間。

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

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

相關文章

AI 助力:如何批量提取 Word 表格字段并導出至 Excel

在日常辦公中,我們經常需要處理大量的 Word 文檔中的表格數據,如學生登記表、客戶信息表、報名表等。然而這些表格往往格式各異、字段命名不統一(如“姓名”“名字”“Name”),甚至含有合并單元格或多余空白行&#xf…

在 Azure Linux 上安裝 RustFS

本文分享在 Azure Linux 上安裝并使用對象存儲 RustFS 的過程。 關于 RustFS RustFS 是一款用 Rust 語言編寫的分布式存儲系統,兼容 S3 協議,是 MinIO 的國產化平替。詳情可以前往 RustFS 官網。目前,RustFS 支持二進制、Docker 安裝方式&am…

實現在線預覽pdf功能,后臺下載PDF

<!-- PDF預覽模態框 --><n-modalv-model:show"pdfModalVisible"title"投訴統計報告預覽":closable"false":mask-closable"false"positive-click"closePdfModal"positive-text"關閉":width"900"…

華為VS格行VS中興VS波導隨身WIFI6怎么選?流量卡OR隨身WIFI,長期使用到底誰更香?

在移動互聯時代&#xff0c;流量焦慮成為現代人的通病。面對"辦流量卡還是隨身WiFi"的抉擇&#xff0c;許多人陷入兩難。本文從實際需求出發&#xff0c;用數據和場景幫你精準決策&#xff0c;尤其這五類人群建議直接選擇正規隨身WiFi。一、這五類人&#xff0c;隨身…

AI網絡搜索

作為AI應用程序開發人員在了解函數調用&#xff08;Function Calling&#xff09;特性調用本地函數時可能注意到列表型參數tools中每一個元素都攜帶有一個type值。而在大多數函數調用示例程序中&#xff0c;這個type值一直被設定為“function”&#xff0c;這意味著它還可能存在…

39.Sentinel微服務流量控制組件

雪崩問題 微服務調用鏈路中某個服務故障,引起整個鏈路中的所有微服務都不可用。 解決方案 1.超時處理:設置一個超時時間,請求超過一定時間沒有響應就返回錯誤信息,不會無休止的等待。(只能起到緩解作用,并不能從根本上解決問題) 2.艙壁模式:限定每個業務能使用的線程…

基于hadoop的競賽網站日志數據分析與可視化(下)

【基于hadoop的競賽網站日志數據分析與可視化&#xff08;上&#xff09;】講解了如何用hadoop對數據進行初步處理&#xff0c;本篇主要講解用python對結果數據進行可視化分析。 ------------------------------------------------------------------------------------------…

Python爬蟲打怪升級:數據獲取疑難全解析

一、引言 **??? 在大數據時代,數據就是價值的源泉。而 Python 爬蟲,作為數據獲取的得力助手,憑借 Python 簡潔的語法和豐富強大的庫,在眾多領域發揮著重要作用。無論是電商領域的價格監測、市場調研中的數據收集,還是學術研究里的文獻獲取,Python 爬蟲都能大顯身手。…

基于R語言的極值統計學及其在相關領域中的實踐技術應用

極值統計學就是專門研究自然界和人類社會中很少發生&#xff0c;然而發生之后有著巨大影響的極端現象的統計建模及分析方法&#xff1b;在水文、氣象、環境、生態、保險和金融等領域都有著廣泛的應用。一&#xff1a;獨立假設下的極值統計建模 1.廣義極值模型. 2.極小值的處理.…

前端面試十一之TS

TS 是 TypeScript 的縮寫&#xff0c;是一種由微軟開發的開源編程語言&#xff0c;它是 JavaScript 的一個超集&#xff0c;為 JavaScript 添加了類型系統和對 ES6 的支持。以下是關于 TypeScript 的詳細介紹&#xff1a;一、特點類型系統&#xff1a;TypeScript 引入了類型注解…

Excel快捷鍵

Excel快捷鍵可以快速提高使用Excel的效率&#xff0c;下面將Excel快捷鍵進行整理匯總以備不時之需 標注顏色的為需要經常使用并可以顯著提高效率的快捷鍵 Ctrl相關快捷鍵【Ctrl】【1】 顯示【單元格格式】設置窗口,可以設置選中的格式【Ctrl】【2】 應用或取消加粗…

Windows 10/11安裝WSL、Ubuntu、Docker Desktop

WSL&#xff0c;Windows Subsystem for Linux&#xff0c;是微軟開發的輕量級虛擬機環境&#xff0c;允許用戶在 Windows上運行完整的Linux內核和用戶空間&#xff0c;適用于Windows的Linux子系統。能實現&#xff1a; 運行原生的Linux命令和程序&#xff08;如apt&#xff0c…

React之旅-06 Ref

當你想讓一個組件“記住”一些信息&#xff0c;但又不想這些信息觸發新的渲染時&#xff0c;你可以使用 ref。使用 Ref 前&#xff0c;需要導入useRef&#xff0c;代碼如下&#xff1a;import { useRef } from react;在您的組件內部&#xff0c;調用 useRef 并將您想要引用的初…

stm32-Modbus主機移植程序理解以及實戰

目錄一、背景二、代碼理解&#xff08;一&#xff09;main()函數例程代碼功能遇到的問題解決方式分析&#xff08;二&#xff09;eMBMasterPoll( void )函數例程代碼1. 變量聲明2. 協議棧狀態檢查3. 獲取事件4. 事件處理&#xff08;switch-case&#xff09;4.1 EV_MASTER_READ…

c++判斷文件或目錄是否存在

#include<sys/stat.h>#include<fstream>#include<string>#include<stdio.h>#include<stdlib.h>#include<vector>#include<io.h>#include<iostream>bool IsFileGood(string strFileName, book bFile){if(bFile) \\文件{ifstrea…

Java設計模式之行為型模式(命令模式)

一、核心定義與設計思想 命令模式通過對象化請求&#xff0c;將操作的具體實現細節封裝在命令對象中&#xff0c;使得調用者&#xff08;Invoker&#xff09;無需直接依賴接收者&#xff08;Receiver&#xff09;&#xff0c;僅需通過命令對象間接調用。這種設計支持以下能力&a…

大數據領域開山鼻祖組件Hadoop核心架構設計

一、Hadoop的整體架構 Hadoop是一個專為大數據設計的架構解決方案&#xff0c;歷經多年開發演進&#xff0c;已逐漸發展成為一個龐大且復雜的系統。其內部工作機制融合了分布式理論與具體工程開發的精髓&#xff0c;構成了一個整體架構。 Hadoop最樸素的原理在于&#xff0c;它…

OneCode3.0 VFS分布式文件管理API速查手冊

&#x1f4da; 前言&#xff1a;OneCode 3.0微內核引擎架構解析 在云原生與分布式系統日益普及的今天&#xff0c;文件管理系統面臨著前所未有的挑戰——海量數據存儲、跨節點協同、多租戶隔離以及彈性擴展等需求推動著傳統文件系統向分布式架構演進。OneCode 3.0作為新一代企業…

UI前端與數字孿生結合實踐探索:智慧物流的倉儲自動化管理系統

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩!一、引言&#xff1a;傳統倉儲的 “效率黑洞” 與數字孿生的破局當倉庫管理員在數萬平的庫房中…

使用layui的前端框架過程中,無法加載css和js怎么辦?

這使用layui的前端框架過程中&#xff0c;無法加載css和js怎么辦&#xff1f;里寫自定義目錄標題已經按要求下載并解壓到指定位置了&#xff0c;但是感覺就是無法加載文件后臺提示如下&#xff1a;那就我清理緩存當再次觀察html頁面時&#xff0c;發現頁面最開始有兩個< htm…