私有 NPM proxy registry verdaccio

在建置 VUE 專案時,由於客戶需求須在封閉環境建立Docker image。這就麻煩了,再考慮資訊安全情況下只能建立私有的 NPM proxy registry。找尋了眾多解決方案,發現了一套可以一次滿足兩種需求:必要時開啟防火牆更新 NPM Registry,在不能連網時又可以給內部開發人員使用。

verdaccio 需要安裝 nodejs v12 以上版本

安裝必要套件

安裝環境為 RedHat 8,並使用 pm2(一個管理Node.js 的工具,用簡單的指令執行 Node.js相關程式)。

# Step 1. 安裝NPM
dnf install npm

# Step 2. 安裝新版NPM
npm install -g npm@8.3.0

# Step 3. 安裝新版的 nodejs
dnf module reset nodejs
dnf module install nodejs:14

# Step 4. 安裝必要套件
npm install -g all-the-package-names --save
npm install -g npm-package-downloader

# Step 5. 安裝 pm2
npm install -g pm2

# Step 6. 安裝 verdaccio
npm install --g verdaccio

建立執行verdaccio軟體執行專用帳號 npmproxy

# 新增帳號 npmproxy
useradd npmproxy

# 設定npmproxy密碼
passwd npmproxy

# 開啟 5566 埠號防火牆
firewall-cmd --zone=public --add-port=5566/tcp --permanent
 
# 重啟防火牆讓設定生效
firewall-cmd --reload

# 切換帳號為 npmproxy,並回到npmproxy家目錄,載入個人環境設定檔
su npmproxy
cd ~
source .bash_profile

# 嘗試執行 verdaccio
verdaccio

# 會看到類似下列回應代表已經成功啟用
info --- Creating default config file in /home/npmproxy/verdaccio/config.yaml
warn --- config file - /home/npmproxy/verdaccio/config.yaml
warn --- Plugin successfully loaded: verdaccio-htpasswd
warn --- Plugin successfully loaded: verdaccio-audit
warn --- http address - http://localhost:5566/ - verdaccio/5.3.2

修改修改 /home/npmproxy/verdaccio/config.yaml,新增 listen: - 0.0.0.0:4873

  # 新增此設定,使其能夠從外部連線5566埠
  listen:
    - 0.0.0.0:5566

新增verdaccio NPM proxy 使用者

npm set registry http://localhost:5566/
npm login
Username: 自行輸入
Password: 自行輸入
Email: (this IS public) xxx@xxx.xxx

# 使用下列指令新增 verdaccio 網頁之帳號密碼
npm adduser --registry http://localhost:5566/
Username: 自行輸入 
Password: 自行輸入 
Email: (this IS public) xxx@xxx.xxx
Logged in as npmproxy on http://localhost:5566/.

使用pm2將verdaccio啟動於背景

# 使用pm2將verdaccio啟動於背景
pm2 start `which verdaccio`

# 若要停止指令如下
pm2 stop verdaccio

內部人員在使用時設定 npm proxy registry

# 查看指令 目前的 registry
npm get registry

# 設定為內部的npm proxy registry
npm set registry http://localhost:5566/

到此為止,就有一個私有NPM proxy registry!