搭建 npm 私人鏡像站有三種常見的解決方案,分別是 CNPM、Nexus 和 Verdaccio。
CNPM
CNPM 是一個基於Node.js的 npm 鏡像源,旨在提供更快速和穩定的包管理體驗。它是淘寶公司推出的項目,通常用於中國地區的開發者,以加速包的下載速度。
但部屬上手難度較高,不使用雲端儲存 npm 緩存的設置也較麻煩。Nexus
Nexus是一個由Sonatype開發的強大的存儲和分發平台,支持多種包管理器,包括 npm。
但如果使用Nginx反向代理重寫路徑會出現無法下載包的問題。Verdaccio
Verdaccio是一個輕量級的 npm 私人鏡像站管理工具,允許您在本地搭建私人 npm 鏡像站,它易於安裝和配置,用於自己的項目或組織內部使用。
搭建步驟
上面三種解決方案,我以不搞死自己的前提選擇了 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 進行了反向代理。