首页 > 其他分享 >使用Docker搭建npm私有仓库

使用Docker搭建npm私有仓库

时间:2025-01-07 11:23:36浏览次数:1  
标签:npm package 私有 创建 deploy 仓库 Docker docker

由于文章格式和图片解析问题,为了更好的阅读体验,读者可前往 阅读原文

在公司团队内一般都会拥有私有的工具包或者其他依赖,这些东西又是比较敏感的信息,因此如npm私库的搭建在公司内部必不可少。

私库搭建方式有很多,本篇通过docker+nexus3的进行搭建。
本人使用ARM架构Centos7.9虚拟机环境进行搭建,请你阅前了解

扫码关注攻粽号,查看更多优质文章

image

安装docker

docker安装步骤可以参考本人的 docker安装一文

sudo yum remove docker \
  docker-client \
  docker-client-latest \
  docker-common \
  docker-latest \
  docker-latest-logrotate \
  docker-logrotate \
  docker-engine

sudo yum install -y yum-utils
sudo yum-config-manager \
    --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 查看可安装的docker版本
sudo yum list docker-ce --showduplicates | sort -r

sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 启动docker
sudo systemctl start docker

安装nexus3

  1. 这里采用宿主机卷映射,先创建nexus配置卷

    mkdir -p /srv/nexus
    
    # 授权
    chown -R 200 /srv/nexus
    
  2. 下载镜像并运行

    这里本人是在arm架构的Centos上安装的,需要支持arm架构的nexus镜像,由于官方镜像没有提供支持arm架构的镜像,这里选择了别人编译好的支持arm架构的镜像,你可以选择非arm架构的官方镜像

    # 启动nexus3容器,会从远程拉取镜像
    docker pull klo2k/nexus3 # arm架构
    
    # 运行容器
    docker run -d --name nexus3 --restart=always \
        -p 8081:8081 \
        -p 8000-8010:8000-8010 \
        -v /srv/nexus:/nexus-data \
        klo2k/nexus3
    

    nexus内部默认会使用8001作为http访问的端口,把它映射到主机上,然后再暴露一个端口范围供后续其他使用

  3. 运行后根据机器配置一般需要等待一段时间,你可以查看其运行日志:

    docker logs -f nexus3
    

初始密码

nexus的默认账户为admin,初始密码在容器内/nexus-data/admin.password文件中,如果你进行了卷挂载也可以在宿主机卷中查看

# 进入容器查看admin密码
docker exec nexus3 cat /nexus-data/admin.password
b75981d3-affe-45f1-ba6f-10046b8bc4b9

# 挂载了数据卷可以进行本地查看
cat /srv/nexus/admin.password

访问nexus3

访问地址为YourIP:PORT如localhost:8081,用初始账号密码进行登录,admin/xxxxx ,初次进入后可以修改密码

nexus1

基本面板左侧可以查找对应的仓库包文件,Brower菜单进入可以看到对应的仓库

image-20230320162008106

image-20230320162051975

上面的设置按钮需要有权限才可以看到,当前admin用户,可以看到,你也可以创建其他用户并分配适当的权限,所有的仓库储存、角色权限等操作都在设置面板里配置。

通常我们只需要关注下图红框中的配置即可

image-20230320162812212

创建存储集

创建数据存储单元集用来存放数据,你可以将Blob store理解为存储文件的地方,repository相当于数据库用来映射文件路径。

为什么要创建Blob Store呢?当你创建了某个blobstore就会某个关联的repository的内容存储到这里,你可以创建多个blobstore关联多个repository,这样就防止了数据的污染。

点击左侧菜单Blob Stores ,然后点击右侧 Create Blob Store 按钮

image-20230320163655564

然后创建页面先选择数据类型,这里选择 File 类型,然后给数据存储单元命名,最好语义明确如:npm,方便以后查看,都填写后点击保存按钮即可,列表中就会看到刚刚创建的存储单元集合

image-20230320163718336

创建仓库

创建仓库关联存储集,点击左侧菜单Repositories ,然后点击右侧 Create Repository 按钮

image-20230320163852830

然后选择npm(hosted),这里你会看到有hosted、proxy、group三类npm仓库,三者区别后面会讲。

进入创建仓库配置页面,如下,需要填写仓库名称、存储集、发布策略

image-20230320164334735

注意以下几点:

  • 同一类型的仓库名需要唯一,防止和旧的仓库重名
  • 储存集选择你前面创建的存储集,如npm
  • 发布策略中包含集中策略:根据你的需求设置,这里选择允许重发
    • 允许重发
    • 禁止重发
    • 只读
    • 通过复制发布(不推荐)

      来自官方的解释:If you are using replication, this policy is automatically set to Deploy by Replication Only. This will block all deployment to the hosted repository except by the internal replication mechanism. You should not manually set this policy to Deploy by Replication Only. If you disable replication, Nexus Repository automatically restores your previous deployment policy.

最后点击创建仓库按钮,就可以在仓库列表中找到刚刚创建的仓库了

image-20230320165149705

点击copy按钮查看仓库地址

image-20230320165406279

创建角色

前面npm-hosted创建好后,其实就可以上传自己的npm包到这个仓库了,一般不会使用系统账户进行登录发包,所以需要创建新的用户并授权npm相关权限,因此需要创建对应的角色和权限

点击左侧Roles菜单栏,在右侧面板点击创建角色,填写对应的角色名、id、描述等(仍然推荐语义明确)

image-20230320165944937

然后选择对应的权限,搜索npm,点击Transfer All将所有加入右侧列表

image-20230320170145483

如果你有还需要其他权限可以自行添加,这里讲下除了可以选择权限外,也可以选择已经存在的角色,这样也会拥有其权限,效果一样

image-20230320170353059

最后点击保存

创建用户

有了角色就可以创建用户关联此角色了,点击左侧Users菜单,在右侧面板中点击创建用户

image-20230320170654757

  • 用户ID:用来登录npm的用户名
  • Firstname:显示名字,随意填
  • Lastname:随意填
  • Email:可以随意填
  • password:你的密码
  • status:用户状态,选择active

:::warning
以上红框中需要重视其他可以随意填
:::

接着关联角色,将刚刚创建的角色移入右侧,点击创建

image-20230320171019351

权限认证

有了相关的角色后,需要对一些权限添加认证,也就是需要登录认证,才可以进行操作

点击左侧Realms菜单,将你需要认证的权限移入右侧,点击保存

image-20230320171459435

发布npm包

  1. 本地使用npm初始化创建一个项目

    npm init -y
    

    这里package.json文件内容如下,主文件为index.js

    {
      "name": "test-deploy",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
      },
      "keywords": [],
      "author": "",
      "license": "ISC"
    }
    
  2. 简单创建一个index.js文件:

    const add = (x, y) => x + y;
    
    module.exports = {
      add
    }
    
  3. 设置npm仓库,你可以使用npm config set registry xxxx 创建,这里推荐在项目创建.npmrc文件

    # 地址改为自己 npm-hosted 仓库地址
    registry=http://192.168.10.10:8081/repository/npm-hosted/
    

    或者在package.json中添加:

    "publishConfig": {
        "registry": "http://192.168.10.10:8081/repository/npm-hosted/"
     }
    

    image-20230320172745102

  4. 登录并发布

    # 使用创建的用户登录
    npm login
    

    image-20230320173208309

    # 发布
    npm publish
    

    image-20230320173258611

  5. 在仓库中查看

    image-20230320173512796

    image-20230320173424057

验证npm包

在一个新项目中安装上传的npm包,注意如果你没有设置npm全局仓库配置,需要创建.npmrc添加npm仓库

image-20230320174205932

可以看到安装成功,接着创建index.js文件并引用里面的add方法

// index.js
const { add } = require('test-deploy');
console.log(add(1,2));

image-20230320174525384

可以看到运行成功

这里有一个坑,之所以安装成功,是因为我们的库中没有依赖其他的npm包,如果有依赖私有仓库没有的npm包,这里安装时就会报错,我们复现下:

重新在我们的npm包里安装一个私有仓库没有的依赖,这里安装day,注意需要先把.npmrc中的仓库注释掉,这样可以从官方的npm仓库中下载

# test-deploy 中安装 day
➜ devops test-deploy npm install day
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN test-deploy@1.0.0 No description
npm WARN test-deploy@1.0.0 No repository field.

+ day@0.0.2
added 1 package from 1 contributor and audited 1 package in 1.57s
found 0 vulnerabilities

修改版本号:

{
  "name": "test-deploy",
  "version": "1.0.1",
  "description": "",
  "main": "index.js",
  "scripts": {},
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "day": "0.0.2"
  }
}

重新发布:注意.npmrc添加仓库地址

➜ devops test-deploy npm publish
npm notice
npm notice 

标签:npm,package,私有,创建,deploy,仓库,Docker,docker
From: https://www.cnblogs.com/98kk/p/18657276

相关文章

  • Docker
    安装Docker1.卸载已有的Dockeryumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\docker-engine\docker-selinux2.配置yum源安装yum......
  • 曲线救国--访问dockerhub仓库
     前言由于dockerhub也被墙了,导致基础镜像没法拉取。后面解封了,又被墙了。。。在这次被墙之前,访问国外的速度也是堪忧,甚至访问不了k8s的镜像,基于此,分享一下笔者经验使用Daocloud传送门:https://github.com/DaoCloud/public-image-mirror简单来说,就是加一个docker.m.da......
  • 每天40分玩转Django:Django Docker化学习指南
    DjangoDocker化学习指南1.学习目标理解Docker容器化的基本概念和优势掌握Django应用的Docker化过程学习使用DockerCompose管理多容器应用2.核心知识点知识点重要程度掌握要求Dockerfile编写⭐⭐⭐⭐⭐熟练掌握Docker基本命令⭐⭐⭐⭐熟练掌握DockerCompose配置⭐⭐......
  • 基于 docker 安装 nginx 详细教程
    1.创建普通用户用于管理docker在本教程中我们创建一个普通用户来进行后续的docker相关服务的配置与运维。当然本操作是非必须的,你可以直接使用root用户来直接操作,对整个流程没有影响。不想创建用户请直接跳过第一部分,从第二部分开始操作即可。创建普通用户 lidyuseraddl......
  • 【docker系列】可视化Docker 管理工具——Portainer
    1.介绍Portainer是一个可视化的Docker操作界面,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。2.需要环境2.1硬件需......
  • Docker-Compose配置文件结构详解及命令
    yaml文件结构在项目名目录下创建docker-compose.yaml文件,文件结构如下version:'3'#版本号services:#服务类web:#web服务build:../#在本文件的上级目录下构建映像restart:unless-stopped#重启策略ports:-"6000:5......
  • CentOS7环境下的Docker使用(五)Docker容器的网络模式
    在CentOS7环境下使用Docker时,容器的网络模式是一个重要的概念。Docker提供了三种默认的网络模式:bridge、host和none。了解这些模式的特点和适用场景,有助于更好地配置和管理Docker容器。一、Bridge模式Bridge模式是Docker的默认网络模式。在这种模式下,每个容器都会分配一个独立的I......
  • Docker多阶段构建详解及问题解决
    在Docker的构建过程中,多阶段构建是一种非常强大的功能,它允许我们在一个Dockerfile中使用多个阶段来构建镜像,从而大大优化最终镜像的大小和构建过程。本文将详细介绍Docker多阶段构建的基本用法,并针对在使用该功能时可能遇到的问题提供解决方案。Docker多阶段构建基础多阶......
  • 私有化部署视频平台EasyCVR安防知识:5G技术对安防监控系统的数据存储需求有何影响
    随着5G技术的快速发展和广泛应用,安防监控系统正经历一场深刻的变革。5G技术不仅提升了视频传输的速度和质量,还极大地推动了安防监控系统在数据存储方面的创新和发展。以下是5G技术对安防监控系统数据存储需求产生的显著影响。一、数据量的显著增加1、高清视频数据的激增5G技术......
  • ThingsBoard - docker源码打包部署
    【ThingsBoard-docker源码打包部署-哔哩哔哩-如果觉得有用点下关注】 1、Docker-compose拉取镜像部署文档地址:ThingsBoard-源码编译打包部署-CSDN博客2、Dockerfile#使用thingsboard/openjdk17:bookworm-slim作为基础镜像FROMthingsboard/openjdk17:bookworm......