Verdaccio 搭建私有 NPM

養豬小能手發表於2019-04-30

為什麼需要搭建私有 npm

  • 私有的包只想在內部使用,還不想用 git+ssh 的方式,感覺不夠優雅,並且還想可以配置相應的許可權
  • npm 上的包下載很慢,想把已經下載過的包快取在伺服器上,下次 下載時首先檢查更新,如果沒更新直接走快取
  • 希望下載的時候,公共包走公共倉庫,私有包走內部伺服器的私有倉庫

關於 Verdaccio

Verdaccio 是一個 Node.js建立的輕量的私有 npm proxy registry, forked 於 sinopia@1.4.0

  • 與 yarn, npm 和 pnpm 100% 相容
  • 提供 Docker 和 Kubernetes 支援,相當容易安裝和使用
  • 釋出的包是私有的並且訪問許可權可配置
  • Verdaccio 按需要快取所有相關項,並在當地或私有網路下可以加速安裝

安裝

環境

  1. Node

    • verdaccio@3.x Node >= v6.12
    • verdaccio@4.x Node >= v8.x
  2. npm >=4.x 或者 yarn

    官方強烈推薦包管理器版本 > npm@5.x | yarn@1.x | pnpm@2.x

  3. web 應用支援瀏覽器 Chrome, Firefox, Edge 和 IE11以上

命令列安裝

npm 全域性安裝

npm install -g verdaccio
複製程式碼

或者使用 yarn

yarn global add verdaccio
複製程式碼

使用

安裝好後需要命令列執行

$> verdaccio 
warn --- config file  - /home/.config/verdaccio/config.yaml
warn --- http address - http://localhost:4873/ - verdaccio/3.0.0
複製程式碼

然後開啟瀏覽器 訪問地址 http://localhost:4873/ 正常顯示即成功, 4873是預設埠。 另外建議安裝 nrm 方便管理 npm 源。

npm i -g nrm
複製程式碼

安裝好後

nrm add verdaccio http://localhost:4873/ # 新增源
nrm use verdaccio # 更換源
複製程式碼

然後就是新增使用者,登入就可以釋出、安裝了。

配置

在當前使用者的 .config/verdaccio 下預設有兩個檔案:config.yamlhtpasswd。這裡介紹兩個比較重要的配置項,其他的可以官網上查詢。

許可權配置

一般團隊或者公司的私有專案,會採用不同的許可權控制。

操作許可權:

  • access 表示哪一類使用者可以對匹配的專案進行安裝(install)
  • publish 表示哪一類使用者可以對匹配的專案進行釋出(publish)
  • proxy 如其名,這裡的值是對應於 uplinks 的

組許可權:

  • $all 表示所有人都可以執行對應的操作
  • $authenticated 表示只有通過驗證的人可以執行對應操作
  • $anonymous 表示只有匿名者可以進行對應操作(通常無用)

瞭解這幾項配置後就能很簡單地使用 verdaccio 的許可權控制了

packages:
  # scoped 包
  '@scope/*':
    access: $all
    publish: $all
    proxy: server2
    
  'supersecret-*':
    # 新增多個組
    access: secret super-secret-area ultra-secret-area
    publish: secret ultra-secret-area
    proxy: server1

  'private-*':
     # private-xxx 允許所有的使用者安裝、認證的使用者釋出
    access: $all
    publish: $authenticated
    proxy: uplink1
    
  'old-*':  # 不設定 `access`、`publish` 阻止對一組包的訪問(不設定proxy阻止代理一組特定包)

  '**':
    # 允許所有使用者 (包括為驗證的使用者) 安裝和釋出
    access: $all
    publish: $all
    proxy: uplink2
複製程式碼

賬號配置

因為是私有源,我們可以設定 config.yaml 中的 max_users: -1 來禁用 npm adduser 命令來建立使用者。如果需要新增使用者這裡介紹兩種方法:

  • 可以通過安裝 htpasswd-for-sinopia 來新增賬號

    $ npm install htpasswd-for-sinopia -g
    
    $ sinopia-adduser # 在 htpasswd 目錄下執行
    複製程式碼

    然後就是根據提示填寫賬號密碼就行。

  • verdaccio 的認證是基於 verdaccio-htpasswd, 可以通過官方提供的工具來生成 www.htaccesstools.com/htpasswd-ge…,將生成的段字串新增到 htpasswd 中即可。

部署

可以使用forever、pm2或其他的守護程式進行管理。

$ npm i -g pm2 # 安裝

$ pm2 start `which sinopia` #啟動
複製程式碼

nginx 配置:

server {
  listen 80 default_server;
  location / {
    proxy_pass              http://127.0.0.1:4873/;
    proxy_set_header        Host $host;
  }
}
複製程式碼

寫在最後

  • 儘量不要再使用 sinopia 了會有各種坑,具體可以自己實驗。
  • 有問題可以在 stackoverflow 上提問,官方維護者非常友好,回覆效率特別快。

原文連結

相關文章