环境准备
cnpm 2.19.2
docker 1.13.0
一、build docker image 以及配置docker-compose
mkdir dockerCnpm
cd dockerCnpm
touch Dockerfile
touch docker-cnmpose.yml
1.Dockerfile的内容为
FROM node:6.9.4
# Working enviroment
ENV APPDIR /var/app/cnpmjs.org
ENV CNPMJS_ORG_VERSION 2.19.2
RUN \
mkdir /var/app && \
install -o www-data -d /var/app && \
mkdir /var/www/ && mkdir /var/www/.cnpmjs.org/ && chown www-data:www-data -R /var/www
USER www-data
RUN \
wget -P /tmp https://github.com/cnpm/cnpmjs.org/archive/${CNPMJS_ORG_VERSION}.tar.gz && \
tar xvzf /tmp/${CNPMJS_ORG_VERSION}.tar.gz -C /var/app && \
mv /var/app/cnpmjs.org-${CNPMJS_ORG_VERSION} ${APPDIR}
WORKDIR ${APPDIR}
RUN npm install --build-from-source --registry=https://registry.npm.taobao.org --disturl=https://npm.taobao.org/mirrors/node
EXPOSE 7001 7002
# Entrypoint
CMD ["/usr/local/bin/node", "/var/app/cnpmjs.org/dispatch.js"]
npm install –build-from-source –registry=https://registry.npm.taobao.org –disturl=https://npm.taobao.org/mirrors/node
指定npm install的下载源 ,
如果你安装的模块依赖了 C++ 模块, 需要编译, 肯定会通过 node-gyp 来编译,
node-gyp 在第一次编译的时候, 需要依赖 node 源代码, 于是又会去 node dist 下载, 这里我们指向https://npm.taobao.org/mirrors/node。
2.docker-cnmpose.yml的内容
cnpm:
image: 'images'
ports:
- "7001:7001"
- "7002:7002"
volumes:
- ./config:/var/app/cnpmjs.org/config
- ./.cnpmjs.org/:/var/www/.cnpmjs.org/
挂载config配置,以及数据包存储位置,sync数据包将存放在./.cnpmjs.org/
里面。
二、配置config信息
在 dockerCnpm目录下创建 config文件夹 ,拷贝源码config 的 index.js文件到dockerCnpm/config/目录下。
在dockerCnpm/config/目录下创建自定义config.js。
接入企业私有的用户系统DefaultUserService
配置相关的数据库信息
具体config.js文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66function DefaultUserService() {
}
var proto = DefaultUserService.prototype;
/**
* Auth user with login name and password
* @param {String} login login name
* @param {String} password login password
* @return {User}
*/
proto.auth = function* (login, password) {
};
/**
* Get user by login name
* @param {String} login login name
* @return {User}
*/
proto.get = function* (login) {
};
/**
* List users
* @param {Array<String>} logins login names
* @return {Array<User>}
*/
proto.list = function* (logins) {};
/**
* Search users
* @param {String} query query keyword
* @param {Object} [options] optional query params
* - {Number} limit match users count, default is `20`
* @return {Array<User>}
*/
proto.search = function* (query, options) {
};
module.exports = {
debug: true,
enableCluster: true, // enable cluster mode
database: {
db: 'cnpm_test',
username: 'jance',
password: '123',
dialect: 'mysql',
host: 'ip',
port: 'port',
pool: {
maxConnections: 10,
minConnections: 0,
//maxIdleTime: 30000
},
logging: !!process.env.SQL_DEBUG,
},
enablePrivate: false,//允许普通用户上传包
syncModel: 'exist', // 'none', 'all', 'exist',
userService: new DefaultUserService(),
customUserService: true,
logoURL: '',//配置logo
customReadmeFile:'../my.md',//配置首页文件显示
customFooter: 'ciyy',//配置底部文案
registryHost: 'ip:7001',// 修改registryHost,默认是r.cnpmjs.org,不设置的话,cnpm install 会到r.cnpmjs.org中install包
"scopes": ["@org1", "@org2"]
};值得注意的是用户自定义内部登陆的DefaultUserService,必须包含auth,get,list,search不然会报错。
registryHost
也是个值得留意的配置:默认是r.cnpmjs.org,不设置的话,cnpm install 会到r.cnpmjs.org中install包关于mysql 表的设置
网上有两种方法一种是 cnpmjs.org/docs/db.sql 导入,一种是 node –harmony models/init_script.js。
然后我发现第二种方法的表不最新的。所以用第一种方法导入就好.关于多少磁盘够存储
目前http://registry.npmjs.org/ 的disk_size:2533699713约等于2.36tb
有关参考可以看cnpm issues 939
三、用户端配置
- 使用cnpm
1 | $ npm install -g cnpm --registry=https://ip:7001 --registryweb=http://ip:7002 |
2.alias NPM
1 | alias cnpm="npm --registry=https://ip:7001 \ |
四、总结
根基以上前两步简单的基础本地磁盘存储的私有registry已经搭建完成,
支持企业内部用户的登陆。