使用Docker 部署 私有npm仓库

工具

采用Docker部署私有npm仓库

系统环境

  • linux
  • Docker
  • Node
  • Git
1. 安装docker-compose,官网上有介绍好几种,只有这种方式才安装成功
sudo curl -L --fail https://github.com/docker/compose/releases/download/1.21.2/run.sh -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
2. 安装 cnpm
npm install -g cnpm
3. 通过docker启动mysql
docker run --name mynpm-sql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=xxxxxx -d mysql:5.6 // 进入之后,要对用户进行授权,否则用navicat连接不上 docker exec -it mynpm-sql mysql -uroot -pxxxxxx GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'xxxxxx'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'xxxxxx';
  • 用Navicat链接mysql,并新建名为"cnpmjs_test"数据库
  • 在数据库中运行sql文件选择"cnpmjs.org-master/docs/db.sql"文件创建表
4. 从github拉取cnpm项目
git clone https://github.com/cnpm/cnpmjs.org.git
5. 优化点
  • 我们选择的是mysql数据库,把package.json中的sqlite3依赖删掉,不然安装sqlite3时容易各种报错
  • 修改目录下的Dockerfile文件,把依赖node的版本改成8.11
  • 删除test文件夹(测试文件)
6. 修改配置文件

用docker部署,对应的是"/docs/dockerize/config.js"

database: { // 创建的数据库名称 db: 'cnpmjs_test', username: '用户名', password: '密码', // the sql dialect of the database // - currently supported: 'mysql', 'sqlite', 'postgres', 'mariadb' dialect: 'mysql', // 改为服务器地址 host: '118.25.49.178', // custom port; default: 3306 port: 3306, }, // 设置私有npm包组的别名,在发布私有npm的时候会用到 scopes: [ '@yxf' ] // 修改为服务器地址,不然安装npm包的时候会报错 registryHost: 'xxx.xx.xx.xxx', // 修改为服务器地址,不然安装npm包的时候会报错 handleSyncRegistry: 'http://xxx.xx.xx.xxx:7001',
7. 部署
// 在跟目录下执行,生成叫"cnpmjs.org"的Docker镜像 docker-compose build // 启动 docker run --name cnpm -d -p 7001:7001 -p 7002:7002 cnpmjs.org

正常情况下,我们就可以通过xxx.xxx.xx.xxx:7002访问到页面

8. 发布npm包

新建个文件夹,添加.npmrc文件配置NPM私有库地址,也可以直接使用nrm来进行切换源

registry=http://xxx.xxx.x.xxx:7001

输入npm login注册账号,发布的npm包名必须以上面设置的@yxf开头,如:’@yxf/drag’,不然提交的时候会出现’publish Failed PUT 403’错误。