用sinopia搭建內部npm服務

sinopia搭建node

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

npm install -g sinopia

 

安裝好後,執行下面命令啓動 sinopiagit

sinopia

 

你會看到下面兩行提示:github

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

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

而後打開 http://localhost:4873/,若是能正常訪問,說明安裝成功npm

 

node服務很是脆弱,通常在實際中使用都會配合守護進程。這裏我用的是 pm2 作守護進程json

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

npm install -g pm2

 

再執行下面語句,經過 PM2 啓動 sinopia:vim

pm2 start `which sinopia`

 

默認狀況下,sinopia 的配置是不適合直接使用的,因此咱們須要對它的配置文件按需酌情修改segmentfault

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

#
# 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

發佈成功後,你就能夠像安裝別的包那樣安裝本身發佈的包了

相關文章
相關標籤/搜索