用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

发布成功后,你就能够像安装别的包那样安装本身发布的包了

相关文章
相关标签/搜索