创建一个私有的Nodejs npm库
创建一个私有的Nodejs npm库
之前自己搭建了一个npm库,用于放不想公开的模块。但每次部署总是需要执行两条命令来分别安装私有模块和npmjs.org上的模块,于是再搭建了个nginx来把私有库没有的模块代理到npmjs.org上,最终的结果就是安装模块只需要执行一句: npm --registry http://registry.npmjs.local install 为了方便大家和自己下次安装,把脚本贴出来~ 注:搭建环境是Centos 6.3 私有库有个老外写了个教程:《How to create a private npmjs repository》 不过我在Centos上安装与之有些不同,过程如下: 1、下载个比较新的yum源: 更新完epel-release-6-8.noarch.rpm后yum list couchdb了一下, 发现版本是1.0.4-2.el6,但npmjs要求couchdb版本为1.1.0+,没办法只用用源码安装; 2、安装必要的依赖,wiki上有说明: yum install libicu-devel openssl-devel curl-devel make gcc js-devel libtool which gcc-c++ erlang -y 3、编译安装couchdb: ./configure --with-erlang=$erlpath make sudo make install 4、按wiki上说的建立couchdb帐号并给权限: adduser -r --home /usr/local/var/lib/couchdb -M --shell /bin/bash --comment “CouchDB Administrator” couchdb chown -R couchdb:couchdb /usr/local/etc/couchdb chown -R couchdb /usr/local/var/lib/couchdb chown -R couchdb /usr/local/var/run/couchdb chown -R couchdb:couchdb /usr/local/var/log/couchdb chmod -R 0770 /usr/local/etc/couchdb chmod -R 0770 /usr/local/var/lib/couchdb chmod -R 0770 /usr/local/var/log/couchdb chmod -R 0770 /usr/local/var/run/couchdb 5、修改**/usr/local/etc/couchdb/default.ini文件中的bind_address为0.0.0.0,启动服务即可启动couchdb,此时可由地址“http://localhost:5984/_utils/”来访问couchdb,安装couchdb是建私有npm里最复杂的,后面我会贴出脚本来方便大家; 6、按上面老外的教程即可完成私有npm库的搭建,也可见npmjs的github,然后只需将registry指向couchdb即可操作私有npm库: npm --registry http://localhost:5984/registry/_design/scratch/_rewrite login npm --registry http://localhost:5984/registry/_design/scratch/_rewrite publish my-repo 私有npm到这里就建好了,但,链接好长! 于是在/usr/local/etc/couchdb/default.ini文件中添加: [vhosts] example.com = /registry/_design/scratch/_rewrite 这回我们可以用http://localhost:5984来代替那串长长的链接了,接着就是将私有npm库没有的模块(返回404)通过npmjs.org找,于是写nginx配置如下: <pre><code> upstream couchdb { server 127.0.0.1:5984; } upstream registry.npmjs.org { server registry.npmjs.org; }
server {
listen 80;
server_name registry.npmjs.local;
location / {
#这里一定要带上Host
proxy_set_header Host registry.npmjs.local:5984;
proxy_pass http://couchdb;
proxy_intercept_errors on;
error_page 404 = [@fallback](/user/fallback);
}
location [@fallback](/user/fallback) {
internal;
proxy_set_header Host registry.npmjs.org;
proxy_pass http://registry.npmjs.org;
}
}
</code></pre>
至此,我们就能像前面说的只用一条命令即可安装所有依赖的模块了。
最后贴上安装couchdb的脚本:
<pre><code>
mkdir couchdb_install
cd couchdb_install
yum install wget -y
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
rpm -Uvh remi-release-6.rpm epel-release-6-8.noarch.rpm
yum install libicu-devel openssl-devel curl-devel make gcc js-devel libtool which gcc-c++ -y
sleep 2
yum install erlang -y
name=basename $1
rm -rf $name
wget $1
tar -zxvf $name
cd ${name/.tar.gz/}
if [ “getconf LONG_BIT
” = “64” ]; then
erlpath=/usr/lib64/erlang/usr/include
else
erlpath=/usr/lib/erlang/usr/include
fi
./configure --with-erlang=$erlpath
make
make install
adduser -r --home /usr/local/var/lib/couchdb -M --shell /bin/bash --comment “CouchDB Administrator” couchdb chown -R couchdb:couchdb /usr/local/etc/couchdb chown -R couchdb /usr/local/var/lib/couchdb chown -R couchdb /usr/local/var/run/couchdb chown -R couchdb:couchdb /usr/local/var/log/couchdb chmod -R 0770 /usr/local/etc/couchdb chmod -R 0770 /usr/local/var/lib/couchdb chmod -R 0770 /usr/local/var/log/couchdb chmod -R 0770 /usr/local/var/run/couchdb
rm -rf /etc/init.d/couchdb ln -s /usr/local/etc/rc.d/couchdb /etc/init.d/couchdb chkconfig --add couchdb chkconfig --level 1234 couchdb on
conf=cat /usr/local/etc/couchdb/default.ini | sed -e 's/bind_address = 127.0.0.1/bind_address = 0.0.0.0/g'
echo “$conf” > /usr/local/etc/couchdb/default.ini
service couchdb restart </code></pre> 执行: sudo sh couchdb-install http://mirrors.tuna.tsinghua.edu.cn/apache/couchdb/source/1.3.1/apache-couchdb-1.3.1.tar.gz
之前自己搭建了一个npm库,用于放不想公开的模块。但每次部署总是需要执行两条命令来分别安装私有模块和npmjs.org上的模块,于是再搭建了个nginx来把私有库没有的模块代理到npmjs.org上,最终的结果就是安装模块只需要执行一句: npm --registry http://registry.npmjs.local install 为了方便大家和自己下次安装,把脚本贴出来~ 注:搭建环境是Centos 6.3 私有库有个老外写了个教程:《How to create a private npmjs repository》 不过我在Centos上安装与之有些不同,过程如下: 1、下载个比较新的yum源: 更新完epel-release-6-8.noarch.rpm后yum list couchdb了一下, 发现版本是1.0.4-2.el6,但npmjs要求couchdb版本为1.1.0+,没办法只用用源码安装; 2、安装必要的依赖,wiki上有说明: yum install libicu-devel openssl-devel curl-devel make gcc js-devel libtool which gcc-c++ erlang -y 3、编译安装couchdb: ./configure --with-erlang=$erlpath make sudo make install 4、按wiki上说的建立couchdb帐号并给权限: adduser -r --home /usr/local/var/lib/couchdb -M --shell /bin/bash --comment “CouchDB Administrator” couchdb chown -R couchdb:couchdb /usr/local/etc/couchdb chown -R couchdb /usr/local/var/lib/couchdb chown -R couchdb /usr/local/var/run/couchdb chown -R couchdb:couchdb /usr/local/var/log/couchdb chmod -R 0770 /usr/local/etc/couchdb chmod -R 0770 /usr/local/var/lib/couchdb chmod -R 0770 /usr/local/var/log/couchdb chmod -R 0770 /usr/local/var/run/couchdb 5、修改**/usr/local/etc/couchdb/default.ini文件中的bind_address为0.0.0.0,启动服务即可启动couchdb,此时可由地址“http://localhost:5984/_utils/”来访问couchdb,安装couchdb是建私有npm里最复杂的,后面我会贴出脚本来方便大家; 6、按上面老外的教程即可完成私有npm库的搭建,也可见npmjs的github,然后只需将registry指向couchdb即可操作私有npm库: npm --registry http://localhost:5984/registry/_design/scratch/_rewrite login npm --registry http://localhost:5984/registry/_design/scratch/_rewrite publish my-repo 私有npm到这里就建好了,但,链接好长! 于是在/usr/local/etc/couchdb/default.ini文件中添加: [vhosts] example.com = /registry/_design/scratch/_rewrite 这回我们可以用http://localhost:5984来代替那串长长的链接了,接着就是将私有npm库没有的模块(返回404)通过npmjs.org找,于是写nginx配置如下: <pre><code> upstream couchdb { server 127.0.0.1:5984; } upstream registry.npmjs.org { server registry.npmjs.org; }
server {
listen 80;
server_name registry.npmjs.local;
location / {
#这里一定要带上Host
proxy_set_header Host registry.npmjs.local:5984;
proxy_pass http://couchdb;
proxy_intercept_errors on;
error_page 404 = [@fallback](/user/fallback);
}
location [@fallback](/user/fallback) {
internal;
proxy_set_header Host registry.npmjs.org;
proxy_pass http://registry.npmjs.org;
}
}
</code></pre>
至此,我们就能像前面说的只用一条命令即可安装所有依赖的模块了。
最后贴上安装couchdb的脚本:
<pre><code>
mkdir couchdb_install
cd couchdb_install
yum install wget -y
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
rpm -Uvh remi-release-6.rpm epel-release-6-8.noarch.rpm
yum install libicu-devel openssl-devel curl-devel make gcc js-devel libtool which gcc-c++ -y
sleep 2
yum install erlang -y
name=basename $1
rm -rf $name
wget $1
tar -zxvf $name
cd ${name/.tar.gz/}
if [ “getconf LONG_BIT
” = “64” ]; then
erlpath=/usr/lib64/erlang/usr/include
else
erlpath=/usr/lib/erlang/usr/include
fi
./configure --with-erlang=$erlpath
make
make install
adduser -r --home /usr/local/var/lib/couchdb -M --shell /bin/bash --comment “CouchDB Administrator” couchdb chown -R couchdb:couchdb /usr/local/etc/couchdb chown -R couchdb /usr/local/var/lib/couchdb chown -R couchdb /usr/local/var/run/couchdb chown -R couchdb:couchdb /usr/local/var/log/couchdb chmod -R 0770 /usr/local/etc/couchdb chmod -R 0770 /usr/local/var/lib/couchdb chmod -R 0770 /usr/local/var/log/couchdb chmod -R 0770 /usr/local/var/run/couchdb
rm -rf /etc/init.d/couchdb ln -s /usr/local/etc/rc.d/couchdb /etc/init.d/couchdb chkconfig --add couchdb chkconfig --level 1234 couchdb on
conf=cat /usr/local/etc/couchdb/default.ini | sed -e 's/bind_address = 127.0.0.1/bind_address = 0.0.0.0/g'
echo “$conf” > /usr/local/etc/couchdb/default.ini
service couchdb restart </code></pre> 执行: sudo sh couchdb-install http://mirrors.tuna.tsinghua.edu.cn/apache/couchdb/source/1.3.1/apache-couchdb-1.3.1.tar.gz
有用,谢谢
好分享。收藏了
赞一个
创建一个私有的Node.js npm库
在某些情况下,你可能希望创建一个私有的Node.js npm库,以便管理一些不希望公开的模块。以下是如何在CentOS 6.3环境下搭建一个私有npm库,并通过Nginx代理到npmjs.org的方法。
1. 安装CouchDB
私有npm库的核心组件是CouchDB。由于CentOS默认的CouchDB版本较低,我们需要手动安装较新版本。
# 更新系统包
sudo yum update -y
# 安装必要的依赖
sudo yum install libicu-devel openssl-devel curl-devel make gcc js-devel libtool which gcc-c++ -y
# 下载并编译安装CouchDB
wget http://mirrors.tuna.tsinghua.edu.cn/apache/couchdb/source/1.3.1/apache-couchdb-1.3.1.tar.gz
tar -zxvf apache-couchdb-1.3.1.tar.gz
cd apache-couchdb-1.3.1
./configure --with-erlang=/usr/lib64/erlang/usr/include
make
sudo make install
# 创建CouchDB用户并设置权限
sudo adduser -r --home /usr/local/var/lib/couchdb -M --shell /bin/bash --comment "CouchDB Administrator" couchdb
sudo chown -R couchdb:couchdb /usr/local/etc/couchdb
sudo chown -R couchdb /usr/local/var/lib/couchdb
sudo chown -R couchdb /usr/local/var/run/couchdb
sudo chown -R couchdb:couchdb /usr/local/var/log/couchdb
sudo chmod -R 0770 /usr/local/etc/couchdb
sudo chmod -R 0770 /usr/local/var/lib/couchdb
sudo chmod -R 0770 /usr/local/var/log/couchdb
sudo chmod -R 0770 /usr/local/var/run/couchdb
# 启动CouchDB
sudo /usr/local/etc/rc.d/couchdb start
2. 配置CouchDB
编辑CouchDB的配置文件/usr/local/etc/couchdb/default.ini
,将bind_address
从127.0.0.1
改为0.0.0.0
,以便可以从外部访问。
[httpd]
bind_address = 0.0.0.0
3. 配置Nginx代理
使用Nginx作为反向代理,将请求分发到CouchDB和npmjs.org。
upstream couchdb {
server 127.0.0.1:5984;
}
upstream registry.npmjs.org {
server registry.npmjs.org;
}
server {
listen 80;
server_name registry.npmjs.local;
location / {
proxy_set_header Host registry.npmjs.local:5984;
proxy_pass http://couchdb;
proxy_intercept_errors on;
error_page 404 = @fallback;
}
location @fallback {
internal;
proxy_set_header Host registry.npmjs.org;
proxy_pass http://registry.npmjs.org;
}
}
保存上述配置后,重启Nginx:
sudo systemctl restart nginx
4. 使用私有npm库
现在你可以使用私有npm库进行登录和发布操作:
npm --registry http://registry.npmjs.local/login
npm --registry http://registry.npmjs.local/publish my-repo
这样,你就可以通过一条命令安装所有依赖的模块:
npm --registry http://registry.npmjs.local install
通过这种方式,你可以轻松地创建和管理自己的私有npm库,并且能够方便地集成到现有的开发流程中。
为了创建一个私有的 Node.js npm 库,我们可以使用 verdaccio
这样的轻量级私有 npm 注册表,而不是复杂的 CouchDB 配置。以下是详细的步骤和示例代码:
步骤 1: 安装 Verdaccio
Verdaccio 是一个非常简单的私有 npm 注册表,可以快速搭建。
npm install -g verdaccio
步骤 2: 启动 Verdaccio
启动 Verdaccio 服务,默认情况下会在 http://localhost:4873
上运行。
verdaccio
步骤 3: 配置 npm 使用私有注册表
编辑你的 .npmrc
文件或直接通过命令行指定注册表地址。
npm set registry http://localhost:4873
步骤 4: 发布私有包
你可以使用 npm publish
命令发布私有包到 Verdaccio。
npm publish --registry http://localhost:4873
示例代码:创建一个简单的 npm 包
假设我们要创建一个名为 my-private-module
的私有 npm 包。
文件结构
my-private-module/
├── package.json
└── index.js
package.json
{
"name": "my-private-module",
"version": "1.0.0",
"main": "index.js",
"description": "A simple private module",
"author": "Your Name",
"license": "MIT"
}
index.js
module.exports = function() {
return 'Hello, private module!';
};
发布私有包
在 my-private-module
目录下运行以下命令:
npm login --registry http://localhost:4873
npm publish --registry http://localhost:4873
安装私有包
安装时指定相同的注册表地址:
npm install --registry http://localhost:4873 my-private-module
这样你就成功创建并发布了私有 Node.js npm 包。