使用sinopia 搭建私有npm服务器的教程

 更新时间:2017年11月22日 08:43:20   作者:iOS122  
下面小编就为大家分享一篇使用sinopia 搭建私有npm服务器的教程,具有很好的参考价值,希望对大家有所帮助

简介

效果展示

使用 sinopia 的好处是,node系的工程师,内部协作时,使用自有 npm 包,会非常方便;另外,sinopia,会缓存已经下载过的包,可以在相当程度上,加速 npm install 相关命令的执行。

工作中,确实有需要用到 sinopia 来作为私有 npm 服务器的场景。原来一直在自己电脑上开启 sinopia。这样做最大的问题是,sinopia 后台一直开着,会越来越耗费资源,电脑最后会变得很卡。偶尔,还会因为忘记开启或关闭 sinopia,带来各种不便利。

今天我试着直接在树莓派上搭建一个 sinopia 服务。最终实现的效果较为完整,基本满足需要了。包含用户权限管理,外网使用自定义域名访问,sinopia服务开机自启等特性。

注意:以下 shell 命令,默认在树莓派的shell中执行,而不是在本机电脑上。

安装最新长期支持版 node 环境

树莓派自带的 node 环境是 v4.8.2,有必要升级下。

安装 nvm

建议安装 nvm,以方便管理多个版本的 node 环境。

# 安装 nvm
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash

# 重启shell

# 验证 nvm 安装
command -v nvm

使用 nvm 安装最新长期支持版 node 环境

# 安装 Node
nvm install --lts

#验证安装 --> v8.9.1
node -v

安装和配置 sinopia

安装 sinopia

# 安装
npm install -g sinopia

# 验证是否安装成功 --> 这一步会输出自动生成的配置文件路径等信息。
sinopia

解决端口 4873 占用问题

sinopia 启动时,默认使用 4873端口,可能会遇到端口冲突问题。

# 安装 lsof 命令
sudo apt-get update
sudo apt-get install lsof

# 查看端口占用进程 PID
lsof -i :4873

# 杀死占用 4873 端口的进程。4649,要换为实际的 PID。
kill -9 4649

注册一个默认账户

为了提高安全性,我们稍后会禁用 sinopia 的用户注册功能,所以先注册一个默认的 sinopia 账户。需要在当前 shell 中执行 sinopia 命令开启服务之后,再重新打开一个 shell 执行:

npm set registry http://localhost:4873/
npm adduser --registry http://localhost:4873/

用户名,密码,邮箱等,要记牢,适当设置的复杂点。

### 升级安装 vim

感觉树莓派自带的 vim 不太好使了,我也顺便升级了下。

```
# 安装 vim
sudo apt-get update
sudo apt-get install vim

# 配置支持vim中鼠标右键复制
vim ~/.vimrc
```

在 .vimrc 此文件中增加如下一行:

shell set mouse=v

配置 sinopia

配置文件路径可以在执行 sinopia 命令时,从其输出中查看,一般应是 /home/pi/.config/sinopia/config.yaml

基于我的使用使用经验和文档说明,主要配置了以下内容:

max_users: -1 :禁用注册。

*npmjs: url: https://registry.npm.taobao.org* : 设置 npm 镜像为淘宝源,一来可以加速 npm 公共包的安装,二来借助淘宝源的只读特性,避免误操作发布私有 npm 包到外网上。

access: $authenticated:禁止匿名用户访问。配置后,未登录用户看不到 sinopia 上私有包的任何信息。

max_body_size: '200mb':这样设置,会提高安装超级 npm 包的成功率,比如 react-native 。

完整配置内容如下。如果你不是在树莓派上配置,请把 /home/pi 替换为自己真实的用户路径名。

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

可以在本地编辑器中修改好配置,然后直接复制到树莓派上:

# 打开配置文件
vim /home/pi/.config/sinopia/config.yaml

使用粘贴命令。直接粘贴,格式会错乱。

:set paste
i
# 右键粘贴即可。

配置frpc 远程访问

关于 frp 的配置问题,详见:【小技巧解决大问题】使用 frp 突破阿里云主机无弹性公网 IP 不能用作 Web 服务器的限制。此处只贴出 frpc 的关键配置变更:

[web-sinopia]
type = http
local_port = 4873
subdomain = sinopia

使用 Systemd 实现 sinopia 服务开机自启

树莓派,默认是带有 Systemd 的,直接使用即可:

sudo vim /usr/lib/systemd/system/sinopia.service

sinopia.service 具体内容如下,其中/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

启动 sinopia 并设置开机启动:

systemctl enable sinopia
systemctl start sinopia
systemctl status sinopia

其他可能有用的命令

# 禁用服务
systemctl disable sinopia

# 重新启动服务
systemctl restart sinopia

在另一台电脑上使用 sinopia 私有 npm 服务器功能

假定,最终的 sinopia 服务器的外网地址是: *http://sinopia.example.com*

真正想使用,需要在终端中配置下:

npm set registry http://sinopia.example.com
npm adduser --registry http://sinopia.example.com
npm login

配置完毕后,你可以试着发布一个私有 npm 包:

# 在某个文件夹初始化一个新的 npm 包
npm init

# 发布到私有 sinopia 服务器:
npm publish

发布成功后,在浏览器中登录 *http://sinopia.example.com*,刷新页面,应该就能看到自己刚发布的那个包了。

注意,其他用户在使用私有库上的包时,也应该先登录,否则会报错:

unregistered users are not allowed to access package

以上这篇使用sinopia 搭建私有npm服务器的教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 大数据平台使用搭建脚本一键安装OS

    大数据平台使用搭建脚本一键安装OS

    本文给大家分享的是如何在大数据平台使用脚本来实现一键安装定制OS,并给大家附上了脚本源码,有需要的小伙伴可以参考下
    2018-03-03
  • VScode连接远程服务器踩坑实战记录(新版离线vscode-server安装)

    VScode连接远程服务器踩坑实战记录(新版离线vscode-server安装)

    本文主要介绍了如何使用VScode连接远程服务器,并对离线安装vscode-server进行了详细的操作步骤说明,其中包括VScode扩展的安装与配置,vscode-server的离线下载,文件的解压缩和移动,以及VScode的一些更新设置,能够帮助读者更好地理解和掌握VScode连接远程服务器的方法
    2024-10-10
  • 教你搭建dns服务器(图文教程)

    教你搭建dns服务器(图文教程)

    这篇文章主要介绍了搭建dns服务器的图文教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • rsync @ERROR: chdir failed 的解决方法

    rsync @ERROR: chdir failed 的解决方法

    这篇文章主要介绍了rsync @ERROR: chdir failed 的解决方法,需要的朋友可以参考下
    2015-01-01
  • Redis服务器笔记

    Redis服务器笔记

    redis是一个高性能的key-value存储系统,能够作为缓存框架和队列。下面通过本文给大家分享Redis服务器的笔记,感兴趣的朋友一起看看吧
    2017-09-09
  • TCP Wrappers防火墙介绍与封锁IP地址的方法

    TCP Wrappers防火墙介绍与封锁IP地址的方法

    Tcp_Wrappers是一个用来分析TCP/IP封包的软件,类似的IP封包软件还有iptables,linux默认都安装了此软件,作为一个安全的系统
    2012-07-07
  • 浅析NFS服务器原理以及搭建配置部署步骤

    浅析NFS服务器原理以及搭建配置部署步骤

    本文对NFS服务器原理作了简要的分析,对NFS服务器的搭建配置步骤作了详细的图文描述,有需要的朋友可以借鉴参考下,希望可以对你有所帮助
    2021-08-08
  • git分支管理_动力节点Java学院整理

    git分支管理_动力节点Java学院整理

    这篇文章主要为大家详细介绍了git分支管理的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • 刀片服务器五大误区解读

    刀片服务器五大误区解读

    人总是愿意用挑剔的目光来看到新生事物,在对待刀片效劳器的问题就是如此,有些人对于一些反复介绍的技术视而不见,仍然强加给刀片效劳器一些莫须有的罪名,这些错误正影响着刀片服务器的推广和应用。
    2009-09-09
  • 0到1分析美团端侧cdn容灾解决方案

    0到1分析美团端侧cdn容灾解决方案

    作为业务研发,你是否遇到过因为 CDN 问题导致的业务图片加载失败,页面打开缓慢,页面布局错乱或者页面白屏?你是否又遇到过某些区域 CDN 域名异常导致业务停摆,客诉不断,此时的你一脸茫然,不知所措,这篇文章为大家从0到1分析美团端侧cdn容灾解决方案
    2022-01-01

最新评论