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
發佈成功後,你就能夠像安裝別的包那樣安裝本身發佈的包了