如果使用 docker 来部署一个自己的私有仓库大概率会遇到很多坑,本文章记录下来我搭建下来的过程中所遇到的问题和解决方法。当然了,重点当搭建一个私有仓库的过程。
1、环境
服务器:CentOS Linux release 7.6.1810 (Core)
docker 19.03.8
2、 认识/安装 Verdaccio
认识
Verdaccio: 一个轻量级的Node.js私有代理注册表
官网: verdaccio.org/
安装
docker pull verdaccio/verdaccio
ps: 我安装时最新版为 verdaccio 5.4.0
3、 创建项目结构和文件
-warehouse
-docker-compose.yml #docker-compose 配置文件
-plugins
-config
-config.yaml #verdaccio 配置文件
-storage
4、 编辑 docker-compose 配置文件
文件 warehouse/docker-compose.yml
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
上面配置需要注意:VERDACCIO_USER_NAME
。 如果未配置或者配置错误,在后面的操作中可能会报错(后面再说)。
5、 编辑 verdaccio 配置文件
文件 warehouse/config/config.yaml
storage: /verdaccio/storage
auth:
htpasswd:
file: /verdaccio/conf/htpasswd
uplinks:
npmjs:
url: https://registry.npmjs.org/
server2:
url: https://registry.npm.taobao.org/
packages:
'@*/*':
access: $all
publish: $authenticated
proxy: npmjs server2
'**':
# 这里如果不设置在使用 npm i xxx、 npm publish 时将会提示包不存在,为了方便这里直接设置上如下两行
access: $all
publish: $authenticated
proxy: npmjs
logs:
- {type: stdout, format: pretty, level: http}
listen:
# 这个端口务必对应上
- 0.0.0.0:3005
6、 启动容器
执行下面命令即可
docker-compose up -d --build
在浏览器打开 服务器网址:端口(3005)
将会出现如下页面
这里如果按照上面的配置来,应该不会出错的。到这里就结束了。接下来是测试是否可用阶段。
接下来的所有操作都在本地电脑执行即可,没有必要再到服务器折腾。
接下来的所有操作都在本地电脑执行即可,没有必要再到服务器折腾。
接下来的所有操作都在本地电脑执行即可,没有必要再到服务器折腾。
7、 切换 npm 代理
使用 nrm 来操作即可。 为什么 nrm 使用的一篇文章 juejin.cn/post/684490…
安装 nrm :
npm i -g nrm
添加代理
nrm add test <你的服务器地址:3005>
切换到添加的代理
nrm use test
8、 新增仓库账户
npm adduser
新增完毕后默认会切换到那个用户,可以使用命令确认下是否切换到了新增的这个用户,不然下面的操作可能会出问题。
npm who am i
执行上面命令后会输入当前 npm 用户名
9、 发布包
发布你已经写好的包(这个应该不用介绍吧,毕竟都看这篇文章了)
npm publish
然后会让你输入账号、密码、邮箱。如果顺利那就回提示成功。
如果遇到如下错误:
npm ERR! 500 Internal Server Error
那应该是服务器读写文件权限问题,排查文件 warehouse/docker-compose.yml 中的 VERDACCIO_USER_NAME
是否和服务器登录用户一致。
除了用户权限不一致外,还有一个问题也会导致这个错误: 就是手欠在 config/ 目录下建立了一个 htpasswd 的文件夹
发布成功后刷新仓库页面将会看到发布的包
10、 安装包
npm i xxx
这里安装如果提示错误 403 Forbidden
那就是 warehouse/config/config.yaml 文件中,以下代码配置不对
packages:
'**':
# 这里如果不设置在使用 npm i xxx、 npm publish 时将会提示包不存在,为了方便这里直接设置上如下两行
access: $all
publish: $authenticated
proxy: npmjs
到这里就结束了😬