需求
使用Kong来代理Verdaccio,实现直接通过域名+path的方式来访问,并且Verdaccio使用ldap来管理
前提
Kong+ldap已部署好,并且也部署好了Kong Dashboard 。(后面有需求再写关于Kong代理的各种设置)
搭建过程
思路:为了实现数据安全,保证高可用性,先正常启动一遍Verdaccio,把需要挂载的目录docker cp 到本地先,移除之前的容器,通过挂载目录的方式再已启动一遍,通过修改外部的配置文件+重启容器来实现我们需要的功能
–第一次启动容器
docker run -d --name verdaccio -p 4873:4873 --restart always verdaccio/verdaccio
然后我是把/verdaccio这个目录下的3个文件都复制出来(conf当的是配置文件,plugins是插件,storage上传的包)
然后rm掉容器,通过挂载的方式再启动一遍
docker run -d \
--name verdaccio \
--network host \
--restart always \
--volume /sfere/verdaccio/conf:/verdaccio/conf \
--volume /sfere/verdaccio/plugins:/verdaccio/plugins \
--volume /sfere/verdaccio/storage:/verdaccio/storage \
verdaccio/verdaccio
-
首先先实现与ldap的集成
Verdaccio是有现成的插件可以用的,npm库里面直接可以找到,这边直接贴上url
https://www.npmjs.com/package/verdaccio-ldap
按照官方给的文档,我们先进入到容器中安装ldap的插件npm install verdaccio-ldap
注意:
下载好直接,需要再运行下 命令npm i
把依赖包都下载下来,这个官方文档上没说,如果不下载的话,在加载ldap插件的时候Verdaccio会报错,找不到很多模块,一个个去下肯定不现实接下来修改Verdaccio配置文件(config.yaml)中的 auth部分
到这一步,与ldap的集成是可以了,等Kong的代理设置好之后一起验证 -
设置Kong的代理
其实在设置Kong的代理的时候,难点不是在于如何去设置server和route,而是代理会导致Verdaccio本身很多请求路径的改变,导致很多资源not found(我的Kong改过端口,监听8090)
路由中勾选丢弃Path然后这时候你访问你Verdaccio的地址,界面都出不来,然后你F12打开会看到很多静态资源找不到。一般正常时候的做法,会为这些静态资源再去做路由,但是Verdaccio比较特殊,你即使为它做了所需的所有路由,有些关键api它还是会找不到。最后参考https://github.com/verdaccio/verdaccio/issues/1112 ,在Verdaccio的配置文件中直接固定好请求的前半部部分,同时注意,我在配置文件中额外加了一段配置 max_body_size: 1000mb ,这个是控制npm 上传包时候的大小,如果不添加,默认值是很小的,上传的时候超过限额会报错。
然后配置文件剩下的部分(上游地址,上传下载权限等)根据情况自定义吧。这时候你再保存配置文件,重启Verdaccio的容器,在日志中可以发现,已加载ldap插件,而且可以正常访问web页面,使用ldap账户登陆
-
测试上传下载
切换到本地PC机上,打开类cmd工具,设置默认仓库地址,先试试npm login,这时候可以使用-d参数,打印出过程 .登陆账密和邮箱,然后使用npm whoami 验证是否登陆成功npm set registry https://xx.xxx.com:8090/npm npm login -d npm whoami -d
接下来测试上传代码 npm publish
如果按照我一样,是把Verdaccio中那3个目录都挂载出来的挂,是会报错的,提示找不到你上传的包,具体可以参考下面的url
https://github.com/verdaccio/verdaccio/issues/483
这个问题也折腾了我好久,百度半天都没用,还是在项目中的问题提交处找到一个类似情况,查比较偏的问题还是建议大家多google和逛github。其实就是 存储包的 storage 权限问题导致的,为了方便我就直接777了chmod -R 777 storage
这时候再publish就没问题了
然后第二个坑的来了,npm install 下载我们刚刚上传的包。如果你的项目比较大,那肯定会报错 “504 Gateway Time-out”
这个问题其实百一下就知道了,是nginx的默认限制太小,导致的
参考url:https://www.cnblogs.com/youn/p/5345506.html那我们直接去改kong里面nginx的配置即可
vi /usr/local/kong/nginx-kong.conf
重载nginx/usr/local/openresty/nginx/sbin/nginx -s reload -p /usr/local/kong -c nginx.conf
最后就可以正常下载了。整个流程就打通了