用sinopia搭建內部npm服務


sinopia搭建

這里默認你已經有node環境了,執行下面命令,全局安裝 sinopia

npm install -g sinopia

 

安裝好后,執行下面命令啟動 sinopia

sinopia

 

你會看到下面兩行提示:

warn  --- config file - /root/.config/sinopia/htpassw
warn  --- http address - http://localhost:4873/

上面一行是 sinopia 的配置文件所在路徑,下面一行是 sinopia 服務的域名和端口號

然后打開 http://localhost:4873/,如果能正常訪問,說明安裝成功

 

node服務非常脆弱,一般在實際中使用都會配合守護進程。這里我用的是 pm2 做守護進程

首先全局安裝 PM2,執行下面語句:

npm install -g pm2

 

再執行下面語句,通過 PM2 啟動 sinopia:

pm2 start `which sinopia`

 

默認情況下,sinopia 的配置是不適合直接使用的,所以我們需要對它的配置文件按需酌情修改

我們找到上面提到的配置文件目錄,打開配置文件進行編輯:

#
# This is the default config file. It allows all users to do anything,
# so don't use it on production systems. # # Look here for more config file examples: # https://github.com/rlidwka/sinopia/tree/master/conf # # path to a directory with all packages
storage: ./storage  #npm包存放的路徑

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  #默認為1000,改為-1,禁止注冊

# a list of other known repositories we can talk to
uplinks:
  npmjs:
    url: http://registry.npm.taobao.org/  #默認為npm的官網,由於國情,修改 url 讓sinopia使用 淘寶的npm鏡像地址
    
packages:  #配置權限管理 '@*/*':
    # scoped packages
    access: $all #表示哪一類用戶可以對匹配的項目進行安裝 【$all 表示所有人都可以執行對應的操作,$authenticated 表示只有通過驗證的人可以執行對應操作,$anonymous 表示只有匿名者可以進行對應操作(通常無用)】 publish: $authenticated #表示哪一類用戶可以對匹配的項目進行發布

  '*':
    # 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: $authenticated #表示哪一類用戶可以對匹配的項目進行發布

    # if package is not available locally, proxy requests to 'npmjs' registry
    proxy: npmjs #如其名,這里的值是對應於 uplinks

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

# you can specify listen address (or simply a port) 
listen: 0.0.0.0:4873  #默認沒有,只能在本機訪問,添加后可以通過外網訪問

 

上面配置文件的綠色字體是官方注釋,紅色字體是網上找到的注釋(原文參考:https://segmentfault.com/a/1190000005790827

OK,修改完配置文件后,重啟下 sinopia。萬事具備,接下來就是用本機嘗試訪問虛擬機上的 sinopia 服務了

我的虛擬機 IP 是 192.168.2.18。所以我在本機上輸入 192.168.2.18:4873

神奇的事情發生了,啥都木有...納尼,啥情況,哪里出錯了么?

這個時候切莫抓急,否則就會像我一樣,倒騰半天弄不出個所以然來

我一度懷疑上面的安裝方法是錯誤的,但打從一開始我懷疑的方向就錯了。因為虛擬機上明明能通過  http://localhost:4873/ 訪問的,說明服務肯定沒問題

那么到底是什么原因使得外網無法訪問呢?(網段什么的原因已排除...)最后我找到根源所在了,虛擬機是 centOS 的,默認情況下,防火牆沒有開放 4873 端口,外部當然訪問不到了...

當時發現原因后這是老血都吐了幾斤,服務器運維菜鳥的傷不起啊...

所以如果使用了 linux 虛擬機做服務器,搭好 web 服務后記得開放相應端口,這要上升為一個常識呀...

 

輸入命令:

vim /etc/sysconfig/iptables

進入編輯防火牆配置文件(修改 OUTPUT ACCEPT 下的內容)

 

然后加上下面這句:

-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

作用是作用是防止防火牆占用80端口

 

然后再加上下面這一句:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 4873 -j ACCEPT

開放 4873 端口

 

最后記得重啟一下防火牆:

/etc/init.d/iptables restart

好了,再試一次,用本機訪問 192.168.2.18:4873 ,成功訪問,nice!

 

 

sinopia用戶配置

Linux 下經常會出現 sinopia 服務 npm adduser 時報錯

 

最好的辦法是先在 Windows 下部署一套 sinopia 服務,然后執行 npm adduser,成功添加用戶(用戶名:admin;密碼:123456;郵箱:admin@qq.com

然后找到 htpasswd 文件 (該文件和 config.yaml 在同一目錄下,我的文件所在路徑為 C:\Users\Administrator\AppData\Roaming\sinopia\htpasswd

 

打開 htpasswd 文件,發現里面有這么一行:

admin:{SHA}fEqNCco3Yq9h5ZUglD3CZJT4lBs=:autocreated 2017-03-21T03:15:14.332Z

 

然后到 Linux 下直接執行下面命令:

vim /root/.config/sinopia/htpassw

編輯用戶列表文件,將上面找到的一行代碼 copy 到里面,然后保存

這樣就成功在 Linux 的 sinopia 服務上創建用戶了

然后在執行 npm login 登錄

就可以發布包到 Linux 服務器上了

 

 

在 sinopia 服務上安裝包 and 發布

環境和用戶問題已經解決,那么接下來我們試試在我們的服務商發布自己的包

這里推薦用 nrm 來管理 npm 的鏡像地址,非常方便

 

首先全局安裝 nrm:

npm install -g nrm

 

然后添加虛擬機npm 服務鏡像地址:

nrm add my http://192.168.2.18:4873

 

使用虛擬機鏡像:

nrm use my

 

其他常用的 nrm 命令:

nrm --help  #查看 nrm 命令幫助
nrm list  #列出可用的 npm 鏡像地址
nrm use taobao  #使用'淘寶npm'鏡像地址

 

上面我們把本機的 npm 切換到虛擬機鏡像后嗎,用它來安裝 gulp:

npm install gulp

當然,我們的服務是剛剛建好的,上面還沒發布任何包,但我們依然能成功安裝

因為 sinopia 發現服務中沒有你要下載的包,就會到 taobao 鏡像去下載

 

安裝包沒問題,然后就是發布我們自己的包了

上面已經提到如何創建用戶,這里就不再細說

發布之前要用下面命令登錄:

npm login

 

進入我們要發布的包根目錄,然后執行初始化命令創建 package.json (已經初始化的話,跳過這步):

npm init

根據提示輸入包信息,初始化完成后就可以發布了

 

然后在根目錄執行下面命令:

npm publish

發布成功后,你就可以像安裝別的包那樣安裝自己發布的包了

 


免責聲明!

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



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