当前位置: 首页 > 工具软件 > docker-npm > 使用案例 >

docker-compose搭建npm私有服务

湛博易
2023-12-01

1、环境

服务器:CentOS Linux release 7.6.1810 (Core) +

docker 19.03.8+

2、认识或者安装

Verdaccio: 一个轻量级的Node.js私有代理注册表

官网:https://verdaccio.org/

安装:

docker pull verdaccio/verdaccio

3、 创建项目结构和文件

-warehouse
  -docker-compose.yml   #docker-compose 配置文件
  -plugins              
  -config
      -config.yaml      #verdaccio 配置文件
  -storage

设置全部文件夹下面文件权限:可读可写

chmod -R 777 xxx/warehouse
chmod -R 777 xxx/warehouse/plugins
chmod -R 777 xxx/warehouse/config
chmod -R 777 xxx/warehouse/config/config.yaml
chmod -R 777 xxx/warehouse/storage

4、 编辑 docker-compose 配置文件

version: '3.4'

services:
  verdaccio:
    image: verdaccio/verdaccio
    container_name: "verdaccio"
    networks:
      - node-network
    environment:
      # VERDACCIO 服务端口
      - VERDACCIO_PORT=3005
      # 当前登录 linux 服务器的用户名
      - VERDACCIO_USER_NAME="root" 
    ports:
      # 宿主和容器的端口
      - "3005:3005"
    volumes:
      - "./storage:/verdaccio/storage"
      - "./config:/verdaccio/conf"
      - "./plugins:/verdaccio/plugins"
networks:
  node-network:
    driver: bridge

对应文件 warehouse/docker-compose.yml

上面配置需要注意:VERDACCIO_USER_NAME。 如果未配置或者配置错误,在后面的操作中可能会报错。

5、 编辑 verdaccio 配置文件

文件 warehouse/config/config.yaml

storage: /verdaccio/storage
web:
  # 网站Title
  title: 私有NPM服务
  # 禁用Gravatar头像
  # gravatar: false
  # 排序方式 asc|desc
  # sort_packages: asc
  # 是否启用暗黑模式
  # darkMode: true
  # logo地址
  # logo: http://somedomain/somelogo.png
  # favicon地址
  # favicon: http://somedomain/favicon.ico | /path/favicon.ico

# i18n翻译配置
# i18n:
# 可用列表见:https://github.com/verdaccio/ui/tree/master/i18n/translations
#   web: en-US
auth:
  htpasswd:
    file: /verdaccio/conf/htpasswd

# 上游npm库,这里可用设置为淘宝
uplinks:
  npmjs:
   url: https://registry.npmjs.org/
  server2:
    url: https://registry.npmmirror.com/
  server3:
    url: https://mirrors.cloud.tencent.com/npm/

packages:
  '@*/*':
    # 允许所有人访问
    access: $all
    # 注册用户可访问
    publish: $authenticated
    # 注册用户可访问 
    unpublish: $authenticated
    proxy: npmjs server2 server3
  '**':
    # 这里如果不设置在使用 npm i xxx、 npm publish 时将会提示包不存在,为了方便这里直接设置上如下两行
    # 默认情况下所有用户 (包括未授权用户) 都可以查看和发布任意包
    # 你可以指定 用户名/分组名 (取决于你使用什么授权插件,默认的授权插件是内置的 htpasswd)
    # 访问权限有三个关键词: "$all", "$anonymous", "$authenticated"
    # $all 表示不限制,任何人可访问;
    # $anonymous 表示未注册用户可访问;
    # $authenticated 表示只有注册用户可访问
    access: $all
    publish: $authenticated
    unpublish: $authenticated
    # 如果私有包服务不可用在本地,则会代理请求到'npmjs'
    proxy: npmjs server2 server3
    
# 您可以指定传入连接的HTTP /1.1服务器保持活动超时(以秒为单位)。
# 值为0会使http服务器的行为类似于8.0.0之前的Node.js版本,后者没有保持活动超时。
# 解决方法:通过给定的配置可以解决以下问题
server:
  keepAliveTimeout: 60

# 中间件
middlewares:
  audit:
    enabled: true

# 日志设置
logs:
  - {type: stdout, format: pretty, level: http}

# 开放远程访问,允许所有IP
listen:
  # 这个端口务必对应上
  - 0.0.0.0:3005

6、 启动容器

执行下面命令即可

docker-compose up -d --build

在浏览器打开 服务器网址:端口(3005) 即可

7、 切换 npm 代理

安装nrm

npm i -g nrm

添加代理

nrm add verdaccio <你的服务器地址:3005>

切换到添加的代理(使用代理源)

 nrm use verdaccio

查看当前npm 源

npm get registry

其他

1、设置其他源如腾讯源、阿里源

npm config set registry http://registry.npm.taobao.org
npm config set registry https://registry.npmmirror.com/

2、npm设置官方源:

npm config set registry http://www.npmjs.org

3、查看现有的npm源

nrm ls

8、 新增仓库账户

npm adduser --registry <你的服务器地址:3005>

接着,它会要求你填写用户名、密码和邮箱,用于登陆私有 npm 库

9、 登陆私有库用户

# 登录用户
$ npm login

# 查看当前登录用户
$ npm who am i

10、在私有库发布包

# 发布当前包 
$ npm publish
 类似资料: