首页 > 编程知识 正文

docker仓库搭建,自建yum仓库

时间:2023-05-04 18:21:45 阅读:128656 作者:198

1前言

npm是日常前端开发过程中不可缺少的软件包管理工具,有助于快速安装npm仓库中优秀的第三方代码软件包。 它的出现极大地促进了节点和前端生态的发展和繁荣。

那么,为什么要建立私人npm仓库呢?

日常工作通常使用位于NPM共享仓库中的优秀开源代码包,但有不能开源的代码包和工具,或者自定义修改和扩展第三方开源代码。 这些代码包必须在组织中管理和共享,不能上传到NPM共享仓库。 因此,需要建立NPM私人仓库以满足上述需求。

在建立自己的私有仓库的同时,可以提高NPM软件包的安装下载速度和源的稳定性。 例如,大家常用的淘宝镜像酱,本质上也是私有仓库。 公司可以建立自己的NPM仓库,为员工提供更快、更稳定的工具包共享下载平台。

接下来依次介绍一下,3358www.Sina.com/,如何搭建私有仓库,3358www.Sina.com/大概需要10分钟的阅读时间,可以边读边实践其中:

系统版本: Ubuntu 18.04

节点版本: 12.18.2

npm版本:6.14.5

2如何建立私人仓库

因为构建npm私有仓库的方法和工具很多,所以这里选择cnpmjs进行构建。 cnpmjs是由阿里巴巴开发维护的企业级私有仓库框架,已在国内许多大工厂投入使用检测。

2.1安装MySQL

构建cnpm服务需要数据库支持,官方提供了对mysql、sqlite、postgres和mariadb数据库的支持。 在此选择mysql提供数据服务。

发布工具包到私有仓库

sudo apt-getinstallmysql-serversudoapt-getinstallmysql-clientsudoapt-getinstallibmysqlclient-dev

安装成功后,可以通过在命令行工具中输入如何从共有仓库同步代码包直接访问MySQL。 然后设定密码;

首先进入mysql,然后输入以下代码:

usemysql; updateusersetauthentication _ string=password (输入要更改的密码) whereUser='root ); #密码updateusersetplugin=' MySQL _ native _ password '; #如果没有此行,也可能报告错误,因此必须运行此行的flushprivileges; #更新所有操作权限exit

首先安装 MySQL

mysql-uroot-p

输入刚才设定的密码就可以登录数据库。 接下来请拨mysql。 调试很简单。

#我们为了测试设置了*。 视情况而定grantallprivilegeson *.* to ' my user ' @ ' % ' identified by ' my password ' withgrantoption; flush权限; 注释掉sudo vim/etc/MySQL/MySQL.conf.d/mysqld.cn f # bind-address=127.0.0.1 servicemysqlrestart

现在可以远程连接到数据库了。 (请打开服务器3306安全组)

2.2安装CNP mjs.org

2.2.1基本结构

首先启动clone cnpmjs项目,然后安装依赖关系

git clone https://github.com/cnpm/CNP mjs.org.gitcdnpmjs.org #选择2.X相对稳定的版本来部署gitcheckout2.19.4npmi

cnpmjs提供了config文件进行配置,文件路径位于config/index.js中,配置如下:

配置服务器端口

用于访问npmconfigsetregistrywebport :7001、//registry端口、npmconfigsetregistrywebport 33607002、//web端口和cnpm页面

/p>

数据库配置

 

database: {  db: 'cnpmjs', // 数据库名称  username: 'root', // 用户名  password: '', // 密码 dialect: 'mysql', // 服务器中安装的数据库  host: '127.0.0.1', // 服务器 ip 地址  port: 3306, // 数据库端口号   // storage: path.join(dataDir, 'data.sqlite'), // 因为我们选用的是 mysql,所以将其注释}

 

是否启用私有模式

 

// 在启用私有模式时,只有管理员才能发布工具包,非管理员发布工具包必须以 scope 开头,例如 @ke/hobber-clienablePrivate: false,scopes: ['@jacob'] // 根据实际情况自由配置

 

管理员账号配置

 

admins: {  admin: 'jacob.lcs@qq.com',}

 

2.2.2 创建数据库表

 

首先保证目前的路径是在 cnpmjs.org 路径下,然后运行如下命令:

 

mysql -u root -pcreate database cnpmjs;source docs/db.sql;

 

此时数据库中应该存在以下数据表:

 

 

2.2.3 启动项目

 

在这里我们使用 pm2 启动项目:

 

npm i pm2 -gpm2 start ./dispatch.js

 

启动之后运行 pm2 status 查看项目当前运行状态,如下显示则表示成功运行。

 

 

在 config/index.js 中我们配置了两个端口号,分别是 7001、7002,需要在安全组中开放这两个端口,此时使用 IP + 端口号即可访问部署的 cnpm 服务,如下所示:

 

 

3 发布工具包到私有仓库

 

上面提到过 7001 端口是用于 npm set config registry 用的,比如说笔者的服务器域名为 http://lcs.show,那么 registry 地址就为 http://lcs.show:7001,使用如下命令进行设置。

 

npm config set registry http://lcs.show:7001# 添加用户并登录npm addusernpm login

 

准备一个测试项目发布到 npm 仓库中,将 package.json 中的 name 改为 scopes 中的字段开头,例如 @jacob/aeditor,执行如下命令即可。

 

npm publish

 

显示如下即表示发布成功。

 

 

然后我们访问我们搭建的私有 npm 仓库页面查看该工具包的介绍页,该包的访问地址如下:http://lcs.show:7002/@jacob/aeditor。

 

显示如下:

 

 

发布到我们的私有仓库之后可以测试一下安装是否成功,运行 npm i @jacob/aeditor 即可,安装成功则表示成功运行。

 

4 进阶配置

 

经过上述配置之后我们可以使用 npm 私有仓库进行工具包的发布、安装操作了,使用私有 npm 仓库的目的之一是保证 npm install 服务的稳定性和速度,所以在公司搭建好 npm 私仓之后要做的另一件事是定时同步 npm 共有仓库中的工具包,将所有的包存储在公司内部的服务器中。cnpmjs 也给我们提供了以下两种同步方式:

 

4.1 手动同步

 

在私有仓库首页搜索某个工具包,如果这个包在服务器中不存在的话会显示如下界面:

 

 

cnpmjs 提供了两个选项,一个是从官方 npm 仓库中进行同步,再一个就是去官方 npm 仓库中搜索,在这里我们点击 SYNC 进行同步操作,cnpmjs 就会自动帮我们进行同步操作了,同步完成后就可以在私仓首页搜索到对应的包信息,这里要注意的是,cnpmjs 同步并不是只同步你搜索的包,而是会同步其所有的依赖

 

 

同步完成后我们就可以在私仓中搜索到对应的包信息了。

 

 

4.2 自动同步

 

cnpmjs 还提供了自动同步的方式,在 config/index.js 文件中有一个 syncModel 配置项,提供了三个配置(none - 不自动同步、exist - 同步私仓中已存在的包、all - 同步所有的包),在这里就可以根据实际情况进行配置了。

 

如果自动同步所有包的话会带来一个问题,就是磁盘体积问题,笔者在同步 Vue、less 两个包之后硬盘空间已经占用了 30G 以上,笔者还没有来得及测试到底有多大,40G 的云空间已经存满了。同步所有包的话服务器磁盘空间会有很大压力,所幸 cnpmjs 也为我们提供了 OSS 选项,笔者使用 qn-cnpm(七牛云 OSS) 进行演示。

 

安装 qn-cnpm:

 

npm i qn-cnpm

 

使用 qn-cnpm,在 config/index 的 nfs 进行配置,配置如下:

 

nfs: require('qn-cnpm')({    accessKey: 'your access key',    secretKey: 'your secret key',     bucket: 'qiniu',    domain: 'http://qiniu-sdk-test.qiniudn.com'});

 

这样可以将自动同步的包存储到云服务中去了。

 

5 常见问题 QA

 

400 Bad Request - PUT http://lcs.show:7001/@jacb%2faeditor - invalid scope

出现这种情况一般是 scopes 没有设置好,导致当前的包的 scope 不包含在 cnpmjs 的 scopes 数组内,修改完成之后进行重新启动 cnpm。

 

403 Forbidden - PUT http://lcs.show:7001/aeditor - no_perms

这种就是当前 npm 登录的用户不是私有仓库的管理员并且没有设置工具包的 scope,导致发布失败。

 

6 参考文档

 

cnpmjs 官方部署文档

https://github.com/cnpm/cnpmjs.org/wiki/Deploy

分分钟教会你搭建企业级的 npm 私有仓库

https://juejin.im/post/6844904196651630599

CNPM搭建私有的NPM服务

http://blog.fens.me/nodejs-cnpm-npm/

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。