使用sinopia 搭建私有npm服務(wù)器的教程
簡(jiǎn)介

效果展示
使用 sinopia 的好處是,node系的工程師,內(nèi)部協(xié)作時(shí),使用自有 npm 包,會(huì)非常方便;另外,sinopia,會(huì)緩存已經(jīng)下載過(guò)的包,可以在相當(dāng)程度上,加速 npm install 相關(guān)命令的執(zhí)行。
工作中,確實(shí)有需要用到 sinopia 來(lái)作為私有 npm 服務(wù)器的場(chǎng)景。原來(lái)一直在自己電腦上開(kāi)啟 sinopia。這樣做最大的問(wèn)題是,sinopia 后臺(tái)一直開(kāi)著,會(huì)越來(lái)越耗費(fèi)資源,電腦最后會(huì)變得很卡。偶爾,還會(huì)因?yàn)橥涢_(kāi)啟或關(guān)閉 sinopia,帶來(lái)各種不便利。
今天我試著直接在樹莓派上搭建一個(gè) sinopia 服務(wù)。最終實(shí)現(xiàn)的效果較為完整,基本滿足需要了。包含用戶權(quán)限管理,外網(wǎng)使用自定義域名訪問(wèn),sinopia服務(wù)開(kāi)機(jī)自啟等特性。
注意:以下 shell 命令,默認(rèn)在樹莓派的shell中執(zhí)行,而不是在本機(jī)電腦上。
安裝最新長(zhǎng)期支持版 node 環(huán)境
樹莓派自帶的 node 環(huán)境是 v4.8.2,有必要升級(jí)下。
安裝 nvm
建議安裝 nvm,以方便管理多個(gè)版本的 node 環(huán)境。
# 安裝 nvm wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash # 重啟shell # 驗(yàn)證 nvm 安裝 command -v nvm
使用 nvm 安裝最新長(zhǎng)期支持版 node 環(huán)境
# 安裝 Node nvm install --lts #驗(yàn)證安裝 --> v8.9.1 node -v
安裝和配置 sinopia
安裝 sinopia
# 安裝 npm install -g sinopia # 驗(yàn)證是否安裝成功 --> 這一步會(huì)輸出自動(dòng)生成的配置文件路徑等信息。 sinopia
解決端口 4873 占用問(wèn)題
sinopia 啟動(dòng)時(shí),默認(rèn)使用 4873端口,可能會(huì)遇到端口沖突問(wèn)題。
# 安裝 lsof 命令 sudo apt-get update sudo apt-get install lsof # 查看端口占用進(jìn)程 PID lsof -i :4873 # 殺死占用 4873 端口的進(jìn)程。4649,要換為實(shí)際的 PID。 kill -9 4649
注冊(cè)一個(gè)默認(rèn)賬戶
為了提高安全性,我們稍后會(huì)禁用 sinopia 的用戶注冊(cè)功能,所以先注冊(cè)一個(gè)默認(rèn)的 sinopia 賬戶。需要在當(dāng)前 shell 中執(zhí)行 sinopia 命令開(kāi)啟服務(wù)之后,再重新打開(kāi)一個(gè) shell 執(zhí)行:
npm set registry http://localhost:4873/ npm adduser --registry http://localhost:4873/
用戶名,密碼,郵箱等,要記牢,適當(dāng)設(shè)置的復(fù)雜點(diǎn)。
### 升級(jí)安裝 vim
感覺(jué)樹莓派自帶的 vim 不太好使了,我也順便升級(jí)了下。
```
# 安裝 vim
sudo apt-get update
sudo apt-get install vim
# 配置支持vim中鼠標(biāo)右鍵復(fù)制
vim ~/.vimrc
```
在 .vimrc 此文件中增加如下一行:
shell set mouse=v
配置 sinopia
配置文件路徑可以在執(zhí)行 sinopia 命令時(shí),從其輸出中查看,一般應(yīng)是 /home/pi/.config/sinopia/config.yaml
基于我的使用使用經(jīng)驗(yàn)和文檔說(shuō)明,主要配置了以下內(nèi)容:
max_users: -1 :禁用注冊(cè)。
*npmjs: url: https://registry.npm.taobao.org* : 設(shè)置 npm 鏡像為淘寶源,一來(lái)可以加速 npm 公共包的安裝,二來(lái)借助淘寶源的只讀特性,避免誤操作發(fā)布私有 npm 包到外網(wǎng)上。
access: $authenticated:禁止匿名用戶訪問(wèn)。配置后,未登錄用戶看不到 sinopia 上私有包的任何信息。
max_body_size: '200mb':這樣設(shè)置,會(huì)提高安裝超級(jí) npm 包的成功率,比如 react-native 。
完整配置內(nèi)容如下。如果你不是在樹莓派上配置,請(qǐng)把 /home/pi 替換為自己真實(shí)的用戶路徑名。
#
# 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: /home/pi/.local/share/sinopia/storage
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
# a list of other known repositories we can talk to
uplinks:
npmjs:
url: https://registry.npm.taobao.org
packages:
'@*/*':
# scoped packages
access: $authenticated
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: $authenticated
# 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
# log settings
logs:
- {type: stdout, format: pretty, level: http}
#- {type: file, path: sinopia.log, level: info}
max_body_size: '200mb'
可以在本地編輯器中修改好配置,然后直接復(fù)制到樹莓派上:
# 打開(kāi)配置文件 vim /home/pi/.config/sinopia/config.yaml
使用粘貼命令。直接粘貼,格式會(huì)錯(cuò)亂。
:set paste i # 右鍵粘貼即可。
配置frpc 遠(yuǎn)程訪問(wèn)
關(guān)于 frp 的配置問(wèn)題,詳見(jiàn):【小技巧解決大問(wèn)題】使用 frp 突破阿里云主機(jī)無(wú)彈性公網(wǎng) IP 不能用作 Web 服務(wù)器的限制。此處只貼出 frpc 的關(guān)鍵配置變更:
[web-sinopia] type = http local_port = 4873 subdomain = sinopia
使用 Systemd 實(shí)現(xiàn) sinopia 服務(wù)開(kāi)機(jī)自啟
樹莓派,默認(rèn)是帶有 Systemd 的,直接使用即可:
sudo vim /usr/lib/systemd/system/sinopia.service
sinopia.service 具體內(nèi)容如下,其中/home/pi/.config/sinopia/config.yaml 要替換為自己的 config.yaml 地址:
[Unit] DescrIPtion=sinopia After=network.target [Service] TimeoutStartSec=30 ExecStart=/home/pi/.nvm/versions/node/v8.9.1/bin/sinopia /home/pi/.config/sinopia/config.yaml ExecStop=/bin/kill $MAINPID Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target
啟動(dòng) sinopia 并設(shè)置開(kāi)機(jī)啟動(dòng):
systemctl enable sinopia systemctl start sinopia systemctl status sinopia
其他可能有用的命令
# 禁用服務(wù) systemctl disable sinopia # 重新啟動(dòng)服務(wù) systemctl restart sinopia
在另一臺(tái)電腦上使用 sinopia 私有 npm 服務(wù)器功能
假定,最終的 sinopia 服務(wù)器的外網(wǎng)地址是: *http://sinopia.example.com*
真正想使用,需要在終端中配置下:
npm set registry http://sinopia.example.com npm adduser --registry http://sinopia.example.com npm login
配置完畢后,你可以試著發(fā)布一個(gè)私有 npm 包:
# 在某個(gè)文件夾初始化一個(gè)新的 npm 包 npm init # 發(fā)布到私有 sinopia 服務(wù)器: npm publish
發(fā)布成功后,在瀏覽器中登錄 *http://sinopia.example.com*,刷新頁(yè)面,應(yīng)該就能看到自己剛發(fā)布的那個(gè)包了。
注意,其他用戶在使用私有庫(kù)上的包時(shí),也應(yīng)該先登錄,否則會(huì)報(bào)錯(cuò):
unregistered users are not allowed to access package
以上這篇使用sinopia 搭建私有npm服務(wù)器的教程就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
rsync 只同步目錄結(jié)構(gòu)不同步文件的方法
這篇文章主要介紹了rsync 只同步目錄結(jié)構(gòu)不同步文件的方法,需要的朋友可以參考下2015-01-01
Linux 系統(tǒng)下搭建 Gitlab 服務(wù)器的過(guò)程分析
這篇文章主要介紹了Linux 系統(tǒng)下搭建 Gitlab 服務(wù)器的過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
理解web服務(wù)器和數(shù)據(jù)庫(kù)的負(fù)載均衡以及反向代理
這里的“負(fù)載均衡”是指在網(wǎng)站建設(shè)中應(yīng)該考慮的“負(fù)載均衡”。假設(shè)我們要搭建一個(gè)網(wǎng)站:aaa.me,我們使用的web服務(wù)器每秒能處理100條請(qǐng)求,而aaa.me這個(gè)網(wǎng)站最火的時(shí)候也只是每秒99條請(qǐng)求,那么我們使用一個(gè)服務(wù)器是完全可以的2014-04-04
FileZilla Server搭建FTP服務(wù)器配置及425錯(cuò)誤與TLS警告解決方法詳解
本文詳細(xì)講解了FileZilla Server搭建FTP服務(wù)器配置以及425 Can't open data,You appear to be behind a NAT router,FTP over TLS is not enabled等相關(guān)問(wèn)題的解決方法2018-10-10
構(gòu)建基于虛擬用戶的vsftpd服務(wù)器應(yīng)用
這篇文章主要介紹了構(gòu)建基于虛擬用戶的vsftpd服務(wù)器應(yīng)用,需要的朋友可以參考下2017-05-05

