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
發布成功后,你就可以像安裝別的包那樣安裝自己發布的包了