Docker 部署 Verdaccio 踩坑纪实

170 阅读3分钟

拉去node镜像

docker pull node

运行一个docker容器

docker -itd --name verdaccio -p 8080:8080 node

查看docker容器ID

docker ps

进入docker容器

docker exec -itd 容器ID /bin/bash

检查node

node -v

安装nrm

npm install -g nrm

切换npm源为国内源 以taobao为例

nrm use taobao

安装pm2守护进程工具

npm install -g pm2

安装Verdaccio

npm install -g verdaccio

安装vim 文本编辑(有此功能飘过)

apt-get install vim

修改verdaccio 默认配置

  • 由于默认配置listen: - localhost:4873 导致无法docker映射服务无法访问
  • 需要修改为 listen: - 0.0.0.0:4873
vim /root/verdaccio/config.yaml

此处仅展示片段信息

listen:
# - localhost:4873            # default value
# - http://localhost:4873     # same thing
  - 0.0.0.0:4873              # listen on all addresses (INADDR_ANY)
# - https://example.org:4873  # if you want to use https
# - "[::1]:4873"                # ipv6
# - unix:/tmp/verdaccio.sock    # unix socket

保存配置文件

使用pm2 守护进程启动verdaccio

pm2 start verdaccio

到此就可以在真机浏览器访问服务了

停止服务

pm2 stop verdaccio

或者 使用pm2 守护进程启动verdaccio

pm2 start `which verdaccio`

停止服务

pm2 stop `which verdaccio`

Verdaccio config.yaml配置文件

官方配置文件

# 本地仓库的目录,用于存放我们上传的包和从npm服务器同步下来的包
storage: ./storage
# 插件目录的位置。对Docker/Kubernetes 基础上的配置非常有用。
plugins: ./plugins

# verdaccio启用的web应用相关配置,更多web-ui配置参考https://verdaccio.org/docs/zh-CN/webui
web:
  # web页title
  title: Verdaccio	
  # 注释掉以禁用gravatar支持
  # gravatar: false
  # 包的排序,正序/倒序 (asc|desc)
  # sort_packages: asc
  # 深色模式
  # darkMode: true

# 权限认证相关
auth:
  # 用户密码管理
  htpasswd:
    file: ./htpasswd	# 用户密码存放位置
    
    # 允许注册用户的最大值,默认1000,如果设置为-1不允许通过adduser添加用户,但是可以手动向htpasswd中添加用户
    # max_users: 1000

# 上游链路,缓存中找不到用户下载包时向上游链路请求资源
uplinks:
  npmjs:
    # 这里最好修改位淘宝镜像
    url: https://registry.npm.taobao.org/

# 包权限配置,@*/*scope包和**普通包的配置
packages:
  # 1. $all 所有用户
  # 2. $authenticated 表示只有通过验证的人(已注册)可以执行对应操作,注意,任何人都可以去注册账户。
  # 3. 或者也可以指定对应于之前我们配置的用户表 htpasswd 中的一个或多个用户,用空格分开即可
  # 4. $anonymous 表示只有匿名者可以进行对应操作(通常无用)
  
  # scoped包
  '@*/*':
    access: $all				# 访问权限,
    publish: $authenticated		# 发布权限
    unpublish: $authenticated	# 取消发布权限
    proxy: npmjs				# 如果请求的包不在服务器中,向配置的上游npmjs请求包

  # 普通包
  '**':
    access: $all
    publish: $authenticated
    unpublish: $authenticated
    proxy: npmjs

# 服务器相关配置
server:
  keepAliveTimeout: 60		# 超时时间

# 中间件配置
middlewares:
  # npm 审核认证
  audit:
    enabled: true

# 输出日志配置
logs:
  # type: stdout --- 控制台输出; file --- 输出到文件
  # path: 如果输出到文件类型,需要制定输出路径
  # format: 输出格式 [pretty, pretty-timestamped]
  # level: 日志级别	[fatal, error, warn, http, info, debug, trace]
  
  - { type: stdout, format: pretty, level: http }
  # - {type: file, path: verdaccio.log, level: info}