公司對於搭建本地私有npm庫有如下要求: 私有包托管在內部伺服器中 項目中使用了公共倉庫上的公共包,也使用了內部伺服器上的私有包 希望下載的時候,公共包走公共倉庫,私有包走內部伺服器的私有倉庫 伺服器硬碟有限,希望只緩存下載過的包,而不是全部同步。 ... ...
需求(這段話是摘抄參考文檔的,因為作者也想這麼說):
公司出於自身隱私保護需要,不想把自己的代碼開源到包管理區,但是又急需一套完整包管工具,來管理越來越多的組件、模塊和項目。對於前端,最熟悉的莫過於npm,bower等;但是bower的市場相容性明顯沒有npm強壯,加之commonjs規範的日益成熟。npm應該是前端包管理的不二選擇。
公司對於搭建本地私有npm庫有如下要求:
-
私有包托管在內部伺服器中
-
項目中使用了公共倉庫上的公共包,也使用了內部伺服器上的私有包
-
希望下載的時候,公共包走公共倉庫,私有包走內部伺服器的私有倉庫
-
伺服器硬碟有限,希望只緩存下載過的包,而不是全部同步。
-
對於下載,發佈npm包有對應的許可權管理,安裝方便,配置簡單,依賴少。
Sinopia 是一個零配置的私有的帶緩存功能的npm包管理工具。
1.要安裝的軟體
軟體簡介
nodejs/npm 軟體名稱: node-v6.9.1-linux-x64.tar.gz 下載地址:https://npm.taobao.org/mirrors/node/v6.9.1/
安裝命令:
tar -xvf node-v6.9.1-linux-x64.tar.gzsinopia 版本:1.4.0 安裝命令:
npm install -g sinopia
pm2 版本:2.1.4 安裝命令:
npm install -g pm2
nrm 版本:1.0.0 安裝命令:
npm install -g nrm
規劃目錄(下為本次安裝的實際目錄,可根據實際環境調整)
項 | 目錄 | 賬戶 | 備註 |
npm、nodejs解壓目錄 | /opt/software | nadmin |
|
sinopia啟動時目錄 | /home/nadmin | nadmin |
|
sinopia的passwd路徑 | /home/nadmin/node_htpasswd | nadmin | |
sinopia的storage路徑 | /home/nadmin/sinopia/storage | nadmin | 建議磁碟空間較大不推薦放在home目錄 |
2.具體安裝步驟(Server端)
創建賬戶nadmin
$ useradd nadmin安裝node和npm
安裝步驟1的目錄和命令,解壓軟體 node-v6.9.1-linux-x64.tar.gz
(註:npm會在安裝node的時候一起安裝)
$ tar -xvf node-v6.9.1-linux-x64.tar.gz
添加node_home到環境變數,用root賬戶修改/etc/profile
$vim /etc/profile #追加 NODE_HOME=/opt/software/node-v6.9.1-linux-x64 PATH=$PATH:$NODE_HOME/bin
source 使配置生效
$ source /etc/profile
配置生效之後,在任意地方可查看版本如下:
1 $ node -v 2 v6.9.1 3 $ npm -v 4 3.10.8
配置npm
先查看npm的配置文件地址
$npm config get userconfig
/home/nadmin/.npmrc
修改此配置文件,修改後查看,內容如下
$ cat /home/nadmin/.npmrc proxy=http://網路代理ip:8080/ https-proxy=http://網路代理ip:8080/ no_proxy=本地yum源ip registry=https://registry.npm.taobao.org/
也可通過命令設置http網路代理地址和npm server的地址,如下:
$ npm config set proxy http://server:port
$ npm config set https-proxy http://server:port
$ npm config set registry "http://registry.npmjs.org/"
~~由於上步驟npm已經安裝配置完畢,所以下麵的安裝軟體可以通過npm命令進行~~
安裝sinopia
$npm install -g sinopia
配置sinopia
Sinopia的特點是,你在哪個目錄運行,它的就會在對應的目錄下創建自己的文件。目錄下預設有兩個文件:config.yaml和storage,htpasswd 是添加用戶之後自動創建的
由於每次啟動預設的config.xml文件是從原始文件default.yaml拷貝而來,可先修改sinopia原始的default.yaml
地址:sinopia安裝目錄/conf/ default.yaml
查看
$ pwd /opt/software/node-v6.9.1-linux-x64/lib/node_modules/sinopia/conf $ ll total 12 -rw-rw-r-- 1 nadmin nadmin 1309 Nov 9 19:52 default.yaml -rw-rw-r-- 1 nadmin nadmin 4076 Jun 7 2015 full.yaml -rw-rw-r-- 1 nadmin nadmin 39 Jun 7 2015 README.md
修改完畢,內如下:
storage: ./storage auth: htpasswd: file: /home/nadmin/node_htpasswd uplinks: npmjs: url: http://registry.npm.taobao.org/ packages: '@*/*': access: $all publish: $authenticated '*': access: $all publish: $authenticated proxy: npmjs logs: - {type: stdout, format: pretty, level: http} listen: 0.0.0.0:4873 http_proxy: http://代理伺服器ip:8080 https_proxy: http://代理伺服器ip:8080
啟動 sinopia
在規劃好的啟動目錄下執行命令sinopia
$ pwd /home/nadmin $ sinopia warn --- config file - /home/nadmin/sinopia/config.yaml warn --- http address - http://0.0.0.0:4873/ http --> 200, req: 'GET http://registry.npm.taobao.org/express', bytes: 0/578356 http <-- 200, user: admin, req: 'GET /express', bytes: 0/34448 http --> 200, req: 'GET http://registry.npm.taobao.org/type-is', bytes: 0/54083
sinopia已經啟動,可正常使用,此種方法日誌會輸出到控制台,不建議使用,後面會介紹使用pm2對sinopia進程進行托管啟動的方法。
訪問http://ServerS::4873 查看頁面,看到如下頁面,說明sinopia安裝成功!
安裝pm2
$npm install -g pm2
使用pm2啟動sinopia
$ pm2 start sinopia [PM2] Applying action restartProcessId on app [sinopia](ids: 0) [PM2] [sinopia](0) ✓ [PM2] Process successfully started
使用pm2托管的進程可以保證進程永遠是活著的,嘗試通過kill -9去殺sinopia的進程發現殺了之後又自動啟起來。推薦使用此種方式啟動sinopia.
安裝nrm
nrm是 npm registry 管理工具, 能夠查看和切換當前使用的registry。不安裝也可以。
$npm install -g nrm $ nrm ls npm ---- https://registry.npmjs.org/ cnpm --- http://r.cnpmjs.org/ * taobao - https://registry.npm.taobao.org/ nj ----- https://registry.nodejitsu.com/ rednpm - http://registry.mirror.cqupt.edu.cn/ npmMirror https://skimdb.npmjs.com/registry/ edunpm - http://registry.enpmjs.org/ mytestnpm http://ServerS:4873/
使用命令
$ nrm add XXXXX http://XXXXXX:4873 # 添加本地的npm鏡像地址
$ nrm use XXXX # 使用本址的鏡像地址
3.驗證
在客戶端ServerC假設使用者已經安裝npm/nrm並且已經正確配置
1>npm install
現在驗證使用剛剛搭建好的sinopia npm庫(http://serverS:4873/)進行安裝軟體和發佈軟體
修改npm的訪問代理為剛剛搭建好的http://serverS:4873/
# cat .npmrc registry=http://serverS:4873/
執行安裝express的命令
$npm install express
安裝成功!
2>npm publish
本地如果有可用來發佈的模塊可以直接用,本地沒有,使用npm init根據提示創建一個。
初始化創建一個模塊
$npm init
如果需要登錄才能publish則登錄
運行npm adduser註冊賬號,如果已經有賬號直接運行 npm login
登錄成功時可通過npm whoami查看
執行發佈
# npm publish chenyu/ + chenyu@1.0.0
去serverS查看剛剛publish的模塊:成功!