centos下搭建npm镜像

写在前面

对前端开发来说,nodejs你可能并不陌生,也许你不会用它来写程序,但它有很强大的模块库可以帮你在开发过程中轻松的搞定一些重复无聊的工作,例如你可以使用Grunt以及它的插件自动完成代码校验,压缩,合并,生成文档和单元测试等。如果你知道这些,那么你会了解,在用npm安装模块的时候会到境外服务器上去下载这些模块,而在天朝这种特殊的环境下,可能下载会很慢,甚至连接会被重置;或者你需要断网开发而因为临时需要某些模块而不得安装;又或者哪天某个模块已经被移除废弃了,而你接手的旧项目又需要这个模块;基于这样或那样的理由,我着手在内网搭建了个npm镜像供团队使用,期间遇到了一些问题,让我们一步一步搞定它。

安装couchdb

npmjs.org将自己的项目挂在https://github.com/isaacs/npmjs.org,需要制作镜像的同学可以按照说明来制作镜像,首先你需要安装CouchDB 1.1.0或更新的版本。

centos下输入命令:

install-couchdb

install couchdb

一阵刷屏以后couchdb就安装好了,然后启动它,你可以看到进程跑起来了

run couchdb

run-couchdb

由于couchdb默认是监听本地的请求,因此你需要配置它,让它可以接受来自局域网内的请求,将配置中的[httpd]段端口和地址前面的分号注释去掉,将127.0.0.1改成0.0.0.0然后重启服务即可

edit couchdb config

edit couchdb config

重启服务

restart couchdb

restart couchdb

然后就可以在其他机器上打开浏览器访问部署couchdb的ip和默认端口,看到Welcome信息说明安装成功了。

check couchdb in browser

check couchdb in browser

安装成功后你可以通过IP:端口/_utils/index.html访问couchdb管理界面,默认没有设置帐号密码所有人都可以访问,在界面右下角有个配置链接。

couchdb overview

couchdb overview

安装Python2.7

本来正常应该没Python什么事的,坑爹的centos的Python版本是2.4,而nodejs需要至少版本是2.6+的支持,因此在编译nodejs之前,我们需要先编译个Python2.7版本。依次执行下列命令安装,不是重点,带过~

安装完成后我们希望系统默认使用2.7版本,但是yum只能在2.4上运行,因此不能直接卸载2.4版本,需要配置yum使用2.4,而系统默认使用2.7,先备份2.4,在对Python建立软链接。

完成上面工作后,我们需要修改yum头部,让它在Python2.4下工作

将#!/usr/bin/python改为#!/usr/bin/python2.4保存退出即可。

安装同步和搜索模块

下面的步骤是根据官方在Github上的说明进行的,先把项目从Github上拉下来。

然后安装couchapp和semver模块

注意,由于运行时需要,这里的couchapp在全局和npmjs.org这个目录下都安装了,切记不要漏掉了。

会遇到问题的地方上面都过了一遍,剩下的步骤你可以按照https://github.com/isaacs/npmjs.org的步骤用curl抓取内容,也可以使用couchdb的web管理界面(http://ip:5984/_utils/replicator.html)进行同步操作,记得勾选“Continuous”让脚本不停的跑,由于数据量大,同步镜像需要很长时间,慢慢等吧。

couchdb replicator

couchdb replicator

测试使用镜像

说明文档里提到三种方式,我们直接使用全局配置把registry地址改成我们内网的即可,然后就可以跟平常一样使用npm安装模块,你会发现安装模块时请求的是内网镜像地址了。

文章中提到的ip地址记得改成你自己实际的ip地址,在镜像完成同步之前,若你使用npm命令测试安装可能看到404的结果,不要着急。

npm search

npm search

完!

参考:http://clock.co.uk/tech-blogs/how-to-create-a-private-npmjs-repository

如需转载,请注明出处:https://i.wanz.im/2013/11/01/create-an-npm-repository-mirror-on-centos/

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Time limit is exhausted. Please reload CAPTCHA.