架設 npm 私人鏡像站時,常見的方案包括 CNPM、Nexus 與 Verdaccio。
CNPM
CNPM 是一套以 Node.js 為基礎的 npm registry/鏡像方案,最初由淘寶團隊推出,主要用於改善中國地區存取 npm 套件時的下載速度與穩定性。
相較其他方案,CNPM 的部署與維護門檻較高;若不搭配雲端物件儲存,快取與儲存空間的設定也較為繁瑣。Nexus
Nexus Repository 是 Sonatype 開發的套件儲存與發布平台,支援 npm、Maven、Docker 等多種套件格式,適合需要集中管理多種類型套件的環境。
不過,在透過 Nginx 反向代理並進行路徑重寫時,需要特別留意 base path 與 registry URL 的設定,否則可能造成套件下載失敗。Verdaccio
Verdaccio 是一套輕量級的 npm 私有 registry,安裝與設定相對簡單,適合個人專案、小型團隊或內部環境使用。它也能作為 npm 官方 registry 的代理與快取層,減少重複下載並提升內部套件的存取效率。
架設步驟
上面三種解決方案,我以不搞死自己的前提選擇了 Verdaccio 進行搭建 (已經被上面兩種搞過了),
本次,我們將使用 Verdaccio 搭配 Docker Compose 來搭建私人 npm 鏡像站,並使用 Nginx 作為反向代理。
Docker Compose配置文件(docker-compose.yml)
1 | version: '3.8' |
上述 Docker Compose 文件將創建一個名為 verdaccio 的容器,並使用 Verdaccio 的官方映像。它將使用端口4873來運行,並將 Verdaccio 的存儲和配置文件映射到本地目錄以保持持久性。
創建 data 目錄
在 docker-compose.yml 同目錄下創建 data 目錄,
並在目錄中創建 conf/, storage/ 兩個目錄。
創建 conf/config.yaml 寫入配置檔 (參考此連結)
1 | storage: /verdaccio/storage |
創建 conf/htpasswd 來存放使用者帳號密碼
storage 目錄則是用來存放 npm 模組包的
啟動容器
1 | docker compose up |
啟動容器後記得開啟主機的4873端口,否則會無法訪問。
如果啟動容器後出現無法讀取 data/ 目錄,則需使用以下方式進行修改。
1 | chmod -R 777 data/ |
切換鏡像站與登入
安裝 nrm
nrm(NPM Registry Manager)是一個用於管理 npm 鏡像站設定的命令行工具。
它允許您輕鬆切換不同的 npm 鏡像站,包括官方 npm 鏡像站和私人鏡像站,以加速包的下載速度和提高效率。
如果尚未安裝 nrm,請在命令行中執行以下命令來全域安裝:
1 | npm install nrm -g |
列出可用鏡像站
1 | nrm ls |
使用 nrm 添加鏡像站
1 | nrm add mynpm http://鏡像站IP:4873 |
切換 npm 源
1 | nrm use mynpm |
檢查是否更換成功
1 | npm config get registry |
創建私人鏡像站帳號
1 | nrm adduser |
登入私人鏡像站
1 | npm login |
Nginx 反向代理設定
verdaccio 配置完成後接下來,我們將使用 Nginx 作為反向代理來通過 https 提供私人 npm 鏡像站服務。
1 | server { |
上述 Nginx 配置文件將聽取443端口,使用 SSL 加密,並將請求代理到 Verdaccio 容器的地址。同時,它使用 Certbot 管理的 SSL 證書來提供加密。
完成這些配置後,就成功搭建了一個私人 npm 鏡像站,並使用 Nginx 進行了反向代理。

