sinopia的部署和使用


隨着時間的推移,前端的工程日益龐大,越來越復雜的依賴包需要包管理器來維護。相比搭建沒有優勢bower倉儲,更好的方式是在局域網搭建NPM倉儲,維護項目中package.json中的各個插件的版本即可維護項目依賴。

sinopia是一個部署簡易的可以實現github倉儲私有化的npm組件。

注:本文sinopia的版本為1.4。

1 架構模式

 
sinopia.png

如上圖:

客戶端產生npm請求后,發送到服務器(外網需要通過網關)。

用pm2啟動sinopia集群,可以自動負載均衡。當請求到sinopia后,他會先進行權限驗證(如果設置),通過驗證之后就在本地文件系統中尋找對應的npm包,如果不存在則向上游鏈接(uplinks)配置的地址發請求。

2 安裝部署

安裝較為簡單,本文檔所有的安裝都在root權限下進行。

2.1 安裝nodejs

node版本:node-v6.2.0-linux-x64.tar.gz

安裝過程略。

請注意,離線安裝時,壓縮包要在linux下解壓,否則npm無法使用。

2.2 安裝sinopia

node安裝成功並設置軟連接后,因為服務器在內網,所以先要設置npm代理。

//設置npm代理 npm config set proxy="http://name:password@proxy.domain.com:port" //設置淘寶國內鏡像 npm config set registry="https://registry.npm.taobao.org" --可以默認npmjs //安裝sionpia(不加后邊參數會在node-gyp編譯失敗) npm install sinopia --no-optional --no-shrinkwrap //將sionpia配置軟連接 ln -s /root/node_modules/sinopia/bin/sinopia /usr/local/bin/sinopia //測試啟動 sinopia 

如果安裝成功,會出現以下log,則證明安裝成功。

Sinopia doesn't need superuser privileges. Don't run it under root.

warn --- config file - /root/.config/sinopia/config.yaml

warn --- http address - http://localhost:4873/

2.3 安裝pm2

//安裝pm2 npm install pm2 -g //配置軟連接 (安裝出現警告可能會需要) ln -s /root/node/node-v6.2.0-linux-x64/lib/node_modules/pm2/bin/pm2 /usr/local/bin/pm2 //測試是否安裝成功 pm2 

如果安裝成功,則會出現pm2圖標及命令。

2.4 啟動sinopia

可以進程啟動或pm2啟動。

進程啟動: sinopia -l http://192.168.0.1:1234/

PM2啟動: pm2 start which sinopia

請注意,當用PM2啟動時,不要打錯單引號的全角半角。並且啟動的端口需要在配置文件中配置:

vi /root/.config/sinopia/config.yaml

在最后一行中加入: 

listen: 192.168.0.1:1234

3 sinopia配置(config.yaml)

配置文件目錄:

  1. config.yaml    ------sinopia的配置文件

  2. htpasswd    ------存放用戶賬戶信息的文件,密碼通過sha1、base64加密

  3. storage    ------存放npm包及緩存包的文件夾

以上文件的目錄為(root用戶下):/root/.config/sinopia/

storage的存放地址可在config.yaml中配置:

storage: /root/.local/share/sinopia/storage

3.1 權限配置方式

我們的權限配置為:發布權限只有指定賬戶有,下載權限不需要登陸認證。

先在客戶端創建發布權限的賬戶(假設為test,用戶名不能有大寫),然后為該賬戶設置發布權限:

packages:

        '*':

            # allow all users (including non-authenticated users) to read and

            # publish all packages

            #

            # you can specify usernames/groupnames (depending on your auth plugin)

            # and three keywords: "$all", "$anonymous", "$authenticated"

            access: $all

            # allow all known users to publish packages

            # (anyone can register by default, remember?)

            publish: test

            # if package is not available locally, proxy requests to 'npmjs' registry

            proxy: npmjs

以上配置文件中 '*' 為包名的通配符,access為下載權限配置,publish為發布權限配置,proxy為上游地址name。在設置好發布賬號后,我們應該禁用npm的addUser功能,如下配置:

auth: htpasswd: file: ./htpasswd # Maximum amount of users allowed to register, defaults to "+inf". # You can set this to -1 to disable registration. max_users: -1 

max_users為最大用戶數量,值為-1則無法通過addUser創建賬號。

3.2 日志收集

日志為文件存儲。

# log settings logs: - {type: stdout, format: pretty, level: http} - {type: file, path: sinopia.log, level: info} 

3.3 上游鏈接

上游鏈接是當用戶請求的npm包,在本地倉儲中不存在的時候,請求的地址。配置如下:

  # a list of other known repositories we can talk to 

uplinks:

npmjs:

url: https://registry.npmjs.org/ 

請注意,雖然配置好了上游鏈接,但是因為我們的服務器在內網,所以需要為sinopia訪問上游鏈接時的請求配置代理:

http_proxy: http://name:password;@proxy.domain.com

https_proxy: http://name:password;@proxy.domain.com

no_proxy: localhost,127.0.0.1

4 使用說明

倉儲鏈接設置:

npm config set registry http://192.168.0.1:1234/

"http://host:port"為sinopia服務地址。建議使用nrm(nrm 是一個 NPM 源管理器)切換倉儲地址。

4.1 維護

維護需要用有發布權限的賬號,進行包的發布。發布包需要先登錄:

npm login

然后根據提示輸入:

Username: test

Password:

Email: (this IS public) test@domain.com

Logged in as test on http://192.168.0.1:1234/

顯示以上內容為登錄成功。登錄成功后,在包的文件夾中輸入以下命令即可發布:

npm publish

  • abc@1.0.3

顯示 + name@version 即為發布成功,成功后也可瀏覽器進入http://192.168.0.1:1234/ 查看。

在項目中,我們要配置好package.json。

同時,我們的版本管理也需要更加嚴謹,維護好版本好的同時也要寫好更新說明,更新說明寫在組件的changelog.md中,這樣方便在瀏覽器瀏覽 http://192.168.0.1:1234/ 的時候查看。

版本號請遵循: semver 2.0 的語義化版本規則。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM